Observação:

Implante o Oracle Linux Virtualization Manager usando o Provedor de Rede de Virtualização Aberta no Oracle Cloud Infrastructure

Introdução

Neste tutorial, percorreremos um cenário em que uma equipe visa aumentar a utilização de uma frota de nós bare metal, estendendo seu ambiente Oracle Linux Virtualization Manager local existente para a Oracle Cloud Infrastructure (OCI). Ao integrar os recursos de rede da Oracle Cloud com a Open Virtual Network (OVN), você pode conectar a conectividade entre recursos locais e as máquinas virtuais (VMs) implantadas do Oracle Linux Virtualization Manager na OCI por meio do FastConnect.

Observação: Este tutorial é apenas para fins de teste e avaliação; o suporte do Oracle Linux Virtualization Manager para OCI está em desenvolvimento e, na verdade, não é suportado para gerenciar sistemas OCI. O uso do OVN com o Oracle Linux Virtualization Manager está em visualização de tecnologia, indicando que um recurso ainda está em desenvolvimento.

Visão Geral e Implantação da Solução

Visão Geral da Solução

Precisaremos de uma nova VCN (10.0.0.0/16) com os seguintes recursos:

Arquitetura de solução

Implantação de solução

BM VNIC VLAN 1000

BM VNIC VLAN 1001

Objetivos

Pré-requisitos

Tarefa 1: Configurar o Mecanismo Hospedado do Oracle Linux Virtualization Manager

Vamos começar configurando a interface secundária. O status da interface atual deve ser semelhante (ignore o endereço IP privado na VNIC principal):

[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 a segunda interface, enp1s0, na 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'

Agora, instale o Oracle Linux Virtualization Manager Release 4.5.

  1. Ative o repositório ol8_baseos_latest.

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. Instale o pacote Oracle Linux Virtualization Manager Release 4.5, que ativa ou desativa automaticamente os repositórios necessários.

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. Execute o comando dnf para verificar se os repositórios necessários estão ativados.

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

    Os seguintes repositórios devem ser ativados:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Para VDSM) ol8_UEKR7
  4. Execute o comando a seguir para ativar qualquer repositório ausente.

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. Execute o comando a seguir se o host estiver executando o UEK R7.

    dnf install -y kernel-uek-modules-extra
    
  6. Execute o comando ovirt-engine para instalar o gerenciador.

    dnf install -y ovirt-engine --allowerasing
    
  7. Execute o comando a seguir para configurar o mecanismo.

    engine-setup
    

Para cada etapa de configuração, você pode verificar as recomendações na documentação de instalação oficial. Para obter mais informações, consulte as Opções de Configuração do Mecanismo.

Tarefa 2: Acessar a Console Web do Oracle Linux Virtualization Manager

Se o Oracle Linux Virtualization Manager for instalado com sucesso, você verá as informações de acesso à Web sendo exibidas no console.

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

Observações:

Para acessar a console web do mecanismo hospedado pelo Oracle Linux Virtualization Manager, você pode adicionar um registro de DNS ao arquivo de hosts do Sistema Operacional (SO) local C:\Windows\System32\drivers\etc\hosts.

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

Você pode autenticar com o nome de usuário admin@ovirt e a senha configurada.

Console da web OLVM

Tarefa 3: Configurar os Hosts de KVM (Máquina Virtual Baseada no Kernel) do Oracle Linux

Estamos começando com o primeiro host KVM. Para configurar o segundo host, você precisa usar SSH no segundo host BM e executar os mesmos comandos. Observe para atualizar os endereços MAC e IP ao configurar a interface VLAN 1000.

  1. Confirme se o host KVM tem duas VNICs secundárias, conectadas às VLANs 1000 e 1001.

    Resumo de VNICs

  2. Configure a VNIC secundária na 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
    

    Observação:

    • 02:00:17:14:AA:20 é o endereço MAC da VNIC VLAN 1000 para o primeiro host KVM (certifique-se de usar o endereço MAC correto ao configurar a interface ens340np0.1000 no segundo host KVM).
    • 10.0.10.11/24 é o endereço IP que usaremos para o primeiro host KVM na VLAN 1000.
    • 10.0.10.12/24 é o endereço IP que usaremos para o segundo host KVM na VLAN 1000.
  3. Ative o repositório ol8_baseos_latest.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Instale o pacote Oracle Linux Virtualization Manager Release 4.5, que ativa ou desativa automaticamente os repositórios necessários.

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. Execute o comando dnf para verificar se os repositórios necessários estão ativados.

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

    Os seguintes repositórios devem ser ativados:

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Para VDSM) ol8_UEKR7
  6. Execute o comando a seguir para ativar qualquer repositório ausente.

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. Execute o comando a seguir se o host estiver executando o UEK R7.

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. Ative o console web do cockpit e abra a porta do 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
    

