Note:

Despliegue de Oracle Linux Virtualization Manager mediante el proveedor de red de virtualización abierta en Oracle Cloud Infrastructure

Introducción

En este tutorial, analizaremos un escenario en el que un equipo tiene como objetivo aumentar la utilización de un conjunto de nodos con hardware dedicado mediante la ampliación de su entorno local existente de Oracle Linux Virtualization Manager a Oracle Cloud Infrastructure (OCI). Al integrar las capacidades de red de Oracle Cloud con Open Virtual Network (OVN), puede conectar la conectividad entre los recursos locales y las máquinas virtuales (VM) desplegadas de Oracle Linux Virtualization Manager en OCI mediante FastConnect.

Nota: Este tutorial es solo para fines de prueba y evaluación; el soporte de Oracle Linux Virtualization Manager para OCI está en desarrollo y, en realidad, no está soportado para gestionar sistemas OCI. El uso de OVN con Oracle Linux Virtualization Manager está en vista previa de tecnología, lo que indica que una función aún está en desarrollo.

Visión General e Despliegue de Soluciones

Visión General de la Solución

Necesitaremos una nueva VCN (10.0.0.0/16) con los siguientes recursos:

Arquitectura de la solución

Despliegue de la solución

BM VNIC VLAN 1000

BM VNIC VLAN 1001

Objetivos

Requisitos

Tarea 1: Configuración del motor alojado de Oracle Linux Virtualization Manager

Comenzaremos configurando la interfaz secundaria. El estado de la interfaz actual debe ser similar (ignore la dirección IP privada en la 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

Configure la segunda interfaz, enp1s0, en 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'

Ahora, instale Oracle Linux Virtualization Manager versión 4.5.

  1. Active el repositorio ol8_baseos_latest.

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. Instale el paquete Oracle Linux Virtualization Manager versión 4.5, que activa o desactiva automáticamente los repositorios necesarios.

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. Ejecute el comando dnf para verificar que los repositorios necesarios estén activados.

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

    Debe activar los siguientes repositorios:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Para VDSM) ol8_UEKR7
  4. Ejecute el siguiente comando para activar cualquier repositorio que falte.

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. Ejecute el siguiente comando si el host está ejecutando UEK R7.

    dnf install -y kernel-uek-modules-extra
    
  6. Ejecute el comando ovirt-engine para instalar el gestor.

    dnf install -y ovirt-engine --allowerasing
    
  7. Ejecute el siguiente comando para configurar el motor.

    engine-setup
    

Para cada paso de configuración, puede consultar las recomendaciones de la documentación de instalación oficial. Para obtener más información, consulte Opciones de Configuración del Motor.

Tarea 2: Acceso a la consola web de Oracle Linux Virtualization Manager

Si Oracle Linux Virtualization Manager se instala correctamente, debe ver la información de acceso web que se muestra en la consola.

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

Notas:

Para acceder a la consola web del motor alojado de Oracle Linux Virtualization Manager, puede agregar un registro de DNS al archivo de hosts del sistema operativo local C:\Windows\System32\drivers\etc\hosts.

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

Puede autenticarse con el nombre de usuario admin@ovirt y la contraseña configurada.

Consola web de OLVM

Tarea 3: Configuración de los hosts de máquina virtual basada en núcleo (KVM) de Oracle Linux

Comenzamos con el primer host de KVM. Para configurar el segundo host, debe utilizar SSH en el segundo host con hardware dedicado y ejecutar los mismos comandos. Nota para actualizar las direcciones MAC e IP al configurar la interfaz VLAN 1000.

  1. Confirme que el host de KVM tenga dos VNIC secundarias conectadas a las VLAN 1000 y 1001.

    Resumen de VNIC

  2. Configure la VNIC secundaria en la 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 es la dirección MAC de la VNIC de VLAN 1000 para el primer host de KVM (asegúrese de utilizar la dirección MAC correcta al configurar la interfaz ens340np0.1000 en el segundo host de KVM).
    • 10.0.10.11/24 es la dirección IP que utilizaremos para el primer host de KVM en la VLAN 1000.
    • 10.0.10.12/24 es la dirección IP que utilizaremos para el segundo host KVM en la VLAN 1000.
  3. Active el repositorio ol8_baseos_latest.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Instale el paquete Oracle Linux Virtualization Manager versión 4.5, que activa o desactiva automáticamente los repositorios necesarios.

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. Ejecute el comando dnf para verificar que los repositorios necesarios estén activados.

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

    Debe activar los siguientes repositorios:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Para VDSM) ol8_UEKR7
  6. Ejecute el siguiente comando para activar cualquier repositorio que falte.

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. Ejecute el siguiente comando si el host está ejecutando UEK R7.

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. Active la consola web de la cabina y abra el puerto de 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
    

