Hinweis:

Oracle Linux Virtualization Manager mit dem Open Virtualization Network Provider auf Oracle Cloud Infrastructure bereitstellen

Einführung

In diesem Tutorial werden wir ein Szenario durchgehen, in dem ein Team die Nutzung einer Flotte von Bare-Metal-Knoten erhöhen möchte, indem es seine vorhandene On-Premises-Umgebung Oracle Linux Virtualization Manager auf Oracle Cloud Infrastructure (OCI) ausdehnt. Durch die Integration der Netzwerkfunktionen von Oracle Cloud in Open Virtual Network (OVN) können Sie die Konnektivität zwischen On-Premise-Ressourcen und bereitgestellten virtuellen Maschinen (VMs) von Oracle Linux Virtualization Manager in OCI über FastConnect überbrücken.

Hinweis: Dieses Tutorial dient nur zu Test- und Evaluierungszwecken. Der Oracle Linux Virtualization Manager-Support für OCI wird derzeit entwickelt und wird für die Verwaltung von OCI-Systemen nicht unterstützt. Die Verwendung von OVN mit Oracle Linux Virtualization Manager befindet sich in der Technologievorschau, was darauf hindeutet, dass sich ein Feature noch in der Entwicklung befindet.

Überblick über die Lösung und Bereitstellung

Lösung – Überblick

Wir benötigen ein neues VCN (10.0.0.0/16) mit den folgenden Ressourcen:

Lösungsarchitektur

Lösungs-Deployment

BM VNIC VLAN 1000

BM VNIC VLAN 1001

Ziele

Voraussetzungen

Aufgabe 1: Hosted Engine von Oracle Linux Virtualization Manager einrichten

Wir beginnen mit der Konfiguration der sekundären Schnittstelle. Der aktuelle Schnittstellenstatus sollte wie folgt aussehen (ignorieren Sie die private IP-Adresse auf der primären VNIC):

