Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenShift Virtualizationのネットワーク構成を真剣に考えてみた/Open...

Shion Tanaka
December 12, 2024

OpenShift Virtualizationのネットワーク構成を真剣に考えてみた/OpenShift Virtualization's Network Configuration

2024年12月12日に開催されたOpenShift Lounge+ "TALKs" 〜 Virtのお供スペシャル〜で発表した資料です。
https://openshift.connpass.com/event/337482/

「OpenShift Virtualizationのネットワーク構成を真剣に考えてみた」
OpenShift Virtualizationのネットワーク設計って、実はちょっと一筋縄ではいかないことも多いんです。Kubernetesのネットワークアーキテクチャをベースにしているので、従来の仮想マシンのネットワーク設計とはだいぶ勝手が違います。本セッションでは、その違いや、物理ネットワークとの接続方法、仮想マシンの論理的な分離方法など、調べていて感じたことをぶっちゃけます。また、OpenShift v4.17から登場したUDN(通称:うどん)についても、個人的に思ったことを将来的な展望を交えながらお話しします。

Shion Tanaka

December 12, 2024
Tweet

More Decks by Shion Tanaka

Other Decks in Technology

Transcript

  1. • 田中 司恩(タナカ シオン) / @tnk4on ◦ https://tnk4on.github.io/ • Red

    Hatのソリューションアーキテクト。Red Hatへの転職と同時に福岡に移 住。 • 大阪芸術大学音楽工学コース卒。在学中よりメディア・アート、サウンド・アー ト作品の制作を行う。 • コンテナに興味を持ち、OpenShiftやPodmanに関する情報をブログ、雑誌/ 書籍に多数投稿。「Podmanイン・アクション」の著者の1人。 • 2020年頃よりPodmanコミュニティに参加、PR/Issue/翻訳などを行い、 Podmanの日本語情報発信を積極的に展開中。 • 最近はPodmanを推す人 • 音とテクノロジーが重なる領域が好物のデジタルクリエイター。 自己紹介
  2. ゼロから始めるOpenShift Virtualization ▸ 赤帽エンジニアブログに ・ 第1回:OpenShiftのインストール ・ 第2回:OpenShiftインストール後の作業 ・ 第3回:共有ストレージの作成(

    NFS CSIドライバーの構築) ・ 第4回:OpenShift Virtualizationのインストールと実行 ・ 第5回:vSphere仮想マシンの移行 ▸ 5分で完全理解!ゼロから始める OpenShift Virtualization https://speakerdeck.com/tnk4on/starting-from-zero-openshift-virtualization-at-5-min ・ 第6回 Red Hat Tech Night in RHSC 2024 のLTで登壇した資料 ESXi上に仮想マシンとして OpenShift Virtualizationの環境を構築する完全ガイド
  3. 本資料の前提条件 ▸ OpenShiftについては概ね理解していることとします ▸ OpenShiftのネットワークについて Deep Diveは行いません。可能 な限り理解するのに不要な部分は抽象化し、本内容の理解の推進 を優先とします。 ▸

    SR-IOVなど、仮想マシンからハードウェアを直接利用する内容は 対象外とします ▸ 本内容には独自の見解が含まれます。内容にツッコミがある場合 は個人宛てにご自由にご連絡ください。
  4. 本ドキュメント上での略称 ▸ OpenShift Virtualization (OCP-V) ▸ OVN-Kubernetes (OVN-K) ▸ NodeNetworkConfigurationPolicy

    (NNCP) ▸ NetworkAttachmentDefinition (NAD) ▸ Open vSwitch (OVS) ▸ UserDefinedNetwork (UDN)
  5. 一般的な仮想マシンのネットワークの種類 OpenShift Virtualizationのネットワークについて理解する ▸ ブリッジ型 : ・ 仮想スイッチなどを作成して物理ネットワークと接続 ・ 物理ネットワークに直接接続されているように振る舞う

    ・ 主にハイパーバイザー型仮想環境( vSphere、Hyper-V、等) ▸ ルーティング型 : ・ ホストマシンを経由して外部ネットワークに接続 ・ 仮想マシンにはプライベート IPアドレスが割り当てられ、外部との通信 にはNAT(Network Address Translation)を使用 ・ 主にホスト型仮想環境( VMware Workstation/Fusion、UTM、等) ブリッジ型とルーティング型 VM NIC Virtual Switch VM NIC 192.168.1.0/24 192.168.1.10 172.16.0.10 192.168.1.0/24 192.168.1.0/24 172.16.0.0/24 192.168.1.0/24
  6. OpenShift Virtualizationのネットワークについて理解する vSphereとOpenShiftのネットワーク機能比較 OpenShiftの各ノード上のOVSはOVN-Kで抽象化されている vSphere Standard Switch (vSS) vSphere Distributed

    Switch (vDS) 特徴 vSS (vSphere) vDS (vSphere) OVN-K (OpenShift) アーキテクチャ ローカルホストで動作 集中管理型、複数ホスト間の一元管理 分散型、Kubernetes環境向け スケーラビリティ 限定的 高い 高い セキュリティ機能 基本的なVLANとトラフィック管理 高度なネットワーク制御とポリシー 高度なネットワーク制御とポリシー クラウドネイティブ対応 低い (仮想マシン向け) 低い (仮想マシン向け) 高い (コンテナ、Kubernetes向け) 簡易性 簡単 中程度 複雑 管理方法 vSphereコンソールで個別に管理 vCenter経由で集中管理 Kubernetes API経由で管理
  7. OpenShiftはコンテナと仮想マシンの統合実行環境 OpenShift Virtualizationのネットワークについて理解する 仮想マシン コンテナ OpenShift Virtualization 管理者 アプリ利用者 他の基盤上のアプリ

    コンテナへ移行 仮想マシンからコンテナへ 仮想マシンの Refactor コンテナ化 アプリの利用 仮想マシンの実行 仮想マシン利用者
  8. OpenShift Virtualizationのネットワークについて理解する OpenShift Virtualizationに期待すること ▸ vSphereからの移行先としての仮想基盤 ▸ OCP-Vの市場向けメッセージとしては、仮想マシンからコンテナへ の移行(Refactor)を目指すことを目的とするが …

    →実際にはお客様やパートナー様が最初に期待することは仮想  基盤としての利用目的がほとんど 仮想マシン OpenShift Virtualization アプリコンテナ ロードバランサー アプリ利用者 仮想マシン利用者 コンテナと同様の方法で サービスの公開が可能 仮想マシンに直接接続し て利用
  9. ▸ コンテナ的アプローチ : ・ RouteとService、NodePort、MetalLB等を利用 ▸ 仮想マシン的アプローチ : ・ ブリッジ経由で仮想マシンと直接接続

    OpenShift Virtualizationのネットワークについて理解する OpenShift上の仮想マシンへのアクセス方法 コンテナ的アプローチと仮想マシン的アプローチ 一般的にはこういうことを期待。 vSphereからの仮想基盤 の代替としてはこちらの方が利用しやすい ロードバランサー service nodeport metallb VM VM NIC Virtual Switch NIC Virtual Switch NIC Virtual Switch ノード ノード
  10. プライマリネットワーク、セカンダリネットワークの概念 OpenShiftのデフォルトネットワーク デフォルトで使用するのは Podネットワーク ▸ OpenShiftのコンテナのデフォルト接続先は「 Podネットワーク」 →OCP-Vで作成した仮想マシンも同様 ▸ Podネットワークとは、

    ・ OpenShiftクラスター内のすべての Podが相互通信可能な仮想ネットワーク ・ コンテナや仮想マシンが統一されたネットワーク空間を共有し、シンプルな通信設計が可能 になる ・ OVN-Kubernetesを使用(OpenShift SDNはv4.15で削除)
  11. 一方、一般的な仮想マシンの世界では… プライマリネットワーク、セカンダリネットワークの概念 ▸ プライマリネットワーク: ・ 仮想マシンの本IPアドレスが設定される ▸ セカンダリネットワーク ・ 内部通信や特定用途で利用される

    VM NIC Virtual Switch 192.168.1.0/24 VM セカンダリネットワーク 172.16.0.0/24 プライマリネットワーク 192.168.1.0/24 プライマリ/セカンダリネットワークともに、個々の環境に合 わせて自由にネットワークアドレス、 IPアドレスの設定が可 能 Virtual Switch
  12. プライマリネットワーク、セカンダリネットワークの概念 デフォルトの設定を無視すれば、普通にこういうことも可能 VMのプライマリNICにOpenShiftのセカンダリーネットワークをアサイン VM NIC 192.168.1.0/24 VM NIC 172.16.0.0/24 VM

    VM ただし、下記の点に注意 ※ virtctl ssh, virtctl scp を使って仮想マシンに直接接続できなくなる ※ readiness プローブと liveness プローブを使用したヘルスチェックができなくなる br1 Pod Network 2nd Network プライマリネットワーク 10.128.0.0/14 セカンダリネットワーク 172.16.0.0/24 br-ex ココ ☝ ☝
  13. 物理ネットワークを利用する2つの構成方法 ブリッジネットワークの構成(物理ネットワークへの接続) ※ SR-IOVは目的が異なるので本ドキュメントでは対象外 製品ドキュメント:第8章 ネットワーク https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html/virtualization/networking#virt-networking ▸ OpenShiftのデフォルトのネットワークは「 Podネットワーク」を使用しますが、別のネットワーク(セカンダ

    リーネットワーク)に接続することが可能です ▸ OpenShift v4.17(2024/11/12時点)では、仮想マシンから物理ネットワークを利用する方法として、「 Linuxブ リッジ」と「OVN-Kubernetes ローカルネット」の2つの構成方法があります※ 図:OpenShift Virtualization ネットワークの概要(製品ドキュメント)
  14. ノード ens192 br-ex Podネットワーク namespace:AAA Linuxブリッジの構成概要 ens224 br1 linux-bridge VM

    eth0 VM eth0 VLAN 10: 192.168.10.0/24 VLAN 20:192.168.20.0/24 192.168.10.2 192.168.10.1 192.168.20.10 192.168.10.10 物理スイッチ VLAN 20 VLAN 10 VLAN 10 NAD Linuxブリッジ
  15. ノード namespace:AAA ens192 br-ex Podネットワーク OVN-K localnetの構成概要 ens224 ovs-br1 ovnk-localnet

    VM eth0 VM eth0 VLAN 10: 192.168.10.0/24 VLAN 20:192.168.20.0/24 192.168.10.2 192.168.10.1 192.168.10.10 物理スイッチ VLAN 20 VLAN 10 VLAN 10 NAD OVSブリッジ localnet1 localnet 192.168.20.10
  16. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) LinuxブリッジとOVN-K localnetのブリッジ構成詳細

    ens192 ens256 br-ex(ovs-bridge) br1(linux-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 ens224 ovs-br1(ovs-bridge) namespace:AAA linux-bridge-AAA (NAD) VM ovnk-bridge-AAA (NAD) VM VM namespace:BBB linux-bridge-BBB (NAD) VM ovnk-bridge-BBB (NAD) VM VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) bridge-mappings localnet1_ovn_localnet_port (ovs-interface) localnet1_ovn_localnet_switch (switch) localnet(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 OVS type: patch type: internal type: system
  17. ブリッジネットワークの構成(物理ネットワークへの接続) Linux ブリッジ CNI と OVN-Kubernetes ローカルネットトポロジーの比較 https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html/virtualization/networking#comparing-bridge-localnet 2つの構成方法の比較 機能

    Linux ブリッジ OVN-Kubernetes ローカルネット 備考 ブリッジの種類 Linuxブリッジ OVSブリッジとOVNローカルネットをブリッ ジマッピング 異なるノード上のVMとの通信方法 物理ネットワークを経由 OVNオーバーレイネットワークを経由 NADでのVLANの利用 はい はい VMはNADでuntag後のネットワー クに接続 VM内でのタグVLANの利用 はい いいえ VM内でVLANインターフェースの 作成を行うケース ネットワークポリシー いいえ はい(マルチネットワークポリシー) 管理された IP プール いいえ はい(※whereaboutsは利用不可) MAC スプーフィングフィルタリング はい はい
  18. ens192 br-ex Podネットワーク namespace:AAA LinuxブリッジでNADにVLANを設定する構成 ens224 br1 linux-bridge-vlan10 (VLAN: 10)

    VM VLAN 10,20 eth0 linux-bridge-vlan20 (VLAN: 20) VM eth0 VLAN 10: 192.168.10.0/24 VLAN 20:192.168.20.0/24 192.168.20.1 192.168.10.1 192.168.10.10 物理スイッチ VLAN 20 VLAN 10,20 VLAN 10 apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: linux-br1-ens224 spec: desiredState: interfaces: - name: br1 type: linux-bridge state: up ipv4: enabled: false bridge: options: stp: enabled: false port: - name: ens224 NADの設定内容(e.g. linux-br1-ens224.yaml) 192.168.20.10
  19. ens192 br-ex Podネットワーク namespace:AAA LinuxブリッジでVM内までタグVLANを通す構成 ens224 br1 linux-bridge-vlan-trunk (VLAN: {})

    VM VLAN 10,20 eth0.10 VM eth0.20 VLAN 10: 192.168.10.0/24 VLAN 20:192.168.20.0/24 192.168.20.1 192.168.10.1 192.168.10.10 Why a virtual NIC in trunk mode is not working in OpenShift Virtualization? - Red Hat Customer Portal https://access.redhat.com/solutions/7039373 物理スイッチ VLAN 20 VLAN 10,20 VLAN 10 apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: linux-br1-ens224-vlan spec: desiredState: interfaces: - name: br1 type: linux-bridge state: up ipv4: enabled: false bridge: options: stp: enabled: false port: - name: ens224 vlan: {} NADの設定内容(e.g. linux-br1-ens224-vlan.yaml) 192.168.20.10
  20. OVN-K localnetでNADにVLANを設定する構成 namespace:AAA ens192 ens224 br-ex ovs-br1 ovnk-localnet-vlan10 (VLAN: 10)

    Podネットワーク VM VLAN 10,20 eth0 ovnk-localnet-vlan20 (VLAN: 20) VM eth0 VLAN 10: 192.168.10.0/24 VLAN 20:192.168.20.0/24 192.168.20.1 192.168.10.1 192.168.10.10 localnet1 localnet2 ※ Error connecting a VM to a new VLAN in an existing OVN secondary network with localnet topology - Red Hat Customer Portal https://access.redhat.com/solutions/7078377 VLANごとに異なる ローカルネットの作成 が必要(※) 物理スイッチ VLAN 20 VLAN 10,20 VLAN 10 apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: ovs-br1-ens224 spec: desiredState: interfaces: - name: ovs-br1 type: ovs-bridge state: up bridge: allow-extra-patch-ports: true options: stp: false port: - name: ens224 ovn: bridge-mappings: - localnet: localnet1 bridge: ovs-br1 state: present OVSブリッジの設定内容 (e.g. ovs-br1-ens224.yaml) 192.168.20.10 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: annotations: {} name: ovnk-localnet-vlan10 namespace: vlan-test spec: config: |- { "cniVersion": "0.4.0", "name": "localnet1", "type": "ovn-k8s-cni-overlay", "netAttachDefName": "vlan-test/ovnk-localnet-vlan10", "topology": "localnet" } NADの設定内容 (e.g. ovnk-localnet-vlan10.yaml)
  21. namespace:AAA ens192 br-ex Podネットワーク (NG)OVN-K localnetでVM内までタグVLANを通す構成 物理スイッチ VLAN 20 VLAN

    10,20 ens224 br1 ovnk-localnet-trunk (VLAN: {}) VM VLAN 10 VLAN 10,20 eth0.10 VM eth0.20 VLAN 10: 192.168.10.0/24 VLAN 20:192.168.20.0/24 192.168.20.1 192.168.10.1 192.168.10.10 2024年11月12日時点 でこの構成は不可 localnet1 192.168.20.10
  22. ※ https://docs.redhat.com/ja/documentation/openshift_container_platform/4.15/html/virtualization/release-notes#virt-4-15-networking ブリッジネットワークの構成(物理ネットワークへの接続) LinuxブリッジとOVN-K localnetの構成方法 ▸ 実装方法は本資料の Appendixを参照 ▸ 設定方法はNMState

    Operatorを使う。RHELのNMStateと構成方 法は同じ。自動で全ノードの設定をやってくれる。元に戻すのも簡 単。CLI、GUIあり。 ▸ OVN-Kubernetes セカンダリーネットワーク のローカルネットトポロ ジーを利用する場合は、 OpenShift Virtualization v4.15以上である こと(※)
  23. ブリッジネットワークの構成(物理ネットワークへの接続) NMState Operator ▸ ネットワーク設定の簡略化 :YAML形式でネットワーク設定を 記 述し(NNCP)、ノードの静的IP設定やブリッジ作成などを自動 適用可能 ▸

    宣言的管理 :現在の状態と希望状態を比較し、意図したネット ワーク構成を維持。 ▸ 容易な導入 :Operator Hubから簡単にOperatorのインストー ルが可能
  24. UserDefinedNetwork (UDN)とは UDNについて 日本語訳ではユーザー定義ネットワーク https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html/networking/understanding-user-defined-networks ▸ OpenShift v4.17からの追加機能。現時点では TP。 ▸

    論理的に分離されたネットワークを構成できる。 ・ マルチテナントの作成が可能 ・ 同一クラスター上で、重複したネットワークアドレス、 IPアドレスの使用が可能 ▸ 作成したUDN間は独立しており、デフォルトで通信ができない ・ UDNを使わない場合はNetworkPolicyを設定する必要がある ▸ L2 UDNとL3 UDNがある ▸ L3 UDNではノードごとにレイヤー 2 セグメントが作成され、それぞれに異なるサブネットが割り当 てらる ▸ Linuxブリッジ、OVN-K localnetと同様に、セカンダリネットワークとしてアサイン可能
  25. 同じネットワークサブネット範囲を持つ L2 UDNを作成した構成例( role:Primary) namespace:udn-test 172.16.0.1 172.16.0.2 UDN: udn-1 (172.16.0.0/24)

    role:Primary OK namespace:udn-test2 172.16.0.1 172.16.0.2 UDN: udn-2 (172.16.0.0/24) role:Primary OK NG fedora-1 fedora-2 fedora-3 fedora-4 OK OK
  26. 同じネットワークサブネット範囲を持つ L2 UDNを作成した構成例( role:Secondary) namespace:udn-test UDN: udn-1 (172.16.0.0/24) role:Secondary OK

    namespace:udn-test2 UDN: udn-2 (172.16.0.0/24) role:Secondary OK fedora-1 fedora-2 fedora-3 fedora-4 NG NG NG 172.16.0.1 172.16.0.2 172.16.0.1 172.16.0.2
  27. namespace:udn-test 同一ネームスペース内に、異なるネットワークサブネット範囲を持つ L2 UDNを作成した構成例 UDN: udn-1 (172.16.0.0/24) role:Primary OK OK

    fedora-1 fedora-2 fedora-3 fedora-4 NG UDN: udn-2 (172.16.0.0/24) role:Primary 172.16.0.1 172.16.0.2 172.16.0.1 172.16.0.2 OK OK
  28. UDNとPodネットワークの違い UDNについて VM VM Pod Network Network Policy: Deny VM

    VM Pod Network Default: Allow OK VM VM UDN-1 UDN-2 Native Isolation Podネットワーク UDN
  29. OCP-VでUDNを利用するには下記の作業が必要です ▸ Feature Gateを使用したTP機能の有効化 ▸ OCP-Vのインストール ▸ UDNの作成 (OpenShift v4.17.4およびv4.18.0-rc.1で確認済み)

    UDNについて OCP-V(OpenShift Virtualization) OpenShift VirtualizationでUDNを有効化する方法 OpenShift v4.18.0-rc.1、2024/12/9時点の内容
  30. 既知の問題(2024/12/9時点) UDNについて ※1 https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html/virtualization/virt-configuring-viewing-ips-for-vms#virt-configuring-ip-vm-cli_virt-configuring-viewing-ips-for-vms ※2 https://github.com/openshift/ovn-kubernetes/blob/release-4.17/go-controller/pkg/crd/userdefinednetwork/v1/types.go#L141 ※3 https://docs.redhat.com/ja/documentation/openshift_container_platform/4.17/html/networking/understanding-user-defined-networks#limitations-for-udn_understanding-user-defined-networks ▸ VM作成時、cloudInitNoCloud

    で静的IPアドレスを指定しても自動割り当てされる(該当製品ド キュメント ※1) ▸ L2 UDN作成時、subnetsの指定を外すとエラーになる( GitHubのソース ※2) ▸ ipamLifecycle: Persistent を指定したL2 UDNを作成してもIPアドレスが保持されない( =VM 再起動でIPアドレスが変わる)。(該当製品ドキュメント ※3) ▸ OpenShift v4.17ではL2 UDN(Primary)で外部ネットワークに通信ができない( OpenShift v4.18では問 題解消) ▸ OpenShift v4.17ではロールにSecondaryが指定できない(OpenShift v4.18では問題解消) ▸ GUIでVMに作成済みのUDNを指定できない(passtが指定できない)
  31. Cluster Operator br-int(ovs-bridge) Linuxブリッジの構成完成図 ens192 ens256 br-ex(ovs-bridge) br1(linux-bridge) br-ex (ovs-interface)

    192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 namespace:AAA linux-bridge-AAA (NAD) VM VM namespace:BBB linux-bridge-BBB (NAD) VM VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ens224 OVN switch/ interface ※ routerなど一部は表示上省略 OVS type: patch type: internal type: system
  32. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ①Linuxブリッジを作成する ※物理ネットワークインターフェース、ボンディング、VLANデバイス

    ens192 ens256 br-ex(ovs-bridge) br1(linux-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 namespace:AAA VM namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ens224 ①インターフェース(※)を 指定してLinuxブリッジを 作成 OVS type: patch type: internal type: system
  33. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ②Linuxブリッジを指定して NADを作成

    ens192 ens256 br-ex(ovs-bridge) br1(linux-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 namespace:AAA VM namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ens224 linux-bridge-AAA (NAD) ②Linuxブリッジを指定して 対象のネームスペース内に NADを作成 OVS type: patch type: internal type: system
  34. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ③NADを作成しVMに割り当てる ens192

    ens256 br-ex(ovs-bridge) br1(linux-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 namespace:AAA VM namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ens224 linux-bridge-AAA (NAD) VM ③NADを指定してVMを作 成、または既存のVMに NADを割り当てる OVS type: patch type: internal type: system
  35. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ④別のネームスペースにも同様に NADを作成可能

    ens192 ens256 br-ex(ovs-bridge) br1(linux-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 namespace:AAA VM namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ens224 linux-bridge-AAA (NAD) VM linux-bridge-BBB (NAD) VM ④別のネームスペースにも 同じLinuxブリッジを指定した NADを作成可能 OVS type: patch type: internal type: system
  36. CLIでLinuxブリッジを構成する $ cat > linux-br1-ens256.yaml <<EOF apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy

    metadata: name: linux-br1-ens256 spec: desiredState: interfaces: - name: br1 type: linux-bridge state: up ipv4: enabled: false bridge: options: stp: enabled: false port: - name: ens256 EOF $ oc apply -f linux-br1-ens256.yaml nodenetworkconfigurationpolicy.nmstate.io/linux-br1-ens256 created $ oc get nncp linux-br1-ens256 NAME STATUS REASON linux-br1-ens256 Available SuccessfullyConfigured ①Linuxブリッジを作成する apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: linux-br1-ens256 spec: desiredState: interfaces: - name: br1 type: linux-bridge state: up ipv4: enabled: false bridge: options: stp: enabled: false port: - name: ens256 LinuxブリッジNNCPの内容(e.g. linux-br1-ens256.yaml) • NNCP名:linux-br1-ens256 • ブリッジ名:br1 • ブリッジ先インターフェース:ens256 • IPv4アドレス:無効 • STP:無効 ※特定のノードのみに適用したい場合はspec.nodeSelectorを使用する
  37. CLIでLinuxブリッジを構成する $ cat > nad-linux-bridge-br1.yaml <<EOF apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition

    metadata: annotations: {} name: nad-linux-bridge-br1 namespace: vlan-test spec: config: |- { "cniVersion": "0.3.1", "name": "nad-linux-bridge-br1", "type": "bridge", "bridge": "br1", "ipam": {}, "macspoofchk": true, "preserveDefaultVlan": false } EOF $ oc apply -f nad-linux-bridge-br1.yaml networkattachmentdefinition.k8s.cni.cncf.io/nad-linux-bridge-br1 created $ oc get net-attach-def nad-linux-bridge-br1 NAME AGE nad-linux-bridge-br1 2m44s ②Linuxブリッジを指定してNADを作成 apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: annotations: {} name: nad-linux-bridge-br1 namespace: vlan-test spec: config: |- { "cniVersion": "0.3.1", "name": "nad-linux-bridge-br1", "type": "bridge", "bridge": "br1", "ipam": {}, "macspoofchk": true, "preserveDefaultVlan": false } NADの内容(e.g. nad-linux-bridge-br1.yaml) • NAD名:nad-linux-bridge-br1 • ネームスペース:vlan-test • タイプ:bridge • ブリッジ先インターフェース:br1 • MAC スプーフィングチェック:true(デフォルト値)
  38. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) OVN-K localnetの構成完成図

    ens192 ens256 br-ex(ovs-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 ens224 ovs-br1(ovs-bridge) namespace:AAA VM ovnk-bridge-AAA (NAD) VM namespace:BBB VM ovnk-bridge-BBB (NAD) VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) bridge-mappings localnet1_ovn_localnet_port (ovs-interface) localnet1_ovn_localnet_switch (switch) localnet(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 OVS type: patch type: internal type: system
  39. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ①OVSブリッジとlocalnetを作成し、マッピングする ens192

    ens256 br-ex(ovs-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 ens224 ovs-br1(ovs-bridge) namespace:AAA VM namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) bridge-mappings localnet1_ovn_localnet_port (ovs-interface) localnet1_ovn_localnet_switch (switch) localnet(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ①-2 作成したOVSブリッ ジとマッピングする localnetを作成する OVS type: patch type: internal type: system ①-1 インターフェース(※) を指定してOVSブリッジ を作成
  40. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ②localnetを指定してNADを作成する ens192

    ens256 br-ex(ovs-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 ens224 ovs-br1(ovs-bridge) namespace:AAA VM ovnk-bridge-AAA (NAD) namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) bridge-mappings localnet1_ovn_localnet_port (ovs-interface) localnet1_ovn_localnet_switch (switch) localnet(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ②ネームスペース内でブ リッジ先のlocalnetを指 定してNADを作成 OVS type: patch type: internal type: system
  41. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ③NADを作成しVMに割り当てる ens192

    ens256 br-ex(ovs-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 ens224 ovs-br1(ovs-bridge) namespace:AAA VM ovnk-bridge-AAA (NAD) VM namespace:BBB VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) bridge-mappings localnet1_ovn_localnet_port (ovs-interface) localnet1_ovn_localnet_switch (switch) localnet(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ③NADを指定してVMを作 成、または既存のVMに NADを割り当てる OVS type: patch type: internal type: system
  42. Cluster Operator OVN switch/ interface ※ routerなど一部は表示上省略 br-int(ovs-bridge) ④別のネームスペースにも同様に NADを作成可能

    ens192 ens256 br-ex(ovs-bridge) br-ex (ovs-interface) 192.168.1.201 ovn-k8s-mp0 (ovs-interface) 10.128.0.2/23 ens224 ovs-br1(ovs-bridge) namespace:AAA VM ovnk-bridge-AAA (NAD) VM namespace:BBB VM ovnk-bridge-BBB (NAD) VM node-01.ocp.home.lab (switch) Podネットワーク(と見える部分) bridge-mappings localnet1_ovn_localnet_port (ovs-interface) localnet1_ovn_localnet_switch (switch) localnet(と見える部分) Cluster Operator Operator A Pod Operator B Pod Operator C Pod ovn-k8s-mp0 (Interface) 10.128.0.2/23 ④別のネームスペースにも 同じlocalnetを指定したNAD を作成可能 OVS type: patch type: internal type: system
  43. CLIでOVN-K localnetを構成する $ cat > ovs-br1-ens224.yaml <<EOF apiVersion: nmstate.io/v1 kind:

    NodeNetworkConfigurationPolicy metadata: name: ovs-br1-ens224 spec: desiredState: interfaces: - name: ovs-br1 type: ovs-bridge state: up bridge: allow-extra-patch-ports: true options: stp: false port: - name: ens224 ovn: bridge-mappings: - localnet: localnet1 bridge: ovs-br1 state: present EOF $ oc apply -f ovs-br1-ens224.yaml nodenetworkconfigurationpolicy.nmstate.io/ovs-br1-ens224 created $ oc get nncp ovs-br1-ens224 NAME STATUS REASON ovs-br1-ens224 Available SuccessfullyConfigured ①OVSブリッジとlocalnetを作成し、マッピングする apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: ovs-br1-ens224 spec: desiredState: interfaces: - name: ovs-br1 type: ovs-bridge state: up bridge: allow-extra-patch-ports: true options: stp: false port: - name: ens224 ovn: bridge-mappings: - localnet: localnet1 bridge: ovs-br1 state: present LinuxブリッジNNCPの内容(e.g. ovs-br1-ens224.yaml) • NNCP名:ovs-br1-ens224 • ブリッジ名:ovs-br1 • ブリッジ先インターフェース:ens224 • IPv4アドレス:無効 • STP:無効 • ブリッジマッピング: ◦ ローカルネット名:localnet1 ◦ ブリッジ名:ovs-br1 ※特定のノードのみに適用したい場合はspec.nodeSelectorを使用する
  44. CLIでOVN-K localnetを構成する $ cat > nad-ovnk-bridge-ovs-br1.yaml <<EOF apiVersion: k8s.cni.cncf.io/v1 kind:

    NetworkAttachmentDefinition metadata: annotations: {} name: nad-ovnk-bridge-ovs-br1 namespace: vlan-test spec: config: |- { "cniVersion": "0.4.0", "name": "localnet1", "type": "ovn-k8s-cni-overlay", "netAttachDefName": "vlan-test/nad-ovnk-bridge-ovs-br1", "topology": "localnet" } EOF $ oc apply -f nad-ovnk-bridge-ovs-br1.yaml networkattachmentdefinition.k8s.cni.cncf.io/nad-ovnk-bridge-ovs-br1 created $ oc get net-attach-def nad-ovnk-bridge-ovs-br1 NAME AGE nad-ovnk-bridge-ovs-br1 17s ②localnetを指定してNADを作成する apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: annotations: {} name: nad-ovnk-bridge-ovs-br1 namespace: vlan-test spec: config: |- { "cniVersion": "0.4.0", "name": "localnet1", "type": "ovn-k8s-cni-overlay", "netAttachDefName": "vlan-test/nad-ovnk-bridge-ovs-br1", "topology": "localnet" } NADの内容(e.g. nad-ovnk-bridge-ovs-br1.yaml) • NAD名:nad-ovnk-bridge-ovs-br1 • ネームスペース:vlan-test • ネットワーク:localnet1 • タイプ:ovn-k8s-cni-overlay • トポロジー:localnet