7.5. ネットワーク関連の問題のトラブルシューティング
7.5.1. ネットワークインターフェイスの選択方法 リンクのコピーリンクがクリップボードにコピーされました!
ベアメタルでのインストールや、複数のネットワークインターフェイスコントローラー (NIC) でのインストールの場合に、OpenShift Container Platform が Kubernetes API サーバーとの通信に使用する NIC は、ノードの起動時に systemd で実行される nodeip-configuration.service
サービスユニットによって決定されます。nodeip-configuration.service
は、デフォルトルートに関連付けられたインターフェイスから IP を選択します。
nodeip-configuration.service
サービスが正しい NIC を決定すると、このサービスは /etc/systemd/system/kubelet.service.d/20-nodenet.conf
ファイルを作成します。20-nodenet.conf
ファイルは、KUBELET_NODE_IP
環境変数を、サービスが選択した IP アドレスに設定します。
kubelet サービスの起動時に、20-nodenet.conf
ファイルから環境変数の値を読み取り、IP アドレスを --node-ip
kubelet コマンドライン引数に設定します。その結果、kubelet サービスは選択した IP アドレスをノード IP アドレスとして使用します。
インストール後にハードウェアまたはネットワークが再設定された場合、またはノード IP がデフォルトルートインターフェイスから取得されないネットワークレイアウトがある場合、再起動後に nodeip-configuration.service
サービスが別の NIC を選択する可能性があります。oc get nodes -o wide
コマンドの出力の INTERNAL-IP
列を確認して、別の NIC が選択されていることを確認できる場合があります。
別の NIC が選択されているためにネットワーク通信が中断または誤って設定されている場合、次のエラーが表示されることがあります: EtcdCertSignerControllerDegraded
。NODEIP_HINT
変数を含むヒントファイルを作成して、デフォルトの IP 選択ロジックをオーバーライドできます。詳細は、オプション: デフォルトのノード IP 選択ロジックのオーバーライドを参照してください。
7.5.1.1. オプション: デフォルトのノード IP 選択ロジックのオーバーライド リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの IP 選択ロジックをオーバーライドするには、NODEIP_HINT
変数を含むヒントファイルを作成して、デフォルトの IP 選択ロジックをオーバーライドします。ヒントファイルを作成すると、NODEIP_HINT
変数で指定された IP アドレスのサブネット内のインターフェイスから特定のノード IP アドレスを選択できます。
たとえば、ノードに 10.0.0.10/24
のアドレスを持つ eth0
と 192.0.2.5/24
のアドレスを持つ eth1
の 2 つのインターフェイスがあり、デフォルトルートが eth0
(10.0.0.10
) を指している場合、ノードの IP アドレスは通常、10.0.0.10
IP アドレスを使用します。
ユーザーは、別のサブネット 192.0.2.0/24
が選択されるように、サブネット内の既知の IP (たとえば、192.0.2.1
などのサブネットゲートウェイ) を指すように NODEIP_HINT
変数を設定できます。その結果、eth1
の 192.0.2.5
IP アドレスがノードに使用されます。
次の手順は、デフォルトのノード IP 選択ロジックをオーバーライドする方法を示しています。
手順
/etc/default/nodeip-configuration
ファイルにヒントファイルを追加します。たとえば、以下のようになります。NODEIP_HINT=192.0.2.1
NODEIP_HINT=192.0.2.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要-
192.0.2.5
など、ノードの正確な IP アドレスをヒントとして使用しないでください。ノードの正確な IP アドレスを使用すると、ヒント IP アドレスを使用するノードが正しく設定できなくなります。 - ヒントファイル内の IP アドレスは、正しいサブネットを決定するためにのみ使用されます。ヒントファイルに表示されるため、トラフィックを受信しません。
-
次のコマンドを実行して、
base-64
でエンコードされたコンテンツを生成します。echo -n 'NODEIP_HINT=192.0.2.1' | base64 -w0
$ echo -n 'NODEIP_HINT=192.0.2.1' | base64 -w0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Tk9ERUlQX0hJTlQ9MTkyLjAuMCxxxx==
Tk9ERUlQX0hJTlQ9MTkyLjAuMCxxxx==
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターをデプロイする前に、
master
ロールとworker
ロールの両方のマシン設定マニフェストを作成して、ヒントを有効にします。99-nodeip-hint-master.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<encoded_contents>
を/etc/default/nodeip-configuration
ファイルの base64 でエンコードされたコンテンツに置き換えます (例:Tk9ERUlQX0hJTlQ9MTkyLjAuMCxxxx==
)。コンマの後およびエンコードされたコンテンツの前にスペースを入れることはできないことに注意してください。
99-nodeip-hint-worker.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<encoded_contents>
を/etc/default/nodeip-configuration
ファイルの base64 でエンコードされたコンテンツに置き換えます (例:Tk9ERUlQX0hJTlQ9MTkyLjAuMCxxxx==
)。コンマの後およびエンコードされたコンテンツの前にスペースを入れることはできないことに注意してください。
-
~/clusterconfigs
など、クラスター設定を保存するディレクトリーにマニフェストを保存します。 - クラスターのデプロイ
7.5.1.2. セカンダリー OVS ブリッジを使用するように OVN-Kubernetes を設定する リンクのコピーリンクがクリップボードにコピーされました!
追加または セカンダリー の Open vSwitch (OVS) ブリッジ br-ex1
を作成できます。このブリッジは、OVN-Kubernetes によって管理され、Multiple External Gateways (MEG) 実装が OpenShift Container Platform ノードの外部ゲートウェイを定義するために使用するものです。MEG は、AdminPolicyBasedExternalRoute
カスタムリソース (CR) で定義できます。MEG 実装は、複数のゲートウェイ、等コストマルチパス (ECMP) ルート、および双方向フォワーディング検出 (BFD) 実装へのアクセスを Pod に提供します。
Multiple External Gateways (MEG) 機能の影響を受ける Pod のユースケースを考えてみてください。たとえば、ノード上の別のインターフェイス (br-ex1
など) に Egress トラフィックを送信するとします。MEG の影響を受けない Pod の Egress トラフィックは、デフォルトの OVS br-ex
ブリッジにルーティングされます。
現在、MEG は、Egress IP、Egress ファイアウォール、Egress ルーターなどの他の Egress 機能との使用はサポートされていません。Egress IP などの Egress 機能で MEG を使用しようとすると、ルーティングとトラフィックフローの競合が発生する可能性があります。これは、OVN-Kubernetes がルーティングと送信元ネットワークアドレス変換 (SNAT) を処理する方法が原因で発生します。その結果、ルーティングに一貫性がなくなり、戻りパスが着信パスをパッチする必要がある一部の環境では接続が切断される可能性があります。
追加のブリッジは、マシン設定マニフェストファイルのインターフェイス定義で定義する必要があります。Machine Config Operator が、このマニフェストを使用して、ホスト上の /etc/ovnk/extra_bridge
に新しいファイルを作成します。この新しいファイルには、追加の OVS ブリッジがノード用に設定するネットワークインターフェイスの名前が含まれています。
マニフェストファイルを作成して編集すると、Machine Config Operator は次の順序でタスクを完了します。
- 選択したマシン設定プールに基づいて、単一の順序でノードをドレインします。
-
各ノードに Ignition 設定ファイルを挿入し、各ノードが追加の
br-ex1
ブリッジネットワーク設定を受信するようにします。 -
br-ex
の MAC アドレスが、br-ex
がネットワーク接続に使用するインターフェイスの MAC アドレスと一致していることを確認します。 -
新しいインターフェイス定義を参照する
configure-ovs.sh
シェルスクリプトを実行します。 -
br-ex
とbr-ex1
をホストノードに追加します。 - ノードをスケジューリング対象に戻します。
すべてのノードが Ready
状態に戻り、OVN-Kubernetes Operator が br-ex
と br-ex1
を検出して設定した後、Operator は各ノードに k8s.ovn.org/l3-gateway-config
アノテーションを適用します。
追加の br-ex1
ブリッジが役立つ状況と、デフォルトの br-ex
ブリッジが常に必要な状況の詳細は、「ローカルネットトポロジーの設定」を参照してください。
手順
オプション: 次の手順を実行して、追加のブリッジ
br-ex1
が使用できるインターフェイス接続を作成します。この手順の例では、新しいボンディングとその依存インターフェイスを作成する方法を示しています。これらはすべて、マシン設定マニフェストファイルで定義されています。追加のブリッジは、MachineConfig
オブジェクトを使用して追加のボンディングインターフェイスを形成します。重要追加のインターフェイスを定義するために、Kubernetes NMState Operator や
NodeNetworkConfigurationPolicy
(NNCP) マニフェストファイルを使用しないでください。また、
bond
インターフェイスを定義するときには、追加のインターフェイスまたはサブインターフェイスが既存のbr-ex
OVN Kubernetes ネットワークデプロイメントで使用されていないことを確認してください。次のインターフェイス定義ファイルを作成します。以下のファイルは、ホストノードが定義ファイルにアクセスできるように、マシン設定マニフェストファイルに追加されます。
1 番目のインターフェイス定義ファイルの例 (
eno1.config
)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2 番目のインターフェイス定義ファイルの例 (
eno2.config
)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2 番目のボンディングインターフェイス定義ファイルの例 (
bond1.config
)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、定義ファイルを Base64 でエンコードされた文字列に変換します。
base64 <directory_path>/en01.config
$ base64 <directory_path>/en01.config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64 <directory_path>/eno2.config
$ base64 <directory_path>/eno2.config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow base64 <directory_path>/bond1.config
$ base64 <directory_path>/bond1.config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
環境変数を準備します。
<machine_role>
を、worker
などのノードロールに置き換え、<interface_name>
を追加のbr-ex
ブリッジ名に置き換えます。export ROLE=<machine_role>
$ export ROLE=<machine_role>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow マシン設定マニフェストファイルで各インターフェイス定義を定義します。
bond1
、eno1
、en02
の定義を追加したマシン設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターミナルで次のコマンドを入力して、ネットワークプラグインを設定するためのマシン設定マニフェストファイルを作成します。
oc create -f <machine_config_file_name>
$ oc create -f <machine_config_file_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OVN-Kubernetes ネットワークプラグインを使用して
extra_bridge
ファイルを作成し、ノード上に Open vSwitch (OVS) ブリッジbr-ex1
を作成します。このファイルは、ホストの/etc/ovnk/extra_bridge
パスに保存します。ファイルには、ノードのプライマリー IP アドレスを保持するbr-ex
をサポートするデフォルトのインターフェイスではなく、追加のブリッジをサポートするインターフェイスの名前を記述する必要があります。追加のインターフェイスを参照する
extra_bridge
ファイル/etc/ovnk/extra_bridge
の設定例bond1
bond1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターで再起動されるノードで
br-ex1
をホストする既存の静的インターフェイスを定義したマシン設定マニフェストファイルを作成します。br-ex1
をホストするインターフェイスとしてbond1
を定義したマシン設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 選択したノードにマシン設定を適用します。
oc create -f <machine_config_file_name>
$ oc create -f <machine_config_file_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
/var/lib/ovnk/iface_default_hint
リソースを作成するマシン設定ファイルを作成することにより、ノードのbr-ex
選択ロジックをオーバーライドできます。注記このリソースには、
br-ex
がクラスター用に選択するインターフェイスの名前がリストされます。br-ex
は、デフォルトで、ブート順序とマシンネットワーク内の IP アドレスサブネットに基づいて、ノードのプライマリーインターフェイスを選択します。マシンネットワークの設定によっては、ホストノードのデフォルトのインターフェイスまたはボンディングを引き続きbr-ex
が選択する必要があります。ホストノードに、デフォルトのインターフェイスをオーバーライドするためのマシン設定ファイルを作成します。
重要このマシン設定ファイルは、
br-ex
選択ロジックを変更する目的でのみ作成します。このファイルを使用してクラスター内の既存のノードの IP アドレスを変更することはサポートされていません。デフォルトのインターフェイスをオーバーライドするマシン設定ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- マシン設定ファイルをノードに適用する前に、ノードに
bond0
が存在することを確認します。
-
クラスター内のすべての新しいノードに設定を適用する前に、ホストノードを再起動して、
br-ex
が目的のインターフェイスを選択し、br-ex1
で定義した新しいインターフェイスと競合しないことを検証します。 クラスター内のすべての新しいノードにマシン設定ファイルを適用します。
oc create -f <machine_config_file_name>
$ oc create -f <machine_config_file_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
クラスター内の
exgw-ip-addresses
ラベルを持つノードの IP アドレスを特定し、ノードがデフォルトのブリッジではなく追加のブリッジを使用していることを確認します。oc get nodes -o json | grep --color exgw-ip-addresses
$ oc get nodes -o json | grep --color exgw-ip-addresses
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
"k8s.ovn.org/l3-gateway-config": \"exgw-ip-address\":\"172.xx.xx.yy/24\",\"next-hops\":[\"xx.xx.xx.xx\"],
"k8s.ovn.org/l3-gateway-config": \"exgw-ip-address\":\"172.xx.xx.yy/24\",\"next-hops\":[\"xx.xx.xx.xx\"],
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストノードのネットワークインターフェイス名を確認して、ターゲットノードに追加のブリッジが存在することを確認します。
oc debug node/<node_name> -- chroot /host sh -c "ip a | grep mtu | grep br-ex"
$ oc debug node/<node_name> -- chroot /host sh -c "ip a | grep mtu | grep br-ex"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Starting pod/worker-1-debug ... To use host binaries, run `chroot /host` # ... 5: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 6: br-ex1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
Starting pod/worker-1-debug ... To use host binaries, run `chroot /host` # ... 5: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 6: br-ex1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
/var/lib/ovnk/iface_default_hint
を使用する場合は、br-ex
の MAC アドレスが、選択したプライマリーインターフェイスの MAC アドレスと一致していることを確認します。oc debug node/<node_name> -- chroot /host sh -c "ip a | grep -A1 -E 'br-ex|bond0'
$ oc debug node/<node_name> -- chroot /host sh -c "ip a | grep -A1 -E 'br-ex|bond0'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow br-ex
のプライマリーインターフェイスがbond0
であることを示す出力例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.2. Open vSwitch の問題のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
Open vSwitch(OVS) の問題をトラブルシューティングするためには、より多くの情報を含むようにログレベルを設定する必要があるかもしれません。
ノードのログレベルを一時的に変更した場合、次の例のようにノード上のマシン設定デーモンからログメッセージを受信することがあるので注意が必要です。
E0514 12:47:17.998892 2281 daemon.go:1350] content mismatch for file /etc/systemd/system/ovs-vswitchd.service: [Unit]
E0514 12:47:17.998892 2281 daemon.go:1350] content mismatch for file /etc/systemd/system/ovs-vswitchd.service: [Unit]
不一致に関連するログメッセージを回避するには、トラブルシューティングが完了した後に、ログレベルの変更を元に戻してください。
7.5.2.1. Open vSwitch のログレベルの一時的な設定 リンクのコピーリンクがクリップボードにコピーされました!
短期間のトラブルシューティングのために、Open vSwitch(OVS) のログレベルを一時的に設定することができます。以下の手順では、ノードを再起動する必要はありません。また、ノードを再起動した場合、設定の変更は保持されません。
この手順を実行してログレベルを変更した後、ovs-vswitchd.service
のコンテンツの不一致を示すログメッセージをマシン設定デーモンから受け取ることがあります。ログメッセージが表示されないようにするには、この手順を繰り返し、ログレベルを元の値に設定してください。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
ノードのデバッグ Pod を起動します。
oc debug node/<node_name>
$ oc debug node/<node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /host
をデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の/host
にホストからのルートファイルシステムをマウントします。ルートディレクトリーを/host
に変更すると、ホストファイルシステムからのバイナリーを実行できます。chroot /host
# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OVS モジュールの現在の syslog レベルを表示します。
ovs-appctl vlog/list
# ovs-appctl vlog/list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の出力例では、syslog のログレベルが
info
に設定されています。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etc/systemd/system/ovs-vswitchd.service.d/10-ovs-vswitchd-restart.conf
ファイルでログレベルを指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前述の例では、ログレベルは
dbg
に設定されています。syslog:<log_level>
をoff
、emer
、err
、warn
、info
、またはdbg
に設定することで、最後の 2 行を変更します。ログレベルoff
では、すべてのログメッセージが除外されます。サービスを再起動します。
systemctl daemon-reload
# systemctl daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart ovs-vswitchd
# systemctl restart ovs-vswitchd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.2.2. Open vSwitch のログレベルの恒久的な設定 リンクのコピーリンクがクリップボードにコピーされました!
Open vSwitch(OVS) のログレベルを長期的に変更する場合は、ログレベルを恒久的に変更することができます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
以下の例のような
MachineConfig
オブジェクトで、99-change-ovs-loglevel.yaml
のようなファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow マシン設定を適用します。
oc apply -f 99-change-ovs-loglevel.yaml
$ oc apply -f 99-change-ovs-loglevel.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.2.3. Open vSwitch のログの表示 リンクのコピーリンクがクリップボードにコピーされました!
Open vSwitch(OVS) のログを表示するには、以下の手順で行います。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
以下のコマンドのいずれかを実行します。
クラスター外から
oc
コマンドを使用してログを表示する。oc adm node-logs <node_name> -u ovs-vswitchd
$ oc adm node-logs <node_name> -u ovs-vswitchd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスター内のノードにログオンした後にログを表示する。
journalctl -b -f -u ovs-vswitchd.service
# journalctl -b -f -u ovs-vswitchd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードにログオンする 1 つの方法は、
oc debug node/<node_name>
コマンドを使用することです。