[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

Konfigurieren Sie die zweite Schnittstelle enp1s0 in VLAN 1000:

[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'

Installieren Sie jetzt Oracle Linux Virtualization Manager Release 4.5.

  1. Aktivieren Sie das Repository ol8_baseos_latest.

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. Installieren Sie das Oracle Linux Virtualization Manager Release 4.5-Package, mit dem die erforderlichen Repositorys automatisch aktiviert oder deaktiviert werden.

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. Führen Sie den Befehl dnf aus, um zu prüfen, ob die erforderlichen Repositorys aktiviert sind.

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

    Die folgenden Repositorys müssen aktiviert werden:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Für VDSM) ol8_UEKR7
  4. Führen Sie den folgenden Befehl aus, um ein fehlendes Repository zu aktivieren.

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. Führen Sie den folgenden Befehl aus, wenn auf Ihrem Host UEK R7 ausgeführt wird.

    dnf install -y kernel-uek-modules-extra
    
  6. Führen Sie den Befehl ovirt-engine aus, um den Manager zu installieren.

    dnf install -y ovirt-engine --allowerasing
    
  7. Führen Sie den folgenden Befehl aus, um die Engine zu konfigurieren.

    engine-setup
    

Für jeden Konfigurationsschritt können Sie die Empfehlungen in der offiziellen Installationsdokumentation prüfen. Weitere Informationen finden Sie unter Engine-Konfigurationsoptionen.

Aufgabe 2: Auf die Oracle Linux Virtualization Manager-Webkonsole zugreifen

Wenn Oracle Linux Virtualization Manager erfolgreich installiert wurde, sollten die Webzugriffsinformationen in der Konsole angezeigt werden.

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

Hinweise:

Um auf die Webkonsole der gehosteten Oracle Linux Virtualization Manager-Engine zuzugreifen, können Sie der Hostdatei C:\Windows\System32\drivers\etc\hosts des lokalen Betriebssystems (BS) einen DNS-Datensatz hinzufügen.

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

Sie können sich mit dem admin@ovirt-Benutzernamen und dem konfigurierten Kennwort authentifizieren.

OLVM-Webkonsole

Aufgabe 3: Oracle Linux Kernel-basierte Virtual Machine-(KVM-)Hosts einrichten

Wir beginnen mit dem ersten KVM-Host. Um den zweiten Host zu konfigurieren, müssen Sie eine SSH-Verbindung zum zweiten BM-Host herstellen und dieselben Befehle ausführen. Hinweis: Aktualisieren Sie die MAC- und IP-Adressen, wenn Sie die VLAN 1000-Schnittstelle einrichten.

  1. Vergewissern Sie sich, dass der KVM-Host über zwei sekundäre VNICs verfügt, die mit den VLANs 1000 und 1001 verbunden sind.

    VNICs - Übersicht

  2. Richten Sie die sekundäre VNIC in VLAN 1000 ein.

    [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
    

    Hinweis:

    • 02:00:17:14:AA:20 ist die MAC-Adresse der VLAN 1000-VNIC für den ersten KVM-Host (verwenden Sie die korrekte MAC-Adresse, wenn Sie die Schnittstelle ens340np0.1000 auf dem zweiten KVM-Host einrichten).
    • 10.0.10.11/24 ist die IP-Adresse, die wir für den ersten KVM-Host in VLAN 1000 verwenden.
    • 10.0.10.12/24 ist die IP-Adresse, die wir für den zweiten KVM-Host in VLAN 1000 verwenden.
  3. Aktivieren Sie das Repository ol8_baseos_latest.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Installieren Sie das Oracle Linux Virtualization Manager Release 4.5-Package, mit dem die erforderlichen Repositorys automatisch aktiviert oder deaktiviert werden.

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. Führen Sie den Befehl dnf aus, um zu prüfen, ob die erforderlichen Repositorys aktiviert sind.

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

    Die folgenden Repositorys müssen aktiviert werden:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Für VDSM) ol8_UEKR7
  6. Führen Sie den folgenden Befehl aus, um ein fehlendes Repository zu aktivieren.

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. Führen Sie den folgenden Befehl aus, wenn auf Ihrem Host UEK R7 ausgeführt wird.

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. Aktivieren Sie die Cockpit-Webkonsole und öffnen Sie den Firewall-Port.

    [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
    

Aufgabe 4: Private DNS-Zone einrichten

  1. Erstellen Sie eine neue private DNS-Zone in OCI. Weitere Informationen finden Sie unter Erstellen einer privaten DNS-Zone.

    • Die Zone kann den Namen olvm.demo haben.
    • Hängen Sie die Zone an die private DNS-Ansicht des VCN an.
  2. Erstellen Sie zwei DNS-Datensätze für die beiden KVM-Hosts, und veröffentlichen Sie die Änderungen.

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

    DNS-Datensätze

Aufgabe 5: KVM-Hosts zu Oracle Linux Virtualization Manager hinzufügen

  1. Stellen Sie eine Verbindung zur Oracle Linux Virtualization Manager-Webkonsole her.

  2. Aktualisieren Sie das Netzwerk ovirtmgmt, um VLAN 1000 zu verwenden.

    1. Navigieren Sie zu Network und Networks.

    2. Wählen Sie ovirtmgmt, und klicken Sie auf Bearbeiten.

    3. Wählen Sie VLAN-Tagging aktivieren aus, geben Sie 1000 ein, und klicken Sie auf OK.

  3. Fügen Sie die KVM-Hosts hinzu.

    1. Navigieren Sie zu Compute und Hosts.

    2. Klicken Sie auf Neu, und geben Sie die folgenden Informationen ein.

      • Name: Geben Sie kvm1.olvm.demo ein.
      • Hostname: Geben Sie kvm1.olvm.demo. ein.
      • Authentifizierung: Wählen Sie SSH-Public Key aus.

      Fügen Sie den öffentlichen SSH-Schlüssel zur Datei /root/.ssh/authorized_keys auf dem KVM-Host hinzu, und entfernen Sie den vorhandenen Inhalt.

    3. Klicken Sie auf OK.

    KVM-Hosts

Aufgabe 6: Oracle Linux Virtualization Manager Certificate Authoritys (CA) zur Liste der vertrauenswürdigen Root Certificate Authoritys des Browsers hinzufügen

  1. Laden Sie das CA-Zertifikat unter der folgenden Adresse herunter: https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA.

  2. Navigieren Sie zum Browser Einstellungen, Zertifikate, und importieren Sie die Oracle Linux Virtualization Manager-CA in die Liste der vertrauenswürdigen Root Certificate Authoritys.

Aufgabe 7: Neue Speicherdomain erstellen

  1. Erstellen Sie ein neues OCI Block Volume innerhalb derselben Availability-Domain wie die KVM-Hosts.

    neues Block-Volume

  2. Hängen Sie das Block-Volume an den ersten KVM-Host an, und wählen Sie Lesen/Schreiben - gemeinsam nutzbar als Zugriff aus.

    Block-Volume mit Lese-/Schreibzugriff festlegen - viele

  3. Hängen Sie dasselbe Block-Volume an den zweiten KVM-Host an, und wählen Sie Lesen/Schreiben - gemeinsam nutzbar als Zugriff aus.

  4. Erstellen Sie eine neue Speicherdomain in Oracle Linux Virtualization Manager.

    1. Navigieren Sie zur Oracle Linux Virtualization Manager-Webkonsole, und navigieren Sie zu Speicher und Domains.

    2. Klicken Sie auf Neue Domain, und geben Sie die folgenden Informationen ein.

      • Name: Geben Sie iscsi-datavol ein.
      • Speichertyp: Wählen Sie iSCSI aus.
      • Host: Geben Sie kvm1.private.zone ein.
      • Adresse: Geben Sie 169.254.2.2 ein.
      • Port: Geben Sie 3260 ein.
    3. Klicken Sie auf Alle anmelden.

    4. Blenden Sie das erkannte Ziel ein, und klicken Sie für die Lun-ID auf Hinzufügen.

    5. Klicken Sie auf Ok, um die neue Domain zu erstellen.

Aufgabe 8: Neues Betriebssystemimage hochladen

  1. Gehen Sie zur Oracle Linux Virtualization Manager-Webkonsole, und navigieren Sie zu Speicher und Datenträger.

  2. Klicken Sie auf Hochladen und Start.

  3. Geben Sie das BS-ISO-Image an. Wählen Sie die Speicherdomain iscsi-datavol aus, und klicken Sie auf OK. Weitere Informationen finden Sie unter Ubuntu-Server abrufen.

    Neue ISO hochladen

Aufgabe 9: Open Virtual Network-(OVN-)Networking einrichten

  1. Gehen Sie zur Oracle Linux Virtualization Manager-Webkonsole, navigieren Sie zu Network, Networks und klicken Sie auf New.

  2. Geben Sie folgende Informationen ein.

    • Name: Wählen Sie Standard aus.
    • Wählen Sie Erstellen bei externem Provider aus.
    • Externer Provider: Geben Sie ovirt-provider-ovn ein.
    • Netzwerkportsicherheit: Wählen Sie Deaktiviert.

    neues OVN-Netzwerk

  3. Wählen Sie Subnetze, und erstellen Sie ein neues Subnetz mit den folgenden Informationen.

    • Name: Wählen Sie default aus.
    • CIDR: Geben Sie 10.0.150.0/24 ein.
    • Gateway: Geben Sie 10.0.150.1 ein.

    OVN-Subnetzeinstellungen

  4. Klicken Sie auf OK.

Aufgabe 10: Neue virtuelle Maschine in Oracle Linux Virtualization Manager bereitstellen

  1. Navigieren Sie zur Oracle Linux Virtualization Manager-Webkonsole, navigieren Sie zu Compute, Virtuelle Maschinen, und klicken Sie auf Neu.

  2. Geben Sie folgende Informationen ein.

    • Name: Geben Sie vm1 ein.
    • Klicken Sie unter Instanzimages auf Erstellen, und geben Sie Größe als 15 GB ein.
    • nic1: Wählen Sie Standard/Standard aus.
  3. Klicken Sie auf Erweiterte Optionen anzeigen, geben Sie die folgenden Informationen ein, und klicken Sie auf OK.

    • Bootoptionen: Hängen Sie die CD an: ubuntu-24.04.1-live-server-amd64.iso.

    neue VM

  4. Warten Sie, bis der Datenträger erstellt wurde, wählen Sie die erstellte VM aus, klicken Sie auf Ausführen, und warten Sie, bis die VM gestartet wurde.

  5. Um eine Verbindung zur VM-Konsole herzustellen, navigieren Sie zu Konsole, Konsolenoptionen, wählen Sie NoVNC aus, klicken Sie auf OK und dann auf Konsole.

    Fahren Sie mit der Installation des Betriebssystems fort. Beachten Sie, dass das Internet in der Phase nicht verfügbar ist.

Aufgabe 11: Offenes virtuelles Netzwerk mit OCI-VCN verbinden

In der folgenden Abbildung sehen Sie eine Abbildung des logischen Netzwerks, das wir in Oracle Linux Virtualization Manager definieren müssen.

OVN-Netzwerkdiagramm

Der Zugriff auf das OCI-VLAN 1001 wird über einen verteilten Gatewayport bereitgestellt. Weitere Informationen finden Sie unter How to create an Open Virtual Network Distributed Gateway Router.

  1. Konfigurieren Sie die dritten VNICs auf den KVM-Hosts.

    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. Führen Sie die folgenden Befehle von der Oracle Linux Virtualization Manager-Engine aus, um das aktuelle Setup anzuzeigen.

    [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. Erstellen Sie den logischen Router namens router.

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Erstellen Sie einen Routerport für die Verbindung zur Oracle Linux Virtualization Manager-Bridge 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. Verbinden Sie die Default-Bridge mit dem Router.

    [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. Führen Sie den folgenden Befehl aus, um das logische Netzwerk anzuzeigen.

    [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. Erstellen Sie die logische Bridge namens public.

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. Bereiten Sie die Verbindung des lokalen KVM-Hostports mit der logischen Bridge public über das Netzwerk provider vor.

    [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. Verbinden Sie die router mit den logischen Bridges public über einen verteilten Routerport.

    [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. Planen Sie den Routerport (höhere Priorität für den ersten KVM-Host).

    [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. Prüfen Sie die Konfiguration des Routerports.

    [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. Definieren Sie den nächsten Hop für 0.0.0.0/0 über das OCI-VLAN-Gateway.

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. Führen Sie den folgenden Befehl aus, um die Konfigurationsübersicht anzuzeigen.

    [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"
    

    Prüfen Sie, ob der Routerport mit dem ersten KVM-Host verknüpft ist, indem Sie im Abschnitt kvm1.olvm.demo Port_Binding cr-router-public anzeigen.

  14. Ordnen Sie lokale Schnittstellen der KVM-Hosts, die mit VLAN 1001 verbunden sind, dem Netzwerk provider zu.

    [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. Das OCI-VLAN stellt Frames nur an die MAC-Adressen bereit, die mit den VLAN-verbundenen Geräten verknüpft sind.

    Wenn wir NAT nicht verwenden, müssen wir für den Fall, dass der Eigentümer des logischen Routerports geändert wird, die MAC-Adresse des logischen Routerports entsprechend der MAC-Adresse des aktiven Chassis aktualisieren.

    Der folgende Service kümmert sich um diesen Vorgang. Aktualisieren Sie die Open Virtual Network SB-Datenbank mit den MAC-Adresszuordnungen für das Gehäuse (erforderlich für die Switchover-Controllerfunktion).

    [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. Erstellen Sie die Datei mit dem Namen /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py mit dem folgenden Inhalt.

    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. Erstellen Sie die Datei mit dem Namen /etc/systemd/system/ovn-ha-gateway-controller.service mit dem folgenden Inhalt.

    [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. Starten Sie den Service.

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

Aufgabe 12: OCI Networking-Konfiguration abschließen.

Die Pakete von VM1 sollten OCI VLAN 1001 erreichen können. Unser Plan ist es, diesen Paketen zu ermöglichen, das Internet zu erreichen.

  1. Ordnen Sie dem VLAN eine Routentabelle mit der Regel zu: (Route 0.0.0.0/0 über das NAT-Gateway).

    VLAN RT

  2. Für den Traffic, der vom Internet in Richtung VM1 zurückkehrt, müssen wir das Routing für CIDR 10.0.150.0/24 verarbeiten. Wir müssen eine externe IP für VLAN 1001 definieren. Dies ist die IP-Adresse, die mit dem logischen Routerport 10.0.20.10 verknüpft ist.

    externer Zugriff

    Wenn diese IP-Adresse definiert ist, erstellen wir eine neue Routing-Tabelle mit der Regel: (Route 10.0.150.0/24 bis 10.0.20.10)

    OLVM RT

  3. Jetzt können wir diese neue Route mit dem NAT-Gateway verknüpfen und die Pakete weiterleiten, um zu VM1 zu gelangen.

    NAT GW-Routenzuordnung

    Zu diesem Zeitpunkt sollten wir in der Lage sein, das Internet von der VM1 zu erreichen.

    Ping-Test

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.