Tarefa 4: Configurar a Zona Privada de DNS

  1. Crie uma nova zona de DNS privada no OCI. Para obter mais informações, consulte Criando uma Zona Privada de DNS.

    • A zona pode ser nomeada olvm.demo.
    • Anexe a zona à view privada de DNS da VCN.
  2. Crie dois registros DNS para os dois hosts KVM e publique as alterações.

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

    Registros do DNS

Tarefa 5: Adicionar os hosts KVM ao Oracle Linux Virtualization Manager

  1. Conecte-se à console web do Oracle Linux Virtualization Manager.

  2. Atualize a rede ovirtmgmt para usar VLAN 1000.

    1. Navegue até Rede e Redes.

    2. Selecione ovirtmgmt e clique em Editar.

    3. Selecione Ativar tag de VLAN, digite 1000 e clique em Ok.

  3. Adicione os hosts KVM.

    1. Navegue até Compute e Hosts.

    2. Clique em Novo e especifique as seguintes informações.

      • Nome: Digite kvm1.olvm.demo.
      • Nome do Host: Digite kvm1.olvm.demo.
      • Autenticação: Selecione Chave Pública SSH.

      Adicione a chave SSH pública ao arquivo /root/.ssh/authorized_keys no host KVM e remova o conteúdo existente.

    3. Clique em Ok.

    Hosts KVM

Tarefa 6: Adicionar as Autoridades de Certificação (CA) do Oracle Linux Virtualization Manager à Lista de Autoridades de Certificação Raiz Confiáveis do Browser

  1. Faça download do certificado da CA no seguinte endereço: https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA.

  2. Navegue até as Definições, Certificados do navegador e importe a CA do Oracle Linux Virtualization Manager para a lista de autoridades de certificação raiz confiável.

Tarefa 7: Criar um Novo Domínio de Armazenamento

  1. Crie um novo Volume em Blocos do OCI dentro do mesmo domínio de disponibilidade dos hosts KVM.

    novo volume em blocos

  2. Anexe o volume em blocos ao primeiro host KVM e selecione Leitura/gravação - compartilhável como Acesso.

    definir leitura/gravação de volume em blocos

  3. Anexe o mesmo volume em blocos ao segundo host KVM e selecione Leitura/Gravação - compartilhável como Acesso.

  4. Crie um novo domínio de armazenamento no Oracle Linux Virtualization Manager.

    1. Vá para a console web do Oracle Linux Virtualization Manager, navegue até Storage e Domains.

    2. Clique em Novo Domínio e digite as informações a seguir.

      • Nome: Digite iscsi-datavol.
      • Tipo de Armazenamento: Selecione iSCSI.
      • Host: Digite kvm1.private.zone.
      • Endereço: Informe 169.254.2.2.
      • Porta: Digite 3260.
    3. Clique em Logar Tudo.

    4. Expanda o destino descoberto e clique em Adicionar para o ID da Lun.

    5. Clique em Ok para criar o novo domínio.

Tarefa 8: Fazer Upload de uma Nova Imagem do Sistema Operacional

  1. Vá para a console web do Oracle Linux Virtualization Manager, navegue até Armazenamento e Discos.

  2. Clique em Carregar e Iniciar.

  3. Forneça a imagem ISO do SO. Selecione o domínio de armazenamento iscsi-datavol e clique em Ok. Para obter mais informações, consulte Obter Servidor Ubuntu.

    carregar novo ISO

Tarefa 9: Configurar Rede Virtual Aberta (OVN)

  1. Vá para a console web do Oracle Linux Virtualization Manager, navegue até Rede, Redes e clique em Novo.

  2. Digite as seguintes informações.

    • Name: Selecione Default.
    • Selecione Criar no provedor externo.
    • Provedor Externo: Digite ovirt-provider-ovn.
    • Segurança da Porta de Rede: Selecione Desativado.

    nova rede OVN

  3. Selecione Sub-redes e crie uma nova sub-rede com as informações a seguir.

    • Name: Selecione default.
    • CIDR: Digite 10.0.150.0/24.
    • Gateway: Digite 10.0.150.1.

    definições de sub-rede ovn

  4. Clique em Ok.

