概要
前回は、OCP-Virt, SUSE-Virt, vSphere の3製品の比較についてご紹介しました。
今回は、OCP-VirtでMultus CNI(以下、Multus)を用いてVMに複数NICを付与する方法について記載します。
前回の記事はこちら
本記事では、Multusの基本的な概要、追加ネットワークの構築、VMへの追加NICの設定について解説します。
今回の作業におけるOCP-Virt環境は用意してあることを前提としています。
OCP-Virtの構築についての記事はこちら
Multusとは
Multusは、Kubernetes環境で複数のCNIを扱うことを可能にするCNIプラグインとなります。通常Podには一つのNICが接続されますが、Multusを用いることによりPodに追加NICを構成して、複数のネットワークに接続することが可能になります。
OCP-Virtでも同様にVMのPodに対して追加NICを構成して対応することができます。
Image Source: https://github.com/k8snetworkplumbingwg/multus-cni
net0, net1は追加のNICとなり、他のCNIを使用して複数のネットワークに接続します。
この時、NetworkAttachmentDefinitions という設定により追加のネットワークを用意します。
NetworkAttachmentDefinitions (以下、NAD)
Multusで追加のNICの構成を行いますが、NICが接続するネットワーク設定をNADというカスタムリソースで設定します。
NADは、ネットワーク設定をYAMLファイルとして用意しWeb コンソールまたはCLIなどを通してアプライすることで設定が出来るようになります。
使用出来るCNIは主に下記の種類があります。
- Linux Bridge
- ノード上のBridgeと接続するネットワークを定義します
- クラスタ外部との通信が可能です
- OVN-Kubernetes
- OVN Kubernetes secondary localnet network
- OVN Kubernetes によるオーバーレイネットワークを定義します
- クラスタ内部の通信と、ノード上のBridgeと接続してクラスタ外部との通信が可能です
- OVN Kubernetes L2 overlay network
- OVN Kubernetes によるオーバーレイネットワークを定義します
- クラスタ内部の通信が可能です。クラスタ外部との通信は不可能です
- OVN Kubernetes secondary localnet network
- SR-IOV
- PodにSR-IOV 仮想機能(VF)を割り当てネットワークを構成します
- クラスタ外部との通信が可能です
事前準備
前回までの記事で紹介したOCP-Virt環境を使用します。
詳細は、OCP-Virt 構築してみたを参照して下さい。
OCPへのログイン
下記コマンドを用いて、構築済みのOCPにログインしておきます。
$ oc login -u <ユーザー名> https://api.<クラスター名>.<管理ドメイン>:6443
追加ネットワークの構築
NADの作成
NADを作成して、2つ目のネットワークを作成します。
今回の手順では、CNIとしてOVN Kubernetes L2 overlay network を利用します。
NADのマニフェストファイルを作成します。
追加するネットワークのサブネットを172.31.0.0/24で定義します。
$ vi l2_overlay_nad.yaml
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: vm-tutorial-l2-overlay-network
namespace: vm-tutorial
spec:
config: |-
{
"cniVersion": "0.3.1",
"name": "vm-tutorial-l2-overlay-network",
"type": "ovn-k8s-cni-overlay",
"topology": "layer2",
"subnets": "172.31.0.0/24",
"mtu": 1300,
"netAttachDefName": "vm-tutorial/vm-tutorial-l2-overlay-network"
}
NADのマニフェストファイルを適用します。
$ oc apply -f l2_overlay_nad.yaml
networkattachmentdefinition.k8s.cni.cncf.io/vm-tutorial-l2-overlay-network created
NADの設定を確認します。
$ oc get net-attach-def -n vm-tutorial -oyaml
apiVersion: v1
items:
- apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"k8s.cni.cncf.io/v1","kind":"NetworkAttachmentDefinition","metadata":{"annotations":{},"name":"vm-tutorial-l2-overlay-network","namespace":"vm-tutorial"},"spec":{"config":"{\n \"cniVersion\": \"0.3.1\",\n \"name\": \"vm-tutorial-l2-overlay-network\",\n \"type\": \"ovn-k8s-cni-overlay\",\n \"topology\": \"layer2\",\n \"subnets\": \"172.31.0.0/24\",\n \"mtu\": 1300,\n \"netAttachDefName\": \"vm-tutorial/vm-tutorial-l2-overlay-network\"\n}"}}
creationTimestamp: "2025-04-03T08:37:06Z"
generation: 1
name: vm-tutorial-l2-overlay-network
namespace: vm-tutorial
resourceVersion: "33233267"
uid: f26c98a1-9ad2-4713-911d-7afd1618458a
spec:
config: |-
{
"cniVersion": "0.3.1",
"name": "vm-tutorial-l2-overlay-network",
"type": "ovn-k8s-cni-overlay",
"topology": "layer2",
"subnets": "172.31.0.0/24",
"mtu": 1300,
"netAttachDefName": "vm-tutorial/vm-tutorial-l2-overlay-network"
}
kind: List
metadata:
resourceVersion: ""
これで二つ目のネットワークを構成することが出来ました。
VMへの追加NICの設定
VMへ追加のNICを設定していきます。
追加のNICの設定は、OCPのWebコンソールで実施していきます。
追加のNICの設定
OCPのWebコンソールで [Virtualization] > [VirtualMachines]に移動します。
プロジェクトの選択をして、作成済みのVMを選択します。
[Configuration] -> [Network] を選択して、[Add network interface] をクリックします。Networkに作成したNADを選択出来るようになっています。選択を行いSaveをクリックします。
追加のNICが付与されていることを確認します。
「Pending changes」と表示されるため、追加NICの反映のために画面右上のリスタートボタンを選択して再起動を行います。
数分後、ステータスがRunningであることを確認します。
画面右側のNetworksにnic-xxxと追加のNICの構成、IP(172.31.0.4)が付与されていることを確認します。
内容についての補足事項
今回のケースでは、NADでサブネットを定義しました。
その場合VMにはサブネットの範囲内でDHCPによってIPが割り振られる形になります。
VMで静的IPを使用する場合は、サブネットを定義しない状態でNADを設定する必要があります。
NADを設定後、VMに対して静的IPを定義する必要があることに注意してください。
詳細は、参考URLを参照していただければと思います。
参考URL:
https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html-single/virtualization/index#virt-connecting-vm-to-ovn-secondary-network
https://ovn-kubernetes.io/features/multiple-networks/multi-homing/#network-configuration-reference
まとめ
Multusの基本的な概要、追加ネットワークの構築、VMへの追加NICの設定について解説しました。
Multus を使用してOCP上でもVMに複数のNICを構成することが確認出来ました。
追加のNICによるマルチネットワーク構成により、OCP上でもVMに対して柔軟性と利便性の高いネットワーク設計の提供が可能になります。
この記事がMultus利用の参考になれば幸いです。
参考文献
https://github.com/k8snetworkplumbingwg/multus-cni
https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html-single/virtualization/index#virt-connecting-vm-to-ovn-secondary-network
https://ovn-kubernetes.io/features/multiple-networks/multi-homing/#network-configuration-reference