Nota

Implementa Oracle Linux Virtualization Manager utilizzando Open Virtualization Network Provider su Oracle Cloud Infrastructure

Introduzione

In questa esercitazione verrà illustrato uno scenario in cui un team mira ad aumentare l'utilizzo di una flotta di nodi Bare Metal estendendo il proprio ambiente Oracle Linux Virtualization Manager on-premise esistente in Oracle Cloud Infrastructure (OCI). Integrando le funzionalità di rete di Oracle Cloud con Open Virtual Network (OVN), puoi collegare la connettività tra le risorse on-premise e le virtual machine (VM) distribuite da Oracle Linux Virtualization Manager in OCI tramite FastConnect.

Nota: questa esercitazione viene eseguita solo a scopo di test e valutazione. Il supporto di Oracle Linux Virtualization Manager per OCI è in fase di sviluppo e in realtà non è supportato per la gestione dei sistemi OCI. L'uso di OVN con Oracle Linux Virtualization Manager è in anteprima tecnologica, a indicare che una funzione è ancora in fase di sviluppo.

Panoramica e distribuzione della soluzione

Panoramica della soluzione

Avremo bisogno di una nuova VCN (10.0.0.0/16) con le seguenti risorse:

Architettura della soluzione

Distribuzione della soluzione

BM VNIC VLAN 1000

BM VNIC VLAN 1001

Obiettivi

Prerequisiti

Task 1: impostare il motore hosted di Oracle Linux Virtualization Manager

