12.3. ノードのネットワーク設定のトラブルシューティング
ノードのネットワーク設定で問題が発生した場合には、ポリシーが自動的にロールバックされ、enactment (実行) レポートは失敗します。これには、以下のような問題が含まれます。
- ホストで設定を適用できません。
- ホストはデフォルトゲートウェイへの接続を失います。
- ホストは API サーバーへの接続を失います。
12.3.1. 正確でないノードネットワーク設定のポリシー設定のトラブルシューティング
ノードネットワーク設定ポリシーを適用し、クラスター全体でノードのネットワーク設定への変更を適用することができます。正確でない設定を適用する場合、以下の例を使用して、失敗したノードネットワークポリシーのトラブルシューティングと修正を行うことができます。
この例では、Linux ブリッジポリシーは、3 つのコントロールプレーンノード (マスター) と 3 つのコンピュート (ワーカー) ノードを持つクラスターのサンプルに適用されます。ポリシーは正しくないインターフェイスを参照するために、適用することができません。エラーを確認するには、利用可能な NMState リソースを調べます。その後に、正しい設定でポリシーを更新できます。
手順
ポリシーを作成し、これをクラスターに適用します。以下の例では、
ens01
インターフェイスに単純なブリッジを作成します。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: ens01-bridge-testfail spec: desiredState: interfaces: - name: br1 description: Linux bridge with the wrong port type: linux-bridge state: up ipv4: dhcp: true enabled: true bridge: options: stp: enabled: false port: - name: ens01
$ oc apply -f ens01-bridge-testfail.yaml
出力例
nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created
以下のコマンドを実行してポリシーのステータスを確認します。
$ oc get nncp
この出力は、ポリシーが失敗したことを示しています。
出力例
NAME STATUS ens01-bridge-testfail FailedToConfigure
ただし、ポリシーのステータスのみでは、すべてのノードで失敗したか、ノードのサブセットで失敗したかを確認することはできません。
ノードのネットワーク設定の enactment (実行) を一覧表示し、ポリシーがいずれかのノードで成功したかどうかを確認します。このポリシーがノードのサブセットに対してのみ失敗した場合は、問題が特定のノード設定にあることが示唆されます。このポリシーがすべてのノードで失敗した場合には、問題はポリシーに関連するものであることが示唆されます。
$ oc get nnce
この出力は、ポリシーがすべてのノードで失敗したことを示しています。
出力例
NAME STATUS control-plane-1.ens01-bridge-testfail FailedToConfigure control-plane-2.ens01-bridge-testfail FailedToConfigure control-plane-3.ens01-bridge-testfail FailedToConfigure compute-1.ens01-bridge-testfail FailedToConfigure compute-2.ens01-bridge-testfail FailedToConfigure compute-3.ens01-bridge-testfail FailedToConfigure
失敗した enactment (実行) のいずれかを表示し、トレースバックを確認します。以下のコマンドは、出力ツール
jsonpath
を使用して出力をフィルターします。$ oc get nnce compute-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'
このコマンドは、簡潔にするために編集されている大きなトレースバックを返します。
出力例
error reconciling NodeNetworkConfigurationPolicy at desired state apply: , failed to execute nmstatectl set --no-commit --timeout 480: 'exit status 1' '' ... libnmstate.error.NmstateVerificationError: desired ======= --- name: br1 type: linux-bridge state: up bridge: options: group-forward-mask: 0 mac-ageing-time: 300 multicast-snooping: true stp: enabled: false forward-delay: 15 hello-time: 2 max-age: 20 priority: 32768 port: - name: ens01 description: Linux bridge with the wrong port ipv4: address: [] auto-dns: true auto-gateway: true auto-routes: true dhcp: true enabled: true ipv6: enabled: false mac-address: 01-23-45-67-89-AB mtu: 1500 current ======= --- name: br1 type: linux-bridge state: up bridge: options: group-forward-mask: 0 mac-ageing-time: 300 multicast-snooping: true stp: enabled: false forward-delay: 15 hello-time: 2 max-age: 20 priority: 32768 port: [] description: Linux bridge with the wrong port ipv4: address: [] auto-dns: true auto-gateway: true auto-routes: true dhcp: true enabled: true ipv6: enabled: false mac-address: 01-23-45-67-89-AB mtu: 1500 difference ========== --- desired +++ current @@ -13,8 +13,7 @@ hello-time: 2 max-age: 20 priority: 32768 - port: - - name: ens01 + port: [] description: Linux bridge with the wrong port ipv4: address: [] line 651, in _assert_interfaces_equal\n current_state.interfaces[ifname],\nlibnmstate.error.NmstateVerificationError:
NmstateVerificationError
は、desired
ポリシー設定、ノード上のポリシーのcurrent
設定、および一致しないパラメーターを強調表示するdifference
を一覧表示します。この例では、port
はdifference
に組み込まれ、これは問題がポリシーのポート設定に関連するものであることを示唆します。ポリシーが適切に設定されていることを確認するには、
NodeNetworkState
オブジェクトを要求して、1 つまたはすべてのノードのネットワーク設定を表示します。以下のコマンドは、control-plane-1
ノードのネットワーク設定を返します。$ oc get nns control-plane-1 -o yaml
出力は、ノード上のインターフェイス名は
ens1
であるものの、失敗したポリシーがens01
を誤って使用していることを示します。出力例
- ipv4: ... name: ens1 state: up type: ethernet
既存のポリシーを編集してエラーを修正します。
$ oc edit nncp ens01-bridge-testfail
... port: - name: ens1
ポリシーを保存して修正を適用します。
ポリシーのステータスをチェックして、更新が正常に行われたことを確認します。
$ oc get nncp
出力例
NAME STATUS ens01-bridge-testfail SuccessfullyConfigured
更新されたポリシーは、クラスターのすべてのノードで正常に設定されました。