ノート:

Oracle Cloud Infrastructureでのオープン仮想ネットワーク・プロバイダを使用したOracle Linux Virtualization Managerのデプロイ

イントロダクション

このチュートリアルでは、チームが既存のオンプレミスのOracle Linux Virtualization Manager環境をOracle Cloud Infrastructure (OCI)に拡張することで、ベア・メタル・ノードのフリートの使用率を高めることを目的とするシナリオについて説明します。Oracle Cloudのネットワーキング機能をOpen Virtual Network (OVN)と統合することで、FastConnectを介して、OCIのオンプレミス・リソースとOracle Linux Virtualization Managerデプロイ済仮想マシン(VM)間の接続をブリッジできます。

ノート:このチュートリアルはテストおよび評価のみを目的としています。OCIに対するOracle Linux Virtualization Managerのサポートは開発中であり、OCIシステムの管理は実際にはサポートされていません。Oracle Linux Virtualization ManagerでのOVNの使用はテクノロジ・プレビューで、機能が開発中であることを示しています。

ソリューションの概要とデプロイメント

ソリューションの概要

次のリソースで新しいVCN (10.0.0.0/16)が必要になります:

ソリューション・アーキテクチャ

ソリューション・デプロイメント

BM VNIC VLAN 1000

BM VNIC VLAN 1001

目的

前提条件

タスク1: Oracle Linux Virtualization Managerホスト・エンジンの設定

まず、セカンダリ・インタフェースを構成します。現在のインタフェース・ステータスは次のようになります(プライマリVNICのプライベートIPアドレスは無視してください)。

