5.2. 複数のネットワークの設定と使用
MicroShift Multus Container Network Interface (CNI) をインストールした後、設定を使用して他のネットワークプラグインを使用できます。
5.2.1. IP アドレス管理タイプと追加ネットワーク リンクのコピーリンクがクリップボードにコピーされました!
IP アドレスは、設定した IP アドレス管理 (IPAM) CNI プラグインを通じて追加のネットワークにプロビジョニングされます。MicroShift でサポートされている IP アドレスのプロビジョニングタイプは host-local、static、および dhcp です。
5.2.1.1. ブリッジインターフェイスの詳細 リンクのコピーリンクがクリップボードにコピーされました!
bridge タイプのインターフェイスと dhcp IPAM を使用する場合は、ブリッジネットワークでリッスンする DHCP サーバーが必要です。ファイアウォールを使用している場合は、ネットワークゾーンで DHCP トラフィックを許可するために、firewall-cmd --remove-service=dhcp コマンドを実行して、firewalld サービスを設定することも必要です。
5.2.1.2. macvlan インターフェイスの詳細 リンクのコピーリンクがクリップボードにコピーされました!
macvlan タイプのインターフェイスは、ホストが接続されているネットワークにアクセスします。つまり、dhcp IPAM プラグインが使用されている場合、インターフェイスがホストネットワーク上の DHCP サーバーから IP アドレスを受信できます。
5.2.1.3. ipvlan インターフェイスの詳細 リンクのコピーリンクがクリップボードにコピーされました!
ipvlan インターフェイスは、ホストネットワークにも直接アクセスできますが、ホストインターフェイスと MAC アドレスを共有します。共有 MAC アドレスにより、ipvlan タイプのインターフェイスは、dhcp プラグインでは使用できません。IPAM プラグインは、ClientID を使用した DHCP プロトコルをサポートしていません。
5.2.2. 追加ネットワーク用の NetworkAttachmentDefinition の作成 リンクのコピーリンクがクリップボードにコピーされました!
追加のネットワークの NetworkAttachmentDefinition 設定ファイルを作成するには、次の手順に従います。この例では、bridge-type インターフェイスを使用します。また、host-local IP アドレス管理 (IPAM) を使用するここでのサンプルワークフローを使用して、サポートされているその他の追加ネットワークタイプを設定することもできます。
bridge と dhcp IPAM を使用する場合は、ブリッジされたネットワークでリッスンする DHCP サーバーが必要です。ファイアウォールも使用している場合は、ネットワークゾーンで DHCP トラフィックを許可するように firewalld サービスを設定することも必要です。この場合は、firewall-cmd --remove-service=dhcp コマンドを実行できます。
前提条件
- MicroShift Multus CNI がインストールされている。
-
OpenShift CLI (
oc) がインストールされている。 - MicroShift が実行されています。
手順
オプション:次のコマンドを実行して、MicroShift ノードが Multus CNI で稼働していることを確認します。
oc get pods -n openshift-multus
$ oc get pods -n openshift-multusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE dhcp-daemon-dfbzw 1/1 Running 0 5h multus-rz8xc 1/1 Running 0 5h
NAME READY STATUS RESTARTS AGE dhcp-daemon-dfbzw 1/1 Running 0 5h multus-rz8xc 1/1 Running 0 5hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、次のサンプルファイルを参照して
NetworkAttachmentDefinition設定ファイルを作成します。oc apply -f network-attachment-definition.yaml
$ oc apply -f network-attachment-definition.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkAttachmentDefinitionのファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ブリッジの名前の使用は、プラグインの
bridgeタイプに固有です。他のプラグインはNetworkAttachmentDefinitionsで異なるフィールドを使用します。たとえば、macvlanおよびipvlan設定はmasterを使用して、割り当てるホストインターフェイスを指定します。
5.2.3. Pod の追加ネットワークへの追加 リンクのコピーリンクがクリップボードにコピーされました!
Pod を追加のネットワークに追加できます。Pod が作成されると、追加のネットワークが Pod に接続されます。Pod は、デフォルトネットワークで通常のノード関連のネットワークトラフィックを継続的に送信します。
すでに実行中の Pod に追加のネットワークを接続する場合は、Pod を再起動する必要があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - ノードが実行されている。
-
Pod を接続する
NetworkAttachmentDefinitionオブジェクトによって定義されたネットワークが存在します。
手順
PodYAML ファイルにアノテーションを追加します。以下のアノテーション形式のいずれかのみを使用できます。カスタマイズせずに追加ネットワークを割り当てるには、以下の形式でアノテーションを追加します。
<network>は、Pod に関連付ける追加ネットワークの名前に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<network>は、Pod に関連付ける各追加ネットワークの名前に置き換えます。複数の追加ネットワークを指定するには、各ネットワークをコンマで区切ります。コンマの間に空白を入れないでください。同じ追加ネットワークを複数回指定すると、その Pod にはそのネットワークに接続された複数のネットワークインターフェイスが存在することになります。
ブリッジタイプの追加ネットワークのアノテーションの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタマイズして追加のネットワークを割り当てるには、以下の形式でアノテーションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PodYAML ファイルを作成し、追加のネットワークのNetworkAttachmentDefinitionアノテーションを追加するには、次のコマンドを実行し、サンプル YAML を使用します。oc apply -f ./<test_bridge>.yaml
$ oc apply -f ./<test_bridge>.yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<test_bridge>は、使用する Pod 名に置き換えます。
出力例
pod/test_bridge created
pod/test_bridge createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow test_bridgePod YAML の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkAttachmentDefinitionアノテーションが正しいことを確認します。NetworkAttachmentDefinitionアノテーションの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
NetworkAttachmentDefinitionアノテーションがPodYAML に存在することを確認するには、<name>を Pod の名前に置き換えて次のコマンドを実行します。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<name>は、使用する Pod 名に置き換えます。以下の例では、<test_bridge>が使用されます。
次の例では、
test_bridgeがnet1の追加ネットワークに接続されています。oc get pod <test_bridge> -o yaml
$ oc get pod <test_bridge> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <test_bridge> は、使用するブリッジの名前に置き換えます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
k8s.v1.cni.cncf.io/network-statusパラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod に割り当てられる追加のネットワークのステータスを説明します。アノテーションの値はプレーンテキストの値として保存されます。
以下のコマンドを使用して、Pod が実行されていることを確認します。
oc get pod
$ oc get podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE test_bridge 1/1 Running 0 81s
NAME READY STATUS RESTARTS AGE test_bridge 1/1 Running 0 81sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. 追加のネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
NetworkAttachmentDefinition オブジェクトを作成して適用した後、次の例の手順に従って追加のネットワークを設定します。この例では、bridge タイプの追加ネットワークが使用されます。このワークフローは、他の追加のネットワークタイプにも使用できます。
前提条件
-
NetworkAttachmentDefinitionオブジェクト設定を作成して適用しました。
手順
以下のコマンドを実行して、ブリッジがホストに作成されていることを確認します。
ip a show br-test
$ ip a show br-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
22: br-test: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 96:bf:ca:be:1d:15 brd ff:ff:ff:ff:ff:ff inet6 fe80::34e2:bbff:fed2:31f2/64 scope link valid_lft forever preferred_lft forever22: br-test: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 96:bf:ca:be:1d:15 brd ff:ff:ff:ff:ff:ff inet6 fe80::34e2:bbff:fed2:31f2/64 scope link valid_lft forever preferred_lft foreverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、ブリッジの IP アドレスを設定します。
sudo ip addr add 10.10.0.10/24 dev br-test
$ sudo ip addr add 10.10.0.10/24 dev br-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IP アドレス設定がブリッジに追加されたことを確認します。
ip a show br-test
$ ip a show br-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- IP アドレスは想定どおりに設定されています。
次のコマンドを実行して、Pod の IP アドレスを確認します。
oc get pod test-bridge --output=jsonpath='{.metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status}'$ oc get pod test-bridge --output=jsonpath='{.metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ブリッジの追加ネットワークは想定どおりに接続されます。
オプション:
oc execを使用して Pod にアクセスし、ipコマンドを使用してそのインターフェイスを確認できます。oc exec -ti test-bridge -- ip a
$ oc exec -ti test-bridge -- ip aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 予想どおり、Pod は
net1 インターフェイス上の 10.10.0.20 IP アドレスに接続されます。
MicroShift ホストから Pod 内の HTTP サーバーにアクセスして、接続が期待どおりに機能していることを確認します。以下のコマンドを使用します。
curl 10.10.0.20:8080
$ curl 10.10.0.20:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello MicroShift
Hello MicroShiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.5. セカンダリーネットワークから Pod を削除する リンクのコピーリンクがクリップボードにコピーされました!
Pod を削除することによってのみ、セカンダリーネットワークから Pod を削除できます。
前提条件
- セカンダリーネットワークが Pod にアタッチされている。
-
OpenShift CLI (
oc) がインストールされている。 - クラスターにログインする。
手順
Pod を削除するには、以下のコマンドを入力します。
oc delete pod <name> -n <namespace>
$ oc delete pod <name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<name>は Pod の名前です。 -
<namespace>は Pod が含まれる namespace です。
-
5.2.6. Multus ネットワークのトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
複数のネットワークの設定が適切に設定されていない場合、Pod が起動に失敗する可能性があります。次の手順は、いくつかの一般的なシナリオを解決するのに役立ちます。
5.2.6.1. Pod のネットワークを設定できない リンクのコピーリンクがクリップボードにコピーされました!
Multus CNI プラグインが Pod にネットワークアノテーションを適用できない場合、Pod は起動しません。追加のネットワーク CNI のいずれかが失敗した場合、Pod も起動に失敗する可能性があります。
エラーの例
Warning NoNetworkFound 0s multus cannot find a network-attachment-definitio (asdasd) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-ref-doesnt-exist" not found
Warning NoNetworkFound 0s multus cannot find a network-attachment-definitio (asdasd) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-ref-doesnt-exist" not found
この場合、CNI 障害を解決するには次の手順を実行できます。
-
NetworkAttachmentDefinitionsとアノテーションの両方の値を確認します。 - アノテーションを削除して、デフォルトネットワークのみで Pod が正常に作成されたかどうかを確認します。そうでない場合は、Multus 設定以外のネットワークの問題を示している可能性があります。
デバイス管理者の場合は、
kubeletによって生成されたログに特に注意しながら、crio.serviceまたはmicroshift.serviceログを確認してください。たとえば、
kubeletからの以下のエラーは、プライマリー CNI が実行されていないことを示しています。この状況は、Pod が起動していないこと、またはcni_default_network設定が正しくないことなどの CRI-O の設定ミスが原因で発生する可能性があります。kubelet が生成したエラーの例
Feb 06 13:47:31 dev microshift[1494]: kubelet E0206 13:47:31.163290 1494 pod_workers.go:1298] "Error syncing pod, skipping" err="network is not ready: container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: No CNI configuration file in /etc/cni/net.d/. Has your network provider started?" pod="default/samplepod" podUID="fe0f7f7a-8c47-4488-952b-8abc0d8e2602"
Feb 06 13:47:31 dev microshift[1494]: kubelet E0206 13:47:31.163290 1494 pod_workers.go:1298] "Error syncing pod, skipping" err="network is not ready: container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: No CNI configuration file in /etc/cni/net.d/. Has your network provider started?" pod="default/samplepod" podUID="fe0f7f7a-8c47-4488-952b-8abc0d8e2602"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.6.2. 設定ファイルがない リンクのコピーリンクがクリップボードにコピーされました!
アノテーションが存在しない NetworkAttachmentDefinition 設定 YAML を参照しているため、Pod を作成できない場合があります。この場合、通常次のようなエラーが発生します。
ログの例
cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-conf" not found" pod="default/samplepod"`
cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io "bad-conf" not found" pod="default/samplepod"`
エラー出力の例
"CreatePodSandbox for pod failed" err="rpc error: code = Unknown desc = failed to create pod network sandbox k8s_samplepod_default_5fa13105-1bfb-4c6b-aee7-3437cfb50e25_0(7517818bd8e85f07b551f749c7529be88b4e7daef0dd572d049aa636950c76c6): error adding pod default_samplepod to CNI network \"multus-cni-network\": plugin type=\"multus\" name=\"multus-cni-network\" failed (add): Multus: [default/samplepod/5fa13105-1bfb-4c6b-aee7-3437cfb50e25]: error loading k8s delegates k8s args: TryLoadPodDelegates: error in getting k8s network for pod: GetNetworkDelegates: failed getting the delegate: getKubernetesDelegate: cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io \"bad-conf\" not found" pod="default/samplepod"
"CreatePodSandbox for pod failed" err="rpc error: code = Unknown desc = failed to create pod network sandbox k8s_samplepod_default_5fa13105-1bfb-4c6b-aee7-3437cfb50e25_0(7517818bd8e85f07b551f749c7529be88b4e7daef0dd572d049aa636950c76c6): error adding pod default_samplepod to CNI network \"multus-cni-network\": plugin type=\"multus\" name=\"multus-cni-network\" failed (add): Multus: [default/samplepod/5fa13105-1bfb-4c6b-aee7-3437cfb50e25]: error loading k8s delegates k8s args: TryLoadPodDelegates: error in getting k8s network for pod: GetNetworkDelegates: failed getting the delegate: getKubernetesDelegate: cannot find a network-attachment-definition (bad-conf) in namespace (default): network-attachment-definitions.k8s.cni.cncf.io \"bad-conf\" not found" pod="default/samplepod"
このエラーを修正するには、NetworkAttachmentDefinitions YAML を作成し、適用します。