Tarea 4: Configuración de la zona privada de DNS

  1. Cree una nueva zona de DNS privada en OCI. Para obtener más información, consulte Creación de una zona de DNS privada.

    • La zona se puede denominar olvm.demo.
    • Asocie la zona a la vista privada de DNS de la VCN.
  2. Cree dos registros DNS para los dos hosts de KVM y publique los cambios.

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

    Registros de DNS

Tarea 5: Adición de los hosts de KVM a Oracle Linux Virtualization Manager

  1. Conéctese a la consola web de Oracle Linux Virtualization Manager.

  2. Actualice la red ovirtmgmt para utilizar VLAN 1000.

    1. Navegue hasta Network y Networks.

    2. Seleccione ovirtmgmt y haga clic en Editar.

    3. Seleccione Activar etiquetado VLAN, introduzca 1000 y haga clic en Aceptar.

  3. Agregue los hosts de KVM.

    1. Vaya a Compute y Hosts.

    2. Haga clic en Nuevo e introduzca la siguiente información.

      • Nombre: introduzca kvm1.olvm.demo.
      • Nombre de host: introduzca kvm1.olvm.demo.
      • Autenticación: seleccione Clave Pública SSH.

      Agregue la clave SSH pública al archivo /root/.ssh/authorized_keys en el host de KVM y elimine el contenido existente.

    3. Haga clic en Aceptar.

    Hosts de KVM

Tarea 6: Adición de las autoridades de certificación (CA) de Oracle Linux Virtualization Manager a la lista de autoridades de certificación raíz de confianza del explorador

  1. Descargue el certificado de CA desde la siguiente dirección: https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA.

  2. Vaya al explorador Settings, Certificates e importe la autoridad de certificación de Oracle Linux Virtualization Manager a la lista de autoridades de certificación raíz de confianza.

Tarea 7: Creación de un nuevo dominio de almacenamiento

  1. Cree un nuevo volumen en bloque de OCI en el mismo dominio de disponibilidad que los hosts de KVM.

    nuevo volumen en bloque

  2. Asocie el volumen en bloque al primer host de KVM y seleccione Read/write - shareable (Lectura/escritura - Compartible) como Access (Acceso).

    definir muchos de lectura/escritura de volumen en bloque

  3. Asocie el mismo volumen en bloque al segundo host de KVM y seleccione Read/Write - shareable (Lectura/escritura - Compartible) como Access (Acceso).

  4. Cree un nuevo dominio de almacenamiento en Oracle Linux Virtualization Manager.

    1. Vaya a la consola web de Oracle Linux Virtualization Manager y vaya a Storage y Domains.

    2. Haga clic en Nuevo Dominio e introduzca la siguiente información.

      • Nombre: introduzca iscsi-datavol.
      • Storage Type: seleccione iSCSI.
      • Host: introduzca kvm1.private.zone.
      • Dirección: introduzca 169.254.2.2.
      • Puerto: introduzca 3260.
    3. Haga clic en Conectar a todo.

    4. Amplíe el destino detectado y haga clic en Agregar para el ID de LUN.

    5. Haga clic en Aceptar para crear el nuevo dominio.

Tarea 8: Carga de una nueva imagen del sistema operativo

  1. Vaya a la consola web de Oracle Linux Virtualization Manager y vaya a Storage y Disks.

  2. Haga clic en Cargar e Iniciar.

  3. Proporcione la imagen ISO del sistema operativo. Seleccione el dominio de almacenamiento iscsi-datavol y haga clic en Aceptar. Para obtener más información, consulte Get Ubuntu Server.

    cargar nueva ISO

Tarea 9: Configuración de redes virtuales abiertas (OVN)

  1. Vaya a la consola web de Oracle Linux Virtualization Manager, vaya a Network, Networks y haga clic en New (Nuevo).

  2. Introduzca la siguiente información.

    • Nombre: seleccione Valor predeterminado.
    • Seleccione Crear en proveedor externo.
    • Proveedor externo: introduzca ovirt-provider-ovn.
    • Network Port Security: seleccione Disabled.

    nueva red OVN

  3. Seleccione Subredes y cree una nueva subred con la siguiente información.

    • Nombre: seleccione predeterminado.
    • CIDR: introduzca 10.0.150.0/24.
    • Gateway: introduzca 10.0.150.1.

    Configuración de subred de ovn

  4. Haga clic en Aceptar.

