30.3. ノードのネットワーク設定のトラブルシューティング
ノードのネットワーク設定で問題が発生した場合には、ポリシーが自動的にロールバックされ、enactment (実行) レポートは失敗します。これには、以下のような問題が含まれます。
- ホストで設定を適用できません。
 - ホストはデフォルトゲートウェイへの接続を失います。
 - ホストは API サーバーへの接続を失います。
 
30.3.1. 正確でないノードネットワーク設定のポリシー設定のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
ノードネットワーク設定ポリシーを適用し、クラスター全体でノードのネットワーク設定への変更を適用することができます。
誤った設定を適用した場合は、次の例を使用して、失敗したノードネットワークポリシーをトラブルシューティングして修正できます。この例では、3 つのコントロールプレーンノードと 3 つのコンピュートノードを持つクラスターに Linux ブリッジポリシーを適用します。ポリシーが間違ったインターフェイスを参照しているため、ポリシーは適用されません。
エラーを見つけるには、利用可能な NMState リソースを調査する必要があります。その後に、正しい設定でポリシーを更新できます。
前提条件
- 
							Linux システムに 
ens01インターフェイスが存在しない。 
手順
クラスターにポリシーを作成します。次の例では、
ens01をメンバーとして持つ単純なブリッジbr1を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークインターフェイスにポリシーを適用します。
oc apply -f ens01-bridge-testfail.yaml
$ oc apply -f ens01-bridge-testfail.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created
nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してポリシーのステータスを確認します。
oc get nncp
$ oc get nncpCopy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、ポリシーが失敗したことを示しています。
出力例
NAME STATUS ens01-bridge-testfail FailedToConfigure
NAME STATUS ens01-bridge-testfail FailedToConfigureCopy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーのステータスのみでは、すべてのノードで失敗したか、ノードのサブセットで失敗したかを確認することはできません。
ノードのネットワーク設定の enactment (実行) をリスト表示し、ポリシーがいずれかのノードで成功したかどうかを確認します。ポリシーがノードのサブセットに対してのみ失敗した場合、出力は、問題が特定のノード設定にあることを示唆します。すべてのノードでポリシーが失敗した場合、出力はポリシーに問題があることを示唆します。
oc get nnce
$ oc get nnceCopy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、ポリシーがすべてのノードで失敗したことを示しています。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 失敗した enactment の 1 つを表示します。以下のコマンドは、出力ツール
jsonpathを使用して出力をフィルターします。oc get nnce compute-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'$ oc get nnce compute-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
[2024-10-10T08:40:46Z INFO nmstatectl] Nmstate version: 2.2.37 NmstateError: InvalidArgument: Controller interface br1 is holding unknown port ens01
[2024-10-10T08:40:46Z INFO nmstatectl] Nmstate version: 2.2.37 NmstateError: InvalidArgument: Controller interface br1 is holding unknown port ens01Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前の例は、
InvalidArgumentエラーからの出力で、ens01が不明なポートであることを示しています。この例では、ポリシー設定ファイル内のポート設定を変更する必要がある場合があります。ポリシーが適切に設定されていることを確認するには、
NodeNetworkStateオブジェクトを要求して、1 つまたはすべてのノードのネットワーク設定を表示します。以下のコマンドは、control-plane-1ノードのネットワーク設定を返します。oc get nns control-plane-1 -o yaml
$ oc get nns control-plane-1 -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は、ノード上のインターフェイス名は
ens1であるものの、失敗したポリシーがens01を誤って使用していることを示します。出力例
- ipv4: # ... name: ens1 state: up type: ethernet- ipv4: # ... name: ens1 state: up type: ethernetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 既存のポリシーを編集してエラーを修正します。
oc edit nncp ens01-bridge-testfail
$ oc edit nncp ens01-bridge-testfailCopy to Clipboard Copied! Toggle word wrap Toggle overflow # ... port: - name: ens1# ... port: - name: ens1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポリシーを保存して修正を適用します。
ポリシーのステータスをチェックして、更新が正常に行われたことを確認します。
oc get nncp
$ oc get nncpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATUS ens01-bridge-testfail SuccessfullyConfigured
NAME STATUS ens01-bridge-testfail SuccessfullyConfiguredCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新されたポリシーは、クラスターのすべてのノードで正常に設定されました。
30.3.2. 非接続環境での DNS 接続の問題のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
					非接続環境で nmstate を設定するときに DNS 接続の問題が発生する場合は、ドメイン root-servers.net のネームサーバーのリストを解決するように DNS サーバーを設定できます。
				
						DNS サーバーに root-servers.net ゾーンのネームサーバー (NS) エントリーが含まれていることを確認します。DNS サーバーはクエリーをアップストリームのリゾルバーに転送する必要はありませんが、サーバーは NS クエリーに対して正しい回答を返す必要があります。
					
