Remarques :

Déployez Oracle Linux Virtualization Manager à l'aide du fournisseur de réseau de virtualisation ouvert sur Oracle Cloud Infrastructure

Introduction

Dans ce tutoriel, nous allons passer en revue un scénario dans lequel une équipe vise à augmenter l'utilisation d'un parc de noeuds Bare Metal en étendant son environnement Oracle Linux Virtualization Manager sur site existant vers Oracle Cloud Infrastructure (OCI). En intégrant les fonctionnalités réseau d'Oracle Cloud à Open Virtual Network (OVN), vous pouvez établir un pont entre la connectivité entre les ressources sur site et les machines virtuelles déployées par Oracle Linux Virtualization Manager dans OCI via FastConnect.

Remarque : ce tutoriel est uniquement à des fins de test et d'évaluation. La prise en charge d'Oracle Linux Virtualization Manager pour OCI est en cours de développement et n'est pas prise en charge pour la gestion des systèmes OCI. L'utilisation d'OVN avec Oracle Linux Virtualization Manager est en cours d'aperçu de la technologie, ce qui indique qu'une fonctionnalité est toujours en cours de développement.

Présentation et déploiement de la solution

Présentation de la solution

Nous aurons besoin d'un nouveau VCN (10.0.0.0/16) avec les ressources suivantes :

Architecture de solution

Déploiement de solution

BM VNIC VLAN 1000

BM VNIC VLAN 1001

Objectifs

Prérequis

Tâche 1 : configuration du moteur hébergé d'Oracle Linux Virtualization Manager

Nous allons commencer par configurer l'interface secondaire. Le statut de l'interface en cours doit ressembler à ce qui suit (ignorer l'adresse IP privée sur la carte d'interface réseau virtuelle principale) :

[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

Configurez la deuxième interface, enp1s0, dans le 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'

Installez maintenant Oracle Linux Virtualization Manager version 4.5.

  1. Activez le référentiel ol8_baseos_latest.

    [root@olvm-he opc]# dnf config-manager --enable ol8_baseos_latest
    
  2. Installez le package Oracle Linux Virtualization Manager version 4.5, qui active ou désactive automatiquement les référentiels requis.

    [root@olvm-he opc]# dnf install -y oracle-ovirt-release-45-el8
    
  3. Exécutez la commande dnf pour vérifier que les référentiels requis sont activés.

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

    Les référentiels suivants doivent être activés :

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Pour VDSM) ol8_UEKR7
  4. Exécutez la commande suivante pour activer tout référentiel manquant.

    [root@olvm-he opc]# dnf config-manager --enable <repository-name> 
    
  5. Exécutez la commande suivante si votre hôte exécute UEK R7.

    dnf install -y kernel-uek-modules-extra
    
  6. Exécutez la commande ovirt-engine pour installer le gestionnaire.

    dnf install -y ovirt-engine --allowerasing
    
  7. Exécutez la commande suivante pour configurer le moteur.

    engine-setup
    

Pour chaque étape de configuration, vous pouvez consulter les recommandations figurant dans la documentation d'installation officielle. Pour plus d'informations, reportez-vous à Options de configuration du moteur.

Tâche 2 : accéder à la console Web d'Oracle Linux Virtualization Manager

Si Oracle Linux Virtualization Manager est installé correctement, vous devez voir les informations d'accès Web affichées dans la console.

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

Remarques :

Pour accéder à la console Web du moteur hébergé Oracle Linux Virtualization Manager, vous pouvez ajouter un enregistrement DNS au fichier d'hôtes du système d'exploitation local C:\Windows\System32\drivers\etc\hosts.

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

Vous pouvez vous authentifier avec le nom utilisateur admin@ovirt et le mot de passe configuré.

Console Web OLVM

Tâche 3 : configuration des hôtes de machine virtuelle basés sur le noyau Oracle Linux