Tarea 10: Aprovisionamiento de una nueva máquina virtual en Oracle Linux Virtualization Manager

  1. Vaya a la consola web de Oracle Linux Virtualization Manager, vaya a Recursos informáticos, Máquinas virtuales y haga clic en Nuevo.

  2. Introduzca la siguiente información.

    • Nombre: introduzca vm1.
    • En Imágenes de instancia, haga clic en Crear e introduzca Tamaño para que sea 15 GB.
    • nic1: seleccione Por Defecto/Por Defecto.
  3. Haga clic en Mostrar opciones avanzadas, introduzca la siguiente información y haga clic en Aceptar.

    • Opciones de inicio: Conecte el CD: ubuntu-24.04.1-live-server-amd64.iso.

    nueva VM

  4. Espere a que se cree el disco, seleccione la VM creada, haga clic en Run (Ejecutar) y espere a que se inicie la VM.

  5. Para conectarse a la consola de VM, vaya a Consola, Opciones de consola, seleccione NoVNC, haga clic en Aceptar y, a continuación, haga clic en Consola.

    Continúe con la instalación del sistema operativo. Tenga en cuenta que, en la etapa, Internet no está disponible.

Tarea 11: Conexión de la red virtual abierta a la VCN de OCI

En la siguiente imagen, puede ver una ilustración de la red lógica que necesitamos definir en Oracle Linux Virtualization Manager.

Diagrama de red de OVN

El acceso a la VLAN 1001 de OCI se proporciona mediante un puerto de gateway distribuido. Para obtener más información, consulte How to create an Open Virtual Network Distributed Gateway Router.

  1. Configure las terceras VNIC en los hosts de 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. Ejecute los siguientes comandos desde el motor de Oracle Linux Virtualization Manager para mostrar la configuración actual.

    [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. Cree el enrutador lógico denominado router.

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Cree un puerto de enrutador para la conexión al puente Default de 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. Conecte el puente Default al enrutador.

    [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. Ejecute el siguiente comando para mostrar la red lógica.

    [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. Cree el puente lógico denominado public.

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. Prepárese para conectar el puerto de hosts de KVM local al puente lógico public mediante la red 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. Conecte router a los puentes lógicos public mediante un puerto de enrutador distribuido.

    [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. Programe el puerto del enrutador (prioridad más alta para el primer 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. Compruebe la configuración del puerto del enrutador.

    [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. Defina el siguiente salto para 0.0.0.0/0 mediante el gateway de VLAN de OCI.

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. Ejecute el siguiente comando para ver el resumen de configuración.

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

    Podemos confirmar mediante Port_Binding cr-router-public en la sección kvm1.olvm.demo que el puerto del enrutador está asociado al primer host KVM.

  14. Asigne interfaces locales de los hosts de KVM, conectados a la VLAN 1001, a la red 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 de OCI proporciona marcos solo a las direcciones MAC asociadas a los dispositivos conectados a VLAN.

    Si no utilizamos NAT, en el caso de que se cambie el propietario del puerto de enrutador lógico, necesitamos actualizar la dirección MAC del puerto de enrutador lógico para que coincida con la dirección MAC del chasis activo.

    El siguiente servicio se encarga de esta operación. Actualice la base de datos Open Virtual Network SB con las asignaciones de direcciones MAC del chasis (necesarias para la funcionalidad del controlador de 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. Cree el archivo denominado /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py con el siguiente contenido.

    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. Cree el archivo denominado /etc/systemd/system/ovn-ha-gateway-controller.service con el siguiente contenido.

    [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. Inicie el servicio.

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

Tarea 12: Finalización de la configuración de OCI Networking.

Los paquetes de VM1 deben poder alcanzar la VLAN 1001 de OCI. Nuestro plan es permitir que estos paquetes lleguen a Internet.

  1. Debe asociar una tabla de rutas a la VLAN con la regla: (Enrute 0.0.0.0/0 a través del gateway de NAT).

    VLAN RT

  2. Para el tráfico que vuelve de Internet hacia VM1, debemos manejar el enrutamiento para CIDR 10.0.150.0/24. Necesitamos definir una IP externa para la VLAN 1001. Esta es la dirección IP asociada con el puerto de enrutador lógico, 10.0.20.10.

    acceso externo

    Con esta dirección IP definida, crearemos una nueva tabla de enrutamiento con la regla: (Ruta 10.0.150.0/24 a 10.0.20.10)

    OLVM RT

  3. Ahora, podemos asociar esta nueva ruta con el gateway de NAT y reenviar los paquetes para llegar a VM1.

    Asociación de rutas de GW de NAT

    En esta etapa deberíamos poder llegar a Internet desde VM1.

    prueba de ping

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.