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 クラスターが Multus CNI で実行されていることを確認します。
oc get pods -n openshift-multus
$ oc get pods -n openshift-multus
Copy 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 5h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行し、次のサンプルファイルを参照して
NetworkAttachmentDefinition
設定ファイルを作成します。oc apply -f network-attachment-definition.yaml
$ oc apply -f network-attachment-definition.yaml
Copy 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
オブジェクトによって定義されたネットワークが存在します。
手順
Pod
YAML ファイルにアノテーションを追加します。以下のアノテーション形式のいずれかのみを使用できます。カスタマイズせずに追加ネットワークを割り当てるには、以下の形式でアノテーションを追加します。
<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
Pod
YAML ファイルを作成し、追加のネットワークのNetworkAttachmentDefinition
アノテーションを追加するには、次のコマンドを実行し、サンプル YAML を使用します。oc apply -f ./<test_bridge>.yaml
$ oc apply -f ./<test_bridge>.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<test_bridge>
は、使用する Pod 名に置き換えます。
出力例
pod/test_bridge created
pod/test_bridge created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow test-bridge
Pod YAML の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkAttachmentDefinition
アノテーションが正しいことを確認します。NetworkAttachmentDefinition
アノテーションの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
NetworkAttachmentDefinition
アノテーションがPod
YAML に存在することを確認するには、<name>
を Pod の名前に置き換えて次のコマンドを実行します。oc get pod <name> -o yaml
$ oc get pod <name> -o yaml
1 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 yaml
1 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 pod
Copy 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 81s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4. 追加のネットワークの設定 リンクのコピーリンクがクリップボードにコピーされました!
NetworkAttachmentDefinition オブジェクトを作成して適用した後、次の例の手順に従って追加のネットワークを設定します。この例では、bridge
タイプの追加ネットワークが使用されます。このワークフローは、他の追加のネットワークタイプにも使用できます。
前提条件
-
NetworkAttachmentDefinition
オブジェクト設定を作成して適用しました。
手順
以下のコマンドを実行して、ブリッジがホストに作成されていることを確認します。
ip a show br-test
$ ip a show br-test
Copy 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 forever
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 forever
Copy 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-test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、IP アドレス設定がブリッジに追加されたことを確認します。
ip a show br-test
$ ip a show br-test
Copy 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 a
Copy 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:8080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello MicroShift
Hello MicroShift
Copy 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 を作成し、適用します。