OpenShift VirtualizationでMultusを利用してみた

概要

前回は、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 によるオーバーレイネットワークを定義します
      • クラスタ内部の通信が可能です。クラスタ外部との通信は不可能です
  • 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

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です