Inizieremo configurando l'interfaccia secondaria. Lo stato corrente dell'interfaccia dovrebbe essere simile (ignorare l'indirizzo IP privato sulla VNIC primaria):

[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

Configurare la seconda interfaccia, enp1s0, nella 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'

Ora installa Oracle Linux Virtualization Manager Release 4.5.

  1. Abilitare il repository ol8_baseos_latest.

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. Installare il pacchetto Oracle Linux Virtualization Manager Release 4.5 che abilita o disabilita automaticamente i repository richiesti.

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. Eseguire il comando dnf per verificare che i repository richiesti siano abilitati.

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

    È necessario abilitare i seguenti repository:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Per VDSM) ol8_UEKR7
  4. Eseguire il comando seguente per abilitare qualsiasi repository mancante.

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. Eseguire il comando seguente se l'host esegue UEK R7.

    dnf install -y kernel-uek-modules-extra
    
  6. Eseguire il comando ovirt-engine per installare il manager.

    dnf install -y ovirt-engine --allowerasing
    
  7. Per configurare il motore, eseguire il comando riportato di seguito.

    engine-setup
    

Per ogni fase di configurazione, è possibile consultare i suggerimenti riportati nella documentazione ufficiale di installazione. Per ulteriori informazioni, vedere Opzioni di configurazione del motore.

Task 2: accedere alla console Web di Oracle Linux Virtualization Manager

Se Oracle Linux Virtualization Manager viene installato correttamente, è necessario visualizzare le informazioni di accesso Web nella console.

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

Note

Per accedere alla console Web del motore in hosting di Oracle Linux Virtualization Manager, è possibile aggiungere un record DNS al file host del sistema operativo locale C:\Windows\System32\drivers\etc\hosts.

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

È possibile eseguire l'autenticazione con il nome utente admin@ovirt e la password configurata.

Console Web OLVM

Task 3: impostare gli host KVM (Kernel-based Virtual Machine) Oracle Linux

Stiamo iniziando con il primo host KVM. Per configurare il secondo host, è necessario eseguire SSH nel secondo host BM ed eseguire gli stessi comandi. Tenere presente che per aggiornare gli indirizzi MAC e IP quando si imposta l'interfaccia VLAN 1000.

  1. Verificare che l'host KVM disponga di due VNIC secondarie connesse alle VLAN 1000 e 1001.

    Riepilogo delle VNIC

  2. Impostare la VNIC secondaria nella VLAN 1000.

    [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
    

    Nota:

    • 02:00:17:14:AA:20 è l'indirizzo MAC della VNIC VLAN 1000 per il primo host KVM (assicurarsi di utilizzare l'indirizzo MAC corretto quando si imposta l'interfaccia ens340np0.1000 sul secondo host KVM).
    • 10.0.10.11/24 è l'indirizzo IP che verrà utilizzato per il primo host KVM nella VLAN 1000.
    • 10.0.10.12/24 è l'indirizzo IP che verrà utilizzato per il secondo host KVM nella VLAN 1000.
  3. Abilitare il repository ol8_baseos_latest.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Installare il pacchetto Oracle Linux Virtualization Manager Release 4.5 che abilita o disabilita automaticamente i repository richiesti.

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. Eseguire il comando dnf per verificare che i repository richiesti siano abilitati.

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

    È necessario abilitare i seguenti repository:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Per VDSM) ol8_UEKR7
  6. Eseguire il comando seguente per abilitare qualsiasi repository mancante.

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. Eseguire il comando seguente se l'host esegue UEK R7.

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. Attivare la console web della cabina di pilotaggio e aprire la porta del firewall.

    [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
    

Task 4: impostare la zona privata DNS

  1. Crea una nuova zona DNS privata in OCI. Per ulteriori informazioni, vedere Creazione di una zona DNS privata.

    • La zona può essere denominata olvm.demo.
    • Collega la zona alla vista privata DNS della VCN.
  2. Creare due record DNS per i due host KVM e pubblicare le modifiche.

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

    Record DNS

Task 5: aggiungere gli host KVM a Oracle Linux Virtualization Manager

  1. Connettersi alla console Web di Oracle Linux Virtualization Manager.

  2. Aggiornare la rete ovirtmgmt per usare la VLAN 1000.

    1. Passare a Rete e Rete.

    2. Selezionare ovirtmgmt e fare clic su Modifica.

    3. Selezionare Abilita applicazione tag VLAN, immettere 1000 e fare clic su OK.

  3. Aggiungere gli host KVM.

    1. Passare a Compute e Host.

    2. Fare clic su Nuovo e immettere le informazioni seguenti.

      • Nome: immettere kvm1.olvm.demo.
      • Nome host: immettere kvm1.olvm.demo.
      • Autenticazione: selezionare Chiave pubblica SSH.

      Aggiungere la chiave SSH pubblica al file /root/.ssh/authorized_keys nell'host KVM e rimuovere il contenuto esistente.

    3. Fare clic su OK.

    Host KVM

Task 6: aggiungere le autorità di certificazione (CA) di Oracle Linux Virtualization Manager all'elenco delle autorità di certificazione radice attendibili del browser

  1. Scaricare il certificato CA dal seguente indirizzo: https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA.

  2. Passare a Impostazioni, Certificati del browser e importare la CA di Oracle Linux Virtualization Manager nell'elenco delle autorità di certificazione radice attendibili.

Task 7: Creare un nuovo dominio di storage

  1. Crea un nuovo volume a blocchi OCI nello stesso dominio di disponibilità degli host KVM.

    nuovo volume a blocchi

  2. Collegare il volume a blocchi al primo host KVM e selezionare Lettura/scrittura - Condivisibile come Accesso.

    imposta volume a blocchi in lettura/scrittura molti

  3. Collegare lo stesso volume a blocchi al secondo host KVM e selezionare Lettura/Scrittura - Condivisibile come Accesso.

  4. Crea un nuovo dominio di storage in Oracle Linux Virtualization Manager.

    1. Accedere alla console Web di Oracle Linux Virtualization Manager, passare a Storage e Domains.

    2. Fare clic su Nuovo dominio e immettere le informazioni seguenti.

      • Nome: immettere iscsi-datavol.
      • Tipo di memorizzazione: selezionare iSCSI.
      • Host: immettere kvm1.private.zone.
      • Indirizzo: immettere 169.254.2.2.
      • Porta: immettere 3260.
    3. Fare clic su Login All.

    4. Espandere la destinazione trovata e fare clic su Aggiungi per l'ID Lun.

    5. Fare clic su OK per creare il nuovo dominio.

Task 8: Carica una nuova immagine del sistema operativo

  1. Accedere alla console Web di Oracle Linux Virtualization Manager, passare a Storage e Dischi.

  2. Fare clic su Carica e Avvia.

  3. Fornire l'immagine ISO del sistema operativo. Selezionare il dominio di memorizzazione iscsi-datavol e fare clic su OK. Per ulteriori informazioni, vedere Ottenere il server Ubuntu.

    Carica nuovo ISO

Task 9: Impostazione della rete OVN (Open Virtual Network)

  1. Accedere alla console Web di Oracle Linux Virtualization Manager, accedere a Network, Networks e fare clic su Nuovo.

  2. Immettere le informazioni riportate di seguito.

    • Nome: selezionare Predefinito.
    • Selezionare Crea su provider esterno.
    • Provider esterno: immettere ovirt-provider-ovn.
    • Network Port Security: selezionare Disabled.

    nuova rete OVN

  3. Selezionare Subnet e creare una nuova subnet con le informazioni riportate di seguito.

    • Nome: selezionare predefinito.
    • CIDR: immettere 10.0.150.0/24.
    • Gateway: Immettere 10.0.150.1.

    impostazioni della sottorete ovn

  4. Fare clic su OK.

Task 10: Provisioning di una nuova virtual machine in Oracle Linux Virtualization Manager

  1. Passare alla console Web di Oracle Linux Virtualization Manager, accedere a Compute, Virtual Machine e fare clic su Nuovo.

  2. Immettere le informazioni riportate di seguito.

    • Nome: immettere vm1.
    • In Immagini istanza, fare clic su Crea e immettere Dimensione per 15 GB.
    • nic1: selezionare Predefinito/Predefinito.
  3. Fare clic su Mostra opzioni avanzate, immettere le informazioni riportate di seguito e fare clic su OK.

    • Opzioni di boot: collegare il CD - ubuntu-24.04.1-live-server-amd64.iso.

    nuova VM

  4. Attendere la creazione del disco, selezionare la VM creata, fare clic su Esegui e attendere l'avvio della VM.

  5. Per connettersi alla console VM, passare a Console, Opzioni console, selezionare NoVNC, fare clic su OK, quindi fare clic su Console.

    Procedere con l'installazione del sistema operativo, tenere presente che in questa fase Internet non è disponibile.

Task 11: connettere la rete virtuale aperta alla VCN OCI

Nella seguente immagine è possibile visualizzare un'illustrazione della rete logica da definire in Oracle Linux Virtualization Manager.

Diagramma di rete OVN

L'accesso alla VLAN 1001 OCI viene fornito tramite una porta gateway distribuita. Per ulteriori informazioni, vedere Come creare un router gateway distribuito Open Virtual Network.

  1. Configurare le terze VNIC sugli host KVM.

    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. Eseguire i comandi seguenti dal motore di Oracle Linux Virtualization Manager per visualizzare la configurazione corrente.

    [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. Creare il router logico denominato router.

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Creare una porta router per la connessione al bridge Default di Oracle Linux Virtualization Manager.

    [root@olvm-he opc]# ovn-nbctl lrp-add router router-ovirt-default 40:44:00:00:00:03 10.0.150.1/24
    
  5. Collegare il bridge Default al 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. Eseguire il comando seguente per visualizzare la rete logica.

    [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. Creare il bridge logico denominato public.

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. Prepararsi a connettere la porta host KVM locale al bridge logico public tramite la rete provider.

    [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. Connettere router ai bridge logici public utilizzando una porta router distribuita.

    [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. Pianificare la porta del router (priorità più alta per il primo host 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. Controllare la configurazione della porta del router.

    [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. Definire l'hop successivo per 0.0.0.0/0 tramite il gateway VLAN OCI.

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. Eseguire il comando seguente per visualizzare il riepilogo della configurazione.

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

    Per verificare se la porta del router è associata al primo host KVM, vedere Port_Binding cr-router-public nella sezione kvm1.olvm.demo.

  14. Eseguire il mapping delle interfacce locali degli host KVM connessi alla VLAN 1001 alla rete 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. La VLAN OCI distribuisce i frame solo agli indirizzi MAC associati ai dispositivi connessi alla VLAN.

    Se non si utilizza NAT, nel caso in cui il proprietario della porta del router logico venga modificato, è necessario aggiornare l'indirizzo MAC della porta del router logico in modo che corrisponda all'indirizzo MAC dello chassis attivo.

    Il seguente servizio si occupa di questa operazione. Aggiornare il database Open Virtual Network SB con i mapping degli indirizzi MAC dello chassis (obbligatorio per la funzionalità del controller di switchover).

    [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. Creare il file denominato /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py con il contenuto seguente.

    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. Creare il file denominato /etc/systemd/system/ovn-ha-gateway-controller.service con il contenuto seguente.

    [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. Avviare il servizio.

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

Task 12: finalizzare la configurazione di networking OCI.

I pacchetti di VM1 devono essere in grado di raggiungere la VLAN 1001 OCI. Il nostro piano è quello di consentire a questi pacchetti di raggiungere Internet.

  1. È necessario collegare una tabella di instradamento alla VLAN con la regola: (Instradare 0.0.0.0/0 tramite gateway NAT).

    RT PIANO

  2. Per il traffico di ritorno da Internet verso il VM1, dobbiamo gestire l'instradamento per CIDR 10.0.150.0/24. È necessario definire un IP esterno per la VLAN 1001. Si tratta dell'indirizzo IP associato alla porta del router logico, 10.0.20.10.

    accesso esterno

    Con questo indirizzo IP definito, creeremo una nuova tabella di routing con la regola: (Percorso da 10.0.150.0/24 a 10.0.20.10)

    TASSO OLVM

  3. Ora possiamo associare questo nuovo percorso al gateway NAT e inoltrare i pacchetti per raggiungere VM1.

    Associazione percorso GW NAT

    In questa fase dovremmo essere in grado di raggiungere Internet dal VM1.

    test ping

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.