AKS Edge Essentials の複数の NIC 構成
既定では、AKS Edge Essentials Linux ノードには 1 つのネットワーク インターフェイス カード (NIC) が割り当てられます。 ただし、ノードのデプロイ中に、複数のネットワーク インターフェイスを使用して Linux ノードを構成できます。 この機能は、ネットワーク分割や異なるネットワークまたはゾーンへの分離があるさまざまなシナリオで役立ちます。 AKS Edge Essentials Linux ノードを異なるネットワークに接続するには、異なるネットワーク インターフェイス カードを Linux ノードに接続する必要があります。
この記事では、複数の NIC をサポートし、複数のネットワークに接続するように AKS Edge Essentials Linux ノードを構成する方法について説明します。 次の手順は、このプロセスの概要を示しています。
- セカンダリ NIC を使用して AKS Edge Essentials デプロイを作成します。
- 複数の NIC ネットワーク構成設定を確認します。
- Multus CNI プラグインを構成します。
- サンプル ポッドを使用して Multus セカンダリ ネットワークを構成します。
- ポッドに接続されているネットワークを確認します。
ネットワークの概念と Multus の構成の詳細については、「 AKS Edge Essentials ネットワーク および Multus - クイック スタート ガイドを参照してください。
Note
複数の NIC に対する AKS Edge Essentials のサポートは、Linux ノードに限定されます。 Windows ノードのサポートが必要な場合は、 AKS Edge Essentials GitHub リポジトリで問題/機能要求を提出できます。
セカンダリ NIC を使用して AKS Edge Essentials デプロイを作成する
複数の NIC を持つ Linux ノードをデプロイするには、デプロイ JSON ファイルにセカンダリ インターフェイス カードを追加する必要があります。 デプロイ JSON ファイルを変更し、 LinuxNode.SecondaryNetworks
セクションの一部として、Linux ノードに追加するセカンダリ ネットワークを指定していることを確認します。 オプションの静的 IP 情報 (Ip4Address
、Ip4GatewayAddress
、Ip4PrefixLength
) を使用して、VMSwitchName
の配列を指定できます。
「 コンピューターをセットアップするの手順に従います。
Hyper-V 仮想スイッチを作成する。 詳細については、「 Hyper-V を使用した仮想スイッチの作成と構成を参照してください。
デプロイ JSON ファイルを変更します。
LinuxNode.SecondaryNetworks
セクションに次のパラメーターを追加します。パラメーター 指定可能な値 Comments VMSwitchName
仮想スイッチの名前。 Linux ノードに割り当てられている仮想スイッチの名前。 Ip4Address
DCHP サーバー スコープの範囲内の IPv4 アドレス。 Linux ノードの静的 Ipv4 アドレス。 Ip4GatewayAddress
サブネット ゲートウェイの IPv4 アドレス。 ゲートウェイ IPv4 アドレス。静的 IPv4 アドレスが指定されている場合にのみ有効です。 Ip4PrefixLength
サブネットの IPv4 プレフィックスの長さ。 IPv4 サブネット プレフィックス長。静的 IPv4 アドレスが指定されている場合にのみ有効です。 { ..., "LinuxNode": { ..., "SecondaryNetworks": [ { "VMSwitchName": <virtual-switch-name>, "Ip4Address": <linux-node-secondary-ip-address>, "Ip4GatewayAddress": <gateway-ip-address>, "Ip4PrefixLength": <ip-prefix-length> } ] } }
単一のマシンのデプロイを作成するまたは完全なデプロイを作成するの手順に従って、AKS Edge Essentials ノードをデプロイします。
複数の NIC ネットワーク構成設定を確認する
AKS Edge Essentials ノードを正常にインストールしてデプロイしたら、次の手順に従って、プライマリ インターフェイスとセカンダリ インターフェイスの両方が作成され、Linux ノードに追加されていることを確認します。
プライマリ インターフェイスを確認します。
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip addr eth0"
セカンダリ ネットワーク インターフェイスを確認します。 複数の追加インターフェイスを追加した場合、 ethX として表示され、 X は 追加のネットワーク インターフェイスの数になります。
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip addr eth1"
Multus CNI プラグインを構成する
AKS Edge Essentials ノードを正常にインストールしてデプロイしたら、次の手順に従って Multus を有効にします。
Kubernetes ノードを一覧表示して、既定のネットワークの準備ができていることを確認します。
kubectl get nodes
-
git clone https://github.com/k8snetworkplumbingwg/multus-cni.git
multus-cni プロジェクト ディレクトリに移動します。
deployments フォルダーに移動して、Multus の構成に使用されるデーモン セット スクリプトを表示します。
K3s バージョンを使用している場合は、multus-daemonset.yml スクリプトを次のように編集して、K3s と互換性を持たせるようにします。
AKS Edge Essentials ストレージ ハッシュ トークンを取得します。 ハッシュは、 /var/lib/rancher/k3s/data/ に移動することで見つけられます。
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ls -AU /var/lib/rancher/k3s/data/ | head -1"
次のボリューム構成行を置き換えます。
volumes: - name: cni hostPath: path: /etc/cni/net.d - name: cnibin hostPath: path: /opt/cni/bin
前の手順のストレージ ハッシュ トークンを使用し、構成を次の行に置き換えます。
volumes: - name: cni hostPath: path: /var/lib/rancher/k3s/agent/etc/cni/net.d - name: cnibin hostPath: path: /var/lib/rancher/k3s/data/<replace-with-your-hash>/bin
次のコンテナー構成行を置き換えます。
containers: - name: kube-multus image: ghcr.io/k8snetworkplumbingwg/multus-cni:snapshot command: ["/thin_entrypoint"] args: - "--multus-conf-file=auto" - "--multus-autoconfig-dir=/host/etc/cni/net.d" - "--cni-conf-dir=/host/etc/cni/net.d"
これらを適切な K3s コンテナー構成に置き換えます。
containers: - name: kube-multus image: nfvpe/multus:v3.4.1 command: ["/entrypoint.sh"] args: - "--multus-conf-file=auto" - "--cni-version=0.3.1" # Add the following arg - "--multus-kubeconfig-file-host=/var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig"
次のコマンドを使用して、更新された Multus デーモン セット ファイルを適用します。
kubectl apply -f multus-daemonset.yml
すべてが正しくインストールされている場合、Kubernetes は、各ノードでポッドを実行する Multus デーモン セットを起動し、その結果、multus バイナリが /var/lib/rancher/k3s/data/[replace-with-your-hash]/bin 内の各ノードに配置されます。
デーモンセットは、 /var/lib/rancher/k3s/agent/etc/cni/net.d の最初のアルファベット順の構成ファイルを読み取り、各ノードに multus の新しい構成ファイルを /var/lib/rancher/k3s/agent/etc/cni/net.d/00-multus.conf として作成します。 このファイルは自動生成され、既定のネットワーク構成に基づいています。 また、Multus が Kubernetes API にアクセスするための認証情報を使用して、各ノードに /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d ディレクトリを作成します。
Multus のインストールを検証する
インストールでは、次の情報を確認できます。
指定したディレクトリ パスを調べることで、以前に一覧表示されたすべてのファイルが生成されました。
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ls -l /var/lib/rancher/k3s/data/<replace-with-your-hash>/bin | grep multus"
次のコマンドを実行して、Multus ポッドがエラーなしで実行されたことを確認します。
kubectl get pods --all-namespaces | Select-String 'Multus'
00-multus.conf ファイルを調べて、正しい CNI バージョンが指定されていることを確認します。 CNI バージョン値がまだ既定値でない場合は 0.3.1 に更新します。
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo cat /var/lib/rancher/k3s/agent/etc/cni/net.d/00-multus.conf"
サンプル ポッドを使用して Multus セカンダリ ネットワークを構成する
Multus プラグインをインストールして実行したら、Kubernetes ネットワーク添付ファイル定義を作成します。
セカンダリ ネットワークの secondarynet-conf.yaml yaml ファイルを作成します。 Multus クイック スタートのインストールの一部として、CRD (カスタム リソース定義) が作成されます。これを使用して、追加のすべてのインターフェイスの構成を定義できます。 次のサンプル YAML ファイルは、セカンダリ ネットワークを追加します。
# This net-attach-def defines secondarynet-conf apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: secondarynet-conf spec: config: '{ "cniVersion": "0.3.1", "plugins": [ { "type": "bridge", "bridge": "mynet1", "ipam": { "subnet": "10.0.0.0/24", "rangeStart": "10.0.0.60", "rangeEnd": "10.0.0.120"}, "gateway": "10.0.0.1" } ] }'
Note
Multus の公式ドキュメントでは、
macvlan
タイプのセカンダリ インターフェイスを指定しています。 ただし、macvlan
プラグインは既定では使用できません。 このプラグインを使用するには、セカンダリ ネット構成を指定する前にインストールします。 さまざまなネットワーク プラグインとそのサンプル構成の詳細については、「 OpenShift での Multus CNI の使用を参照してください。前の手順で作成した secondarynet-conf.yaml を使用してセカンダリ インターフェイスを作成します。
kubectl apply -f secondarynet-conf.yaml
samplepod.yaml ファイルを作成して、前に作成したセカンダリ インターフェイスにアタッチするサンプル ポッドをデプロイします。 次の YAML コードは、セカンダリ インターフェイスを使用する新しいポッドを作成するためのサンプルです。
apiVersion: v1 kind: Pod metadata: name: samplepod annotations: k8s.v1.cni.cncf.io/networks: secondarynet-conf spec: containers: - name: samplepod command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"] image: alpine
前の手順で作成した
samplepod.yaml
を使用して、サンプル ポッドを作成します。kubectl apply -f samplepod.yaml
ポッドに接続されているネットワークを確認する
最後の手順では、ポッドが実行されており、正しいネットワーク インターフェイスが接続されていることを確認します。
ポッドが実行されていることを確認します。
kubectl get pods
ポッドを検査し、接続されているインターフェイスを確認します。
kubectl exec -it samplepod -- ip a
次の 3 つのインターフェイスがあります。
- lo: ループバック インターフェイス
- eth0: 既定のネットワーク
- net1: secondarynet-conf を使用して作成された新しいインターフェイス