[root@olvm-he opc]# ifconfig
    enp0s5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
            inet 10.0.11.189  netmask 255.255.255.0  broadcast 10.0.11.255
            inet6 fe80::17ff:fe10:3ae0  prefixlen 64  scopeid 0x20<link>
            ether 02:00:17:10:3a:e0  txqueuelen 1000  (Ethernet)
            RX packets 10199  bytes 176890375 (168.6 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 6954  bytes 1777090 (1.6 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether 02:00:17:11:02:0c  txqueuelen 1000  (Ethernet)
            RX packets 19  bytes 6498 (6.3 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 166  bytes 28164 (27.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 80  bytes 6320 (6.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 80  bytes 6320 (6.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

VLAN 1000で2番目のインタフェースenp1s0を構成します。

[root@olvm-he opc]# nmcli connection add type ethernet con-name enp1s0 ifname enp1s0 ipv4.method manual ipv4.address '10.0.10.5/24' ipv4.gateway '10.0.10.1'

次に、Oracle Linux Virtualization Managerリリース4.5をインストールします。

  1. ol8_baseos_latestリポジトリを有効にします。

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. Oracle Linux Virtualization Managerリリース4.5パッケージをインストールすると、必要なリポジトリが自動的に有効または無効になります。

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. dnfコマンドを実行して、必要なリポジトリが有効になっていることを確認します。

    [root@olvm-he opc]# dnf clean all
    [root@olvm-he opc]# dnf repolist
    

    次のリポジトリを有効にする必要があります:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (VDSMの場合) ol8_UEKR7
  4. 次のコマンドを実行して、欠落しているリポジトリを有効にします。

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. ホストでUEK R7を実行している場合は、次のコマンドを実行します。

    dnf install -y kernel-uek-modules-extra
    
  6. ovirt-engineコマンドを実行して、マネージャをインストールします。

    dnf install -y ovirt-engine --allowerasing
    
  7. エンジンを構成するには、次のコマンドを実行します。

    engine-setup
    

各構成ステップについて、公式のインストール・ドキュメントで推奨事項を確認できます。詳細は、エンジンの構成オプションを参照してください。

タスク2: Oracle Linux Virtualization Manager Webコンソールへのアクセス

Oracle Linux Virtualization Managerが正常にインストールされると、コンソールにWebアクセス情報が表示されます。

http://olvm-he.olvm.defaultvcn.oraclevcn.com:80/ovirt-engine
https://olvm-he.olvm.defaultvcn.oraclevcn.com:443/ovirt-engine.

ノート:

Oracle Linux Virtualization Managerホスト・エンジンのWebコンソールにアクセスするには、DNSレコードをローカル・オペレーティング・システム(OS)のホスト・ファイルC:\Windows\System32\drivers\etc\hostsに追加します。

<VM-public-IP> olvm-he.olvm.defaultvcn.oraclevcn.com

admin@ovirtユーザー名および構成済パスワードを使用して認証できます。

OLVM Webコンソール

タスク3: Oracle Linuxカーネルベースの仮想マシン(KVM)ホストの設定

最初のKVMホストから開始します。2番目のホストを構成するには、2番目のBMホストにSSHで接続し、同じコマンドを実行する必要があります。VLAN 1000インタフェースを設定するときにMACアドレスとIPアドレスを更新することに注意してください。

  1. KVMホストに2つのセカンダリVNICがあり、VLAN 1000および1001に接続されていることを確認します。

    VNICサマリー

  2. VLAN 1000でセカンダリ VNICを設定します。

    [root@kvm-1 opc]# nmcli connection add type vlan con-name ens340np0.1000 ifname ens340np0.1000 vlan.parent ens340np0 vlan.id 1000
    [root@kvm-1 opc]# nmcli connection modify ens340np0.1000 ethernet.cloned-mac-address 02:00:17:14:AA:20 ipv4.addresses '10.0.10.11/24' ipv4.gateway '10.0.10.1' ipv4.method manual
    

    ノート:

    • 02:00:17:14:AA:20は、最初のKVMホストのVLAN 1000 VNICのMACアドレスです(2番目のKVMホストでインタフェースens340np0.1000を設定する場合は、必ず正しいMACアドレスを使用してください)。
    • 10.0.10.11/24は、VLAN 1000の最初のKVMホストに使用するIPアドレスです。
    • 10.0.10.12/24は、VLAN 1000の2番目のKVMホストに使用するIPアドレスです。
  3. ol8_baseos_latestリポジトリを有効にします。

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Oracle Linux Virtualization Managerリリース4.5パッケージをインストールすると、必要なリポジトリが自動的に有効または無効になります。

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. dnfコマンドを実行して、必要なリポジトリが有効になっていることを確認します。

    [root@kvm-1 opc]# dnf clean all
    [root@kvm-1 opc]# dnf repolist
    

    次のリポジトリを有効にする必要があります:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (VDSMの場合) ol8_UEKR7
  6. 次のコマンドを実行して、欠落しているリポジトリを有効にします。

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. ホストでUEK R7を実行している場合は、次のコマンドを実行します。

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. cockpit Webコンソールをアクティブ化し、ファイアウォール・ポートを開きます。

    [root@kvm-1 opc]# systemctl enable --now cockpit.socket
    [root@kvm-1 opc]# firewall-cmd --permanent --zone=public --add-service=cockpit
    [root@kvm-1 opc]# firewall-cmd --reload
    

タスク4: DNSプライベート・ゾーンの設定

  1. OCIで新しいプライベートDNSゾーンを作成します。詳細は、プライベートDNSゾーンの作成を参照してください。

    • ゾーンにはolvm.demoという名前を付けることができます。
    • VCNのDNSプライベート・ビューにゾーンをアタッチします。
  2. 2つのKVMホストに対して2つのDNSレコードを作成し、変更を公開します。

    A 10.0.10.11 kvm1.olvm.demo
    A 10.0.10.12 kvm2.olvm.demo
    

    DNSレコード

タスク5: Oracle Linux Virtualization ManagerへのKVMホストの追加

  1. Oracle Linux Virtualization Manager Webコンソールに接続します。

  2. VLAN 1000を使用するように ovirtmgmtネットワークを更新します。

    1. 「ネットワーク」および「ネットワーク」に移動します。

    2. ovirtmgmtを選択し、「編集」をクリックします。

    3. 「VLANタグ付けの有効化」を選択し、1000と入力して「OK」をクリックします。

  3. KVMホストを追加します。

    1. 「コンピュート」および「ホスト」に移動します。

    2. 「新規」をクリックして、次の情報を入力します。

      • 名前: kvm1.olvm.demoと入力します。
      • ホスト名: kvm1.olvm.demo.と入力します
      • Authentication: 「SSH Public Key」を選択します。

      KVMホストの/root/.ssh/authorized_keysファイルに公開SSHキーを追加し、既存のコンテンツを削除します。

    3. 「OK」をクリックします

    KVMホスト

タスク6: ブラウザの信頼できるルート認証局リストへのOracle Linux Virtualization Manager認証局(CA)の追加

  1. 次のアドレスからCA証明書をダウンロードします: https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA

  2. ブラウザの「設定」「証明書」に移動し、Oracle Linux Virtualization Manager CAを信頼できるルート認証局のリストにインポートします。

タスク7: 新しいストレージドメインの作成

  1. KVMホストと同じ可用性ドメイン内に新しいOCI Block Volumeを作成します。

    新規ブロック・ボリューム

  2. ブロック・ボリュームを最初のKVMホストにアタッチし、「アクセス」として「読取り/書込み- 共有可能」を選択します。

    ブロック・ボリュームの読取り/書込み数の設定

  3. 2番目のKVMホストに同じブロック・ボリュームをアタッチし、「アクセス」として「読取り/書込み- 共有可能」を選択します。

  4. Oracle Linux Virtualization Managerで新しいストレージ・ドメインを作成します。

    1. Oracle Linux Virtualization Manager Webコンソールに移動し、「ストレージ」および「ドメイン」に移動します。

    2. 「新規ドメイン」をクリックして、次の情報を入力します。

      • 名前: iscsi-datavolと入力します。
      • ストレージタイプ:iSCSI」を選択します。
      • ホスト: kvm1.private.zoneと入力します。
      • アドレス: 169.254.2.2と入力します。
      • ポート: 3260と入力します。
    3. 「すべてログイン」をクリックします。

    4. 検出されたターゲットを展開し、LUN IDの「追加」をクリックします。

    5. 新しいドメインを作成するには、「OK」をクリックします。

タスク8: 新しいオペレーティング・システム・イメージのアップロード

  1. Oracle Linux Virtualization Manager Webコンソールに移動し、「ストレージ」および「ディスク」に移動します。

  2. 「アップロード」および「開始」をクリックします。

  3. OS ISOイメージを指定します。iscsi-datavolストレージドメインを選択し、「Ok」をクリックします。詳細は、Ubuntu Serverの取得を参照してください。

    新規ISOのアップロード

タスク9: オープン仮想ネットワーク(OVN)ネットワーキングの設定

  1. Oracle Linux Virtualization Manager Webコンソールに移動し、「ネットワーク」「ネットワーク」に移動して「新規」をクリックします。

  2. 次の情報を入力します

    • 名前: 「デフォルト」を選択します。
    • 「外部プロバイダに作成」を選択します。
    • 外部プロバイダ: ovirt-provider-ovnと入力します。
    • ネットワーク・ポート・セキュリティ: 「無効」を選択します。

    新しいOVNネットワーク

  3. 「サブネット」を選択し、次の情報で新しいサブネットを作成します。

    • 名前: defaultを選択します。
    • CIDR: 10.0.150.0/24と入力します。
    • ゲートウェイ: 10.0.150.1と入力します。

    ovnサブネット設定

  4. 「OK」をクリックします

タスク10: Oracle Linux Virtualization Managerでの新しい仮想マシンのプロビジョニング

  1. Oracle Linux Virtualization Manager Webコンソールに移動し、「コンピュート」「仮想マシン」に移動して「新規」をクリックします。

  2. 次の情報を入力します

    • 名前: vm1と入力します。
    • 「インスタンス・イメージ」で、「作成」をクリックし、「サイズ」15GBと入力します。
    • nic1: 「デフォルト/デフォルト」を選択します。
  3. 「拡張オプションの表示」をクリックし、次の情報を入力して「OK」をクリックします。

    • ブート・オプション: CDのアタッチ- ubuntu-24.04.1-live-server-amd64.iso

    新規VM

  4. ディスクが作成されるまで待機し、作成されたVMを選択し、「実行」をクリックして、VMが起動するまで待機します。

  5. VMコンソールに接続するには、「コンソール」「コンソール・オプション」NoVNC「OK」「コンソール」の順にクリックします。

    OSのインストールを続行します。段階的に、インターネットは使用できません。

タスク11: オープン仮想ネットワークとOCI VCNの接続

次の図に、Oracle Linux Virtualization Managerで定義する必要がある論理ネットワークの図を示します。

OVNネットワーキングの図

OCI VLAN 1001へのアクセスは、分散ゲートウェイ・ポートを介して提供されます。詳細は、「Open Virtual Network分散ゲートウェイ・ルーターの作成方法」を参照してください。

  1. KVMホストで3番目のVNICを構成します。

    nmcli connection add type vlan con-name ens340np0.1001 ifname ens340np0.1001 vlan.parent ens340np0 vlan.id 1001
       
    nmcli connection modify ens340np0.1001 ethernet.cloned-mac-address <VNIC-MAC> ipv4.method disabled ipv6.method disabled
       
    # replace the <VNIC-MAC> with the MAC address associated with the VNIC connected to VLAN 1001.
    
  2. Oracle Linux Virtualization Managerエンジンから次のコマンドを実行して、現在の設定を表示します。

    [root@olvm-he opc]# ovn-nbctl show
    switch 9364e7ce-87a9-4bc4-b044-b973e3288bcd (ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea)
        port 35bfefc5-8a7e-4f17-b508-587d764875ba
            addresses: ["56:6f:4b:b2:00:01 dynamic"]
    [root@olvm-he opc]# ovn-sbctl show
    Chassis kvm2.olvm.demo
        hostname: kvm-2.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.12"
            options: {csum="true"}
    Chassis kvm1.olvm.demo
        hostname: kvm-1.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.11"
            options: {csum="true"}
        Port_Binding "35bfefc5-8a7e-4f17-b508-587d764875ba"
    
  3. routerという名前の論理ルーターを作成します。

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Oracle Linux Virtualization Manager Defaultブリッジに接続するためのルーター・ポートを作成します。

    [root@olvm-he opc]# ovn-nbctl lrp-add router router-ovirt-default 40:44:00:00:00:03 10.0.150.1/24
    
  5. Defaultブリッジをルーターに接続します。

    [root@olvm-he opc]# ovn-nbctl lsp-add ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea ovirt-default-router
    [root@olvm-he opc]# ovn-nbctl lsp-set-type ovirt-default-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-addresses ovirt-default-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-options ovirt-default-router router-port=router-ovirt-default
    
  6. 次のコマンドを実行して、論理ネットワークを表示します。

    [root@olvm-he opc]# ovn-nbctl show
    switch 9364e7ce-87a9-4bc4-b044-b973e3288bcd (ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea)
        port ovirt-default-router
            type: router
            router-port: router-ovirt-default
        port 35bfefc5-8a7e-4f17-b508-587d764875ba
            addresses: ["56:6f:4b:b2:00:01 dynamic"]
    router b4bd08bc-d8c0-43c8-b27e-83e6e1f3b940 (router)
        port router-ovirt-default
            mac: "40:44:00:00:00:03"
            networks: ["10.0.150.1/24"]
    
  7. publicという名前の論理ブリッジを作成します。

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. providerネットワークを介して、ローカルKVMホスト・ポートを論理ブリッジpublicに接続する準備をします。

    [root@olvm-he opc]# ovn-nbctl lsp-add public ln-public
    [root@olvm-he opc]# ovn-nbctl lsp-set-type ln-public localnet
    [root@olvm-he opc]# ovn-nbctl lsp-set-addresses ln-public unknown
    [root@olvm-he opc]# ovn-nbctl lsp-set-options ln-public network_name=provider
    
  9. 分散ルーター・ポートを使用して、routerpublic論理ブリッジに接続します。

    [root@olvm-he opc]# ovn-nbctl lrp-add router router-public 02:00:17:0F:D1:16 10.0.20.10/24
    [root@olvm-he opc]# ovn-nbctl lsp-add public public-router
    [root@olvm-he opc]# ovn-nbctl lsp-set-type public-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-addresses public-router router
    [root@olvm-he opc]# ovn-nbctl lsp-set-options public-router router-port=router-public
    
  10. ルーター・ポートをスケジュールします(最初のKVMホストの優先度が高い)。

    [root@olvm-he opc]# ovn-nbctl lrp-set-gateway-chassis router-public kvm1.olvm.demo 20
    [root@olvm-he opc]# ovn-nbctl lrp-set-gateway-chassis router-public kvm2.olvm.demo 15
    
  11. ルーターポートの構成を確認します。

    [root@olvm-he opc]# ovn-nbctl lrp-get-gateway-chassis router-public
    router-public-kvm1.olvm.demo    20
    router-public-kvm2.olvm.demo    15
    
  12. OCI VLANゲートウェイを介して0.0.0.0/0のネクスト・ホップを定義します。

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. 次のコマンドを実行して、構成のサマリーを確認します。

    [root@olvm-he opc]# ovn-nbctl show
    switch a7ce3f64-44e2-4a60-993b-b2d230a13212 (public)
        port public-router
            type: router
            router-port: router-public
        port ln-public
            type: localnet
            addresses: ["unknown"]
    switch 9364e7ce-87a9-4bc4-b044-b973e3288bcd (ovirt-Default-72198b26-61c3-4448-b13e-b72bb29f57ea)
        port ovirt-default-router
            type: router
            router-port: router-ovirt-default
        port 35bfefc5-8a7e-4f17-b508-587d764875ba
            addresses: ["56:6f:4b:b2:00:01 dynamic"]
    router b4bd08bc-d8c0-43c8-b27e-83e6e1f3b940 (router)
        port router-ovirt-default
            mac: "40:44:00:00:00:03"
            networks: ["10.0.150.1/24"]
        port router-public
            mac: "02:00:17:0F:D1:16"
            networks: ["10.0.20.10/24"]
            gateway chassis: [kvm1.olvm.demo kvm2.olvm.demo]
    [root@olvm-he opc]# ovn-sbctl show
    Chassis kvm2.olvm.demo
        hostname: kvm-2.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.12"
            options: {csum="true"}
    Chassis kvm1.olvm.demo
        hostname: kvm-1.kvmhosts.defaultvcn.oraclevcn.com
        Encap geneve
            ip: "10.0.10.11"
            options: {csum="true"}
        Port_Binding cr-router-public
        Port_Binding "35bfefc5-8a7e-4f17-b508-587d764875ba"
    

    kvm1.olvm.demoセクションのPort_Binding cr-router-publicで、ルーター・ポートが最初のKVMホストに関連付けられていることを確認できます。

  14. VLAN 1001に接続されているKVMホストのローカル・インタフェースをproviderネットワークにマップします。

    [root@kvm-1 opc]# ovs-vsctl set open . external-ids:ovn-cms-options="enable-chassis-as-gw=true"
    [root@kvm-1 opc]# ovs-vsctl set open . external-ids:ovn-bridge-mappings=provider:br-provider
    [root@kvm-1 opc]# ovs-vsctl --may-exist add-br br-provider
    [root@kvm-1 opc]# ovs-vsctl --may-exist add-port br-provider ens340np0.1001
    [root@kvm-1 opc]# ovs-vsctl set open . external-ids:ovn-chassis-mac-mappings=br-provider:02:00:17:0F:D1:16
        
    [root@kvm-2 opc]# ovs-vsctl set open . external-ids:ovn-cms-options="enable-chassis-as-gw=true"
    [root@kvm-2 opc]# ovs-vsctl set open . external-ids:ovn-bridge-mappings=provider:br-provider
    [root@kvm-2 opc]# ovs-vsctl --may-exist add-br br-provider
    [root@kvm-2 opc]# ovs-vsctl --may-exist add-port br-provider ens340np0.1001
    [root@kvm-2 opc]# ovs-vsctl set open . external-ids:ovn-chassis-mac-mappings=br-provider:02:00:17:08:08:A5
    
  15. OCI VLANは、VLAN接続デバイスに関連付けられたMACアドレスにのみフレームを配信します。

    NATを使用していない場合は、論理ルーターポートの所有者が変更された場合、論理ルーターポートのMACアドレスをアクティブシャーシのMACアドレスと一致するように更新する必要があります。

    次のサービスがこの操作を処理します。Open Virtual Network SBデータベースをシャーシのMACアドレスマッピングで更新します(スイッチオーバーコントローラ機能に必要)。

    [root@olvm-he opc]# ovn-sbctl set chassis kvm1.olvm.demo external_ids:ovn-chassis-mac-mappings=br-provider:02:00:17:0F:D1:16 #replace with the MAC address of the VLAN1001 VNIC on KVM1 host
    [root@olvm-he opc]# ovn-sbctl set chassis kvm2.olvm.demo external_ids:ovn-chassis-mac-mappings=br-provider:02:00:17:08:08:A5 #replace with the MAC address of the the VLAN1001 VNIC on KVM2 host
    
  16. 次の内容で/usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.pyという名前のファイルを作成します。

    import logging
    import os
    import sys
    import traceback
        
    from ovsdbapp.backend.ovs_idl import connection
    from ovsdbapp.backend.ovs_idl import idlutils
    from ovsdbapp.schema.ovn_southbound import impl_idl as impl_sbidl
    from ovsdbapp.schema.ovn_northbound import impl_idl as impl_nbidl
    from ovsdbapp.backend.ovs_idl import event as row_event
    from threading import Event
        
        
    stdout_handler = logging.StreamHandler(stream=sys.stdout)
        
    logging.basicConfig(
        level=logging.INFO, 
        format='%(processName)s %(threadName)s:	%(asctime)s - %(name)s - %(module)s - %(levelname)s - %(message)s',
        handlers = [stdout_handler]
    )
        
    logger = logging.getLogger('main')
        
        
    OVN_MONITORED_LOGICAL_PORT = os.environ.get('OVN_MONITORED_LOGICAL_PORT', '')
        
    if not OVN_MONITORED_LOGICAL_PORT:
        logger.info("No distributed router port name found. Check if the `OVN_MONITORED_LOGICAL_PORT` is defined.")
        sys.exit(1)
        
    conn_sb = "unix:/var/run/ovn/ovnsb_db.sock"
    conn_nb = "unix:/var/run/ovn/ovnnb_db.sock"
        
    class PortBindingEvent(row_event.RowEvent):
        """
        Port_Binding event
        """
        
        def __init__(self, monitored_logical_port):
            table = 'Port_Binding'
            self.monitored_logical_port = monitored_logical_port
            events = (self.ROW_UPDATE)
            super().__init__(events, table, None)
            self.event_name = self.__class__.__name__
        
        def match_fn(self, event, row, old):
            try:
                # Check if the event is for the distributed gateway port.
                if row.logical_port != self.monitored_logical_port:
                    return False
        
                # Check if chassis data is present and the chassis field was modified.
                logger.debug(f"Event match_fn with row: {row.__repr__} | old: {old.__dict__}")
                if len(row.chassis) and old._data.get("chassis", None):
                    logger.info(f"The monitored router port has been allocated to a new chassis: {row.chassis[0].name}")
                    return True
        
            except Exception as e:
                logger.error(traceback.format_exc())
            return False
        
        def run(self, event, row, old):
            # Determine the MAC address that should be used in the new chassis
            chassis_config = api_sb.db_get("Chassis", row.chassis[0].name, "other_config").execute()
            logger.debug(f"current chassis_config: {chassis_config}")
        
            # Fetching the new chassis MAC address
            new_chassis_mac = chassis_config.get("ovn-chassis-mac-mappings", "")[-17:]
            logger.debug(f"New chassis MAC: {new_chassis_mac}")
            if not new_chassis_mac:
                logger.error('The chassis MAC mappings has not been defined in the OVN SB database.')
                logger.error('Please update the chassis MAP mappings using the command:')
                logger.error('ovn-sbctl set chassis <chassis-name> external_ids:ovn-chassis-mac-mappings="<ext-br>:02:00:17:04:C2:99"')
                logger.error('Could not update the distributed routed port MAC address.')
                return
        
            # Fetching the distributed port name
            port_name = row.options.get('distributed-port')
            logger.debug(f"Port Name: {port_name}")
        
            # Updating the router port MAC Address
            api_nb.db_set("Logical_Router_Port", port_name, ("mac", new_chassis_mac)).execute()
            logger.info(f"MAC address for the router port {port_name} has been updated to: {new_chassis_mac}")
        
    class BaseOvnSbIdl(connection.OvsdbIdl):
        def __init__(self, remote, schema, **kwargs):
        
            event = PortBindingEvent(OVN_MONITORED_LOGICAL_PORT)
            self.notify_handler = row_event.RowEventHandler()
            self.notify_handler.watch_event(event)
        
            super(BaseOvnSbIdl, self).__init__(remote, schema, **kwargs)
        
        def notify(self, event, row, updates=None):
            self.notify_handler.notify(event, row, updates)
        
        
    i_sb = BaseOvnSbIdl.from_server(conn_sb, 'OVN_Southbound')
    i_nb = connection.OvsdbIdl.from_server(conn_nb, 'OVN_Northbound')
        
    # The ovsdbapp Connection object
    try:
        c_sb = connection.Connection(idl=i_sb, timeout=3)
        c_nb = connection.Connection(idl=i_nb, timeout=3)
    except Exception as e:
        logger.error(f'Unable to connect to the OVN databases: {traceback.format_exc()}')
        sys.exit(1)
        
    # The OVN_Northbound API implementation object
        
    api_sb = impl_sbidl.OvnSbApiIdlImpl(c_sb)
    api_nb = impl_nbidl.OvnNbApiIdlImpl(c_nb)
        
    logger.info(f'Started monitoring the distributed logical port: {OVN_MONITORED_LOGICAL_PORT}')
        
    Event().wait()
    
  17. 次の内容で/etc/systemd/system/ovn-ha-gateway-controller.serviceという名前のファイルを作成します。

    [Unit]
    Description=oVirt HA Gateway port controller
    Requires=ovsdb-server.service
    After=ovsdb-server.service
        
    [Service]
    Environment="OVN_MONITORED_LOGICAL_PORT=cr-router-port"
    Type=simple
    ExecStart=/usr/libexec/platform-python /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py
    ExecStop=
    Restart=always
    RestartSec=10
        
    [Install]
    WantedBy=multi-user.target
    Enable and start the service.
    
  18. サービスを起動します。

    systemctl enable ovn-ha-gateway-controller.service
    systemctl start ovn-ha-gateway-controller.service
    

タスク12: OCIネットワーキング構成の確定

VM1からのパケットは、OCI VLAN 1001に到達できる必要があります。私たちの計画は、これらのパケットがインターネットに到達できるようにすることです。

  1. 次のルールを使用して、ルート表をVLANにアタッチする必要があります(NATゲートウェイを介して0.0.0.0/0をルーティングします)。

    VLAN RT

  2. インターネットからVM1に向かうトラフィックの場合、CIDR 10.0.150.0/24のルーティングを処理する必要があります。VLAN 1001の外部IPを定義する必要があります。これは、論理ルーター・ポート10.0.20.10に関連付けられたIPアドレスです。

    外部アクセス

    このIPアドレスを定義すると、次のルールで新しいルーティング表が作成されます。(ルート10.0.150.0/24から10.0.20.10)

    OLVM RT

  3. これで、この新しいルートをNATゲートウェイに関連付け、パケットを転送してVM1に到達できるようになりました。

    NAT GWルート関連

    この段階では、VM1からインターネットにアクセスできるようにする必要があります。

    pingテスト

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。