30.3.2.1. bind9 DNS 名前付きサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
						bind9 DNS サーバーを照会するように設定されたクラスターの場合は、少なくとも 1 つの NS レコードを含む設定ファイルに root-servers.net ゾーンを追加できます。たとえば、この条件にすでに一致するゾーンファイルとして /var/named/named.localhost を使用できます。
					
手順
次のコマンドを実行して、
/etc/named.conf設定ファイルの最後にroot-servers.netゾーンを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
namedサービスを再起動します。systemctl restart named
$ systemctl restart namedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
root-servers.netゾーンが存在することを確認します。journalctl -u named|grep root-servers.net
$ journalctl -u named|grep root-servers.netCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Jul 03 15:16:26 rhel-8-10 bash[xxxx]: zone root-servers.net/IN: loaded serial 0 Jul 03 15:16:26 rhel-8-10 named[xxxx]: zone root-servers.net/IN: loaded serial 0
Jul 03 15:16:26 rhel-8-10 bash[xxxx]: zone root-servers.net/IN: loaded serial 0 Jul 03 15:16:26 rhel-8-10 named[xxxx]: zone root-servers.net/IN: loaded serial 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、DNS サーバーが
root-servers.netドメインの NS レコードを解決できることを確認します。host -t NS root-servers.net. 127.0.0.1
$ host -t NS root-servers.net. 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Using domain server: Name: 127.0.0.1 Address: 127.0.0.53 Aliases: root-servers.net name server root-servers.net.
Using domain server: Name: 127.0.0.1 Address: 127.0.0.53 Aliases: root-servers.net name server root-servers.net.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
30.3.2.2. dnsmasq DNS サーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
						dnsmasq を DNS サーバーとして使用している場合は、指定した DNS サーバーを使用して root-servers.net を解決する新しい設定ファイルを作成するなどして、root-servers.net ドメインの解決を別の DNS サーバーに委任できます。
					
次のコマンドを実行して、ドメイン
root-servers.netを別の DNS サーバーに委任する設定ファイルを作成します。echo 'server=/root-servers.net/<DNS_server_IP>'> /etc/dnsmasq.d/delegate-root-servers.net.conf
$ echo 'server=/root-servers.net/<DNS_server_IP>'> /etc/dnsmasq.d/delegate-root-servers.net.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
dnsmasqサービスを再起動します。systemctl restart dnsmasq
$ systemctl restart dnsmasqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
root-servers.netドメインが別の DNS サーバーに委任されていることを確認します。journalctl -u dnsmasq|grep root-servers.net
$ journalctl -u dnsmasq|grep root-servers.netCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Jul 03 15:31:25 rhel-8-10 dnsmasq[1342]: using nameserver 192.168.1.1#53 for domain root-servers.net
Jul 03 15:31:25 rhel-8-10 dnsmasq[1342]: using nameserver 192.168.1.1#53 for domain root-servers.netCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、DNS サーバーが
root-servers.netドメインの NS レコードを解決できることを確認します。host -t NS root-servers.net. 127.0.0.1
$ host -t NS root-servers.net. 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: root-servers.net name server root-servers.net.
Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: root-servers.net name server root-servers.net.Copy to Clipboard Copied! Toggle word wrap Toggle overflow