Nous commençons avec le premier hôte KVM. Pour configurer le deuxième hôte, vous devez utiliser SSH dans le deuxième hôte BM et exécuter les mêmes commandes. Notez que vous devez mettre à jour les adresses MAC et IP lorsque vous configurez l'interface VLAN 1000.

  1. Vérifiez que l'hôte KVM dispose de deux cartes d'interface réseau virtuelles secondaires connectées aux VLAN 1000 et 1001.

    Récapitulatif des cartes d'interface réseau virtuelles

  2. Configurez la carte d'interface réseau virtuelle secondaire dans le 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
    

    Remarque :

    • 02:00:17:14:AA:20 est l'adresse MAC de la carte d'interface réseau virtuelle VLAN 1000 pour le premier hôte KVM (veillez à utiliser l'adresse MAC correcte lorsque vous configurez l'interface ens340np0.1000 sur le deuxième hôte KVM).
    • 10.0.10.11/24 est l'adresse IP que nous allons utiliser pour le premier hôte KVM dans le VLAN 1000.
    • 10.0.10.12/24 est l'adresse IP que nous allons utiliser pour le deuxième hôte KVM dans le VLAN 1000.
  3. Activez le référentiel ol8_baseos_latest.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Installez le package Oracle Linux Virtualization Manager version 4.5, qui active ou désactive automatiquement les référentiels requis.

    [root@kvm-1 opc]# dnf install -y oracle-ovirt-release-45-el8
    
  5. Exécutez la commande dnf pour vérifier que les référentiels requis sont activés.

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

    Les référentiels suivants doivent être activés :

    • ol8_baseos_latest
    • ol8_appstream
    • ol8_kvm_appstream
    • ovirt-4.5
    • ovirt-4.5-extra
    • ol8_gluster_appstream
    • (Pour VDSM) ol8_UEKR7
  6. Exécutez la commande suivante pour activer tout référentiel manquant.

    [root@kvm-1 opc]# dnf config-manager --enable <repository-name>
    
  7. Exécutez la commande suivante si votre hôte exécute UEK R7.

    [root@kvm-1 opc]# dnf install -y kernel-uek-modules-extra
    
  8. Activez la console Web du poste de pilotage et ouvrez le port du pare-feu.

    [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
    

Tâche 4 : configuration de la zone privée DNS

  1. Créez une zone DNS privée dans OCI. Pour plus d'informations, reportez-vous à Création d'une zone DNS privée.

    • La zone peut être nommée olvm.demo.
    • Connectez la zone à la vue privée DNS du VCN.
  2. Créez deux enregistrements DNS pour les deux hôtes KVM et publiez les modifications.

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

    enregistrements DNS

Tâche 5 : ajouter les hôtes KVM à Oracle Linux Virtualization Manager

  1. Connectez-vous à la console Web Oracle Linux Virtualization Manager.

  2. Mettez à jour le réseau ovirtmgmt pour utiliser VLAN 1000.

    1. Accédez à Network et Networks.

    2. Sélectionnez ovirtmgmt et cliquez sur Modifier.

    3. Sélectionnez Activer le balisage VLAN, entrez 1000 et cliquez sur OK.

  3. Ajouter les hôtes KVM.

    1. Accédez à Compute et à Hosts.

    2. Cliquez sur Nouveau et entrez les informations suivantes.

      • Nom : entrez kvm1.olvm.demo.
      • Nom d'hôte : entrez kvm1.olvm.demo.
      • Authentification : sélectionnez Clé publique SSH.

      Ajoutez la clé SSH publique au fichier /root/.ssh/authorized_keys sur l'hôte KVM et enlevez le contenu existant.

    3. Cliquez sur OK.

    Hôtes KVM

Tâche 6 : ajouter les autorités de certification (CA) d'Oracle Linux Virtualization Manager à la liste des autorités de certification racine sécurisées du navigateur

  1. Téléchargez le certificat CA à partir de l'adresse suivante : https://<OLVM-hosted-engine-FQDN>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA.

  2. Accédez aux paramètres et aux certificats du navigateur et importez l'autorité de certification Oracle Linux Virtualization Manager dans la liste des autorités de certification racine sécurisées.

Tâche 7 : création d'un domaine de stockage

  1. Créez un volume de blocs OCI dans le même domaine de disponibilité que les hôtes KVM.

    nouveau volume de blocs

  2. Attachez le volume de blocs au premier hôte KVM et sélectionnez Lecture/écriture - partageable en tant qu'accès.

    définir plusieurs lectures/écritures de volume de blocs

  3. Attachez le même volume de blocs au deuxième hôte KVM et sélectionnez Lecture/écriture - partageable comme Accès.

  4. Créez un domaine de stockage dans Oracle Linux Virtualization Manager.

    1. Accédez à la console Web Oracle Linux Virtualization Manager, accédez à Stockage et à Domaines.

    2. Cliquez sur Nouveau domaine et saisissez les informations suivantes.

      • Nom : entrez iscsi-datavol.
      • Type de stockage : sélectionnez iSCSI.
      • Hôte : entrez kvm1.private.zone.
      • Adresse : entrez 169.254.2.2.
      • Port : entrez 3260.
    3. Cliquez sur Tout connecter.

    4. Développez la cible repérée et cliquez sur Ajouter pour l'ID LUN.

    5. Cliquez sur Ok pour créer le domaine.

Tâche 8 : téléchargement d'une nouvelle image de système d'exploitation

  1. Accédez à la console Web Oracle Linux Virtualization Manager, puis à Stockage et à Disques.

  2. Cliquez sur Télécharger vers le serveur et sur Démarrer.

  3. Fournissez l'image ISO du système d'exploitation. Sélectionnez le domaine de stockage iscsi-datavol et cliquez sur OK. Pour plus d'informations, reportez-vous à Get Ubuntu Server.

    charger une nouvelle ISO

Tâche 9 : configuration du réseau virtuel ouvert (OVN)

  1. Accédez à la console Web Oracle Linux Virtualization Manager, accédez à Réseau, Réseaux et cliquez sur Nouveau.

  2. Saisissez les informations suivantes .

    • Nom : Sélectionnez Valeur par défaut.
    • Sélectionnez Créer sur un fournisseur externe.
    • Fournisseur externe : entrez ovirt-provider-ovn.
    • Sécurité du port réseau : sélectionnez Désactivé.

    nouveau réseau OVN

  3. Sélectionnez Sous-réseaux et créez un sous-réseau avec les informations suivantes.

    • Nom : Sélectionnez Valeur par défaut.
    • CIDR : entrez 10.0.150.0/24.
    • Passerelle : entrez 10.0.150.1.

    paramètres de sous-réseau ovn

  4. Cliquez sur OK.

Tâche 10 : provisionnement d'une nouvelle machine virtuelle dans Oracle Linux Virtualization Manager

  1. Accédez à la console Web Oracle Linux Virtualization Manager, accédez à Compute, Machines virtuelles et cliquez sur Nouveau.

  2. Saisissez les informations suivantes .

    • Nom : entrez vm1.
    • Dans Images d'instance, cliquez sur Créer et entrez Taille pour qu'elle soit 15 Go.
    • nic1 : sélectionnez Par défaut/Par défaut.
  3. Cliquez sur Afficher les options avancées, entrez les informations suivantes et cliquez sur OK.

    • Options d'initialisation : attachez le CD - ubuntu-24.04.1-live-server-amd64.iso.

    nouvelle VM

  4. Attendez que le disque soit créé, sélectionnez la machine virtuelle créée, cliquez sur Exécuter et attendez que la machine virtuelle démarre.

  5. Pour vous connecter à la console de machine virtuelle, accédez à Console, à Options de console, sélectionnez NoVNC, cliquez sur OK, puis sur Console.

    Poursuivez l'installation de l'O/S, notez qu'à ce stade, Internet n'est pas disponible.

Tâche 11 : connexion du réseau virtuel ouvert à OCI VCN

Dans l'image suivante, vous pouvez voir une illustration du réseau logique que nous devons définir dans Oracle Linux Virtualization Manager.

Diagramme réseau OVN

L'accès au VLAN OCI 1001 est fourni via un port de passerelle distribuée. Pour plus d'informations, reportez-vous à Création d'un routeur de passerelle distribuée Open Virtual Network.

  1. Configurez les troisièmes VNIC sur les hôtes 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. Exécutez les commandes suivantes à partir du moteur Oracle Linux Virtualization Manager pour afficher la configuration actuelle.

    [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. Créez le routeur logique nommé router.

    [root@olvm-he opc]# ovn-nbctl lr-add router
    
  4. Créez un port de routeur pour la connexion au pont Default d'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. Connectez le pont Default au routeur.

    [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. Exécutez la commande suivante pour afficher le réseau logique.

    [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. Créez le pont logique nommé public.

    [root@olvm-he opc]# ovn-nbctl ls-add public
    
  8. Préparez-vous à connecter le port des hôtes KVM locaux au pont logique public via le réseau 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. Connectez router aux ponts logiques public à l'aide d'un port de routeur distribué.

    [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. Planifiez le port du routeur (priorité supérieure pour le premier hôte 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. Vérifiez la configuration du port du routeur.

    [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. Définissez le saut suivant pour 0.0.0.0/0 via la passerelle VLAN OCI.

    [root@olvm-he opc]# ovn-nbctl lr-route-add router "0.0.0.0/0" 10.0.20.1
    
  13. Exécutez la commande suivante pour afficher le récapitulatif de la configuration.

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

    Nous pouvons confirmer en voyant Port_Binding cr-router-public sous la section kvm1.olvm.demo que le port de routeur est associé au premier hôte KVM.

  14. Mappez les interfaces locales des hôtes KVM, connectés au VLAN 1001, sur le réseau 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. Le VLAN OCI fournit des trames uniquement aux adresses MAC associées aux périphériques connectés au VLAN.

    Si nous n'utilisons pas NAT, si le propriétaire du port de routeur logique est modifié, nous devons mettre à jour l'adresse MAC du port de routeur logique pour qu'elle corresponde à l'adresse MAC du châssis actif.

    Le service suivant s'occupe de cette opération. Mettez à jour la base de données Open Virtual Network SB avec les mappages d'adresses MAC du châssis (requis pour la fonctionnalité du contrôleur de permutation).

    [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. Créez le fichier nommé /usr/share/ovirt-provider-ovn/ovn_ha_gw_controller.py avec le contenu suivant.

    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. Créez le fichier nommé /etc/systemd/system/ovn-ha-gateway-controller.service avec le contenu suivant.

    [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. Démarrez le service.

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

Tâche 12 : finalisation de la configuration réseau OCI.

Les paquets provenant de VM1 doivent pouvoir atteindre le VLAN OCI 1001. Notre plan est de permettre à ces paquets d'atteindre Internet.

  1. Vous devez attacher une table de routage au VLAN avec la règle suivante : (acheminer 0.0.0.0/0 via la passerelle NAT).

    RT PLAN

  2. Pour le trafic revenant d'Internet vers VM1, nous devons gérer le routage pour le CIDR 10.0.150.0/24. Nous devons définir une adresse IP externe pour le VLAN 1001. Il s'agit de l'adresse IP associée au port de routeur logique, 10.0.20.10.

    accès externe

    Une fois cette adresse IP définie, nous allons créer une table de routage avec la règle suivante : (acheminer 10.0.150.0/24 à 10.0.20.10)

    TAUX OLVM

  3. Maintenant, nous pouvons associer ce nouveau routage à la passerelle NAT et transférer les paquets pour atteindre VM1.

    Association de routage NAT GW

    À ce stade, nous devrions pouvoir accéder à Internet à partir du site VM1.

    test de commande ping

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.