Tarefa 10: Provisionar uma Nova Máquina Virtual no Oracle Linux Virtualization Manager

  1. Vá para a console web do Oracle Linux Virtualization Manager, navegue até Compute, Virtual Machines e clique em Novo.

  2. Digite as seguintes informações.

    • Nome: Digite vm1.
    • Em Imagens da Instância, clique em Criar e digite Tamanho para ser 15 GB.
    • nic1: Selecione Padrão/Padrão.
  3. Clique em Mostrar Opções Avançadas, especifique as informações a seguir e clique em Ok.

    • Opções de Inicialização: Anexe o CD - ubuntu-24.04.1-live-server-amd64.iso.

    nova VM

  4. Aguarde a criação do disco, selecione a VM criada, clique em Executar e aguarde o início da VM.

  5. Para estabelecer conexão com a console da VM, navegue até Console, Opções da Console, selecione NoVNC, clique em Ok e, em seguida, clique em Console.

    Continue a instalar o sistema operacional, observe que, no estágio, a Internet não está disponível.

Tarefa 11: Conectar a Rede Virtual Aberta à VCN do OCI

Na imagem a seguir, você pode ver uma ilustração da rede lógica que precisamos definir no Oracle Linux Virtualization Manager.

Diagrama de rede OVN

O acesso à VLAN 1001 do OCI é fornecido por meio de uma porta de gateway distribuído. Para obter mais informações, consulte How to create an Open Virtual Network distributed gateway router.

  1. Configure as terceiros VNICs nos hosts 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. Execute os comandos a seguir no mecanismo do Oracle Linux Virtualization Manager para exibir a configuração atual.

    [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. Crie o roteador lógico chamado router.

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Crie a porta do roteador para conexão com a ponte Default do 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 a ponte Default ao roteador.

    [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. Execute o comando a seguir para exibir a rede 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. Crie a ponte lógica chamada public.

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. Prepare-se para conectar a porta dos hosts KVM locais à ponte lógica public por meio da rede 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 o router às pontes lógicas public usando uma porta de roteador distribuído.

    [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 a porta do roteador (prioridade maior para o primeiro 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. Verifique a configuração da porta do roteador.

    [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 o próximo salto para 0.0.0.0/0 por meio do gateway de VLAN do OCI.

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. Execute o comando a seguir para ver o resumo da configuração.

    [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 vendo Port_Binding cr-router-public na seção kvm1.olvm.demo que a porta do roteador está associada ao primeiro host KVM.

  14. Mapeie interfaces locais dos hosts KVM, conectados à VLAN 1001, para a rede 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. A VLAN do OCI está entregando quadros apenas para os endereços MAC associados aos dispositivos conectados à VLAN.

    Se não estivermos usando NAT, caso o proprietário da porta do roteador lógico seja alterado, precisamos atualizar o endereço MAC da porta do roteador lógico para corresponder ao endereço MAC do chassi ativo.

    O serviço a seguir cuida dessa operação. Atualizar o banco de dados SB de Rede Virtual Aberta com os mapeamentos de endereço MAC do chassi (necessários para a funcionalidade do 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. Crie o arquivo chamado /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py com o conteúdo a seguir.

    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. Crie o arquivo chamado /etc/systemd/system/ovn-ha-gateway-controller.service com o conteúdo a seguir.

    [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 o serviço.

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

Tarefa 12: Finalizar a Configuração de Rede do OCI.

Os pacotes do VM1 devem ser capazes de acessar a OCI VLAN 1001. Nosso plano é permitir que esses pacotes cheguem à Internet.

  1. Você deve anexar uma tabela de roteamento à VLAN com a regra: (Roteie 0.0.0.0/0 por meio do gateway NAT).

    VLAN RT

  2. Para o tráfego que retorna da Internet em direção a VM1, precisamos tratar o roteamento do CIDR 10.0.150.0/24. Precisamos definir um IP externo para VLAN 1001. Este é o endereço IP associado à porta do roteador lógico, 10.0.20.10.

    acesso externo

    Com esse endereço IP definido, criaremos uma nova tabela de roteamento com a regra: (Rota de 10.0.150.0/24 a 10.0.20.10)

    OLVM RT

  3. Agora, podemos associar essa nova rota ao gateway NAT e encaminhar os pacotes para chegar a VM1.

    Associação de rota GW NAT

    Nesta fase, devemos ser capazes de chegar à Internet a partir do VM1.

    teste de ping

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.