Note :

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

Présentation

Dans ce tutoriel, nous passerons en revue un scénario dans lequel une équipe vise à augmenter l'utilisation d'un parc de noeuds sans système d'exploitation en étendant leur environnement Oracle Linux Virtualization Manager sur place dans Oracle Cloud Infrastructure (OCI). En intégrant les capacités de réseau d'Oracle Cloud au réseau virtuel ouvert (OVN), vous pouvez établir un pont entre la connectivité entre les ressources sur place et les machines virtuelles déployées par Oracle Linux Virtualization Manager dans OCI au moyen de FastConnect.

Note : Ce tutoriel n'est offert qu'à 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 fait l'objet d'un aperçu de technologie, ce qui indique qu'une fonction est toujours en cours de développement.

Aperçu et déploiement des solutions

Aperçu des solutions

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

Architecture de la solution

Déploiement de la solution

BM VNIC VLAN 1000

BM VNIC VLAN 1001

Objectifs

Préalables

Tâche 1 : Configurer le moteur hébergé d'Oracle Linux Virtualization Manager

Nous allons commencer par configurer l'interface secondaire. Le statut courant de l'interface doit avoir l'apparence suivante (ignorer l'adresse IP privée sur la carte VNIC 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 l'ensemble 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 dans la documentation d'installation officielle. Pour plus d'informations, voir 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é avec succès, vous devriez voir les informations d'accès Web s'afficher dans la console.

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

Notes :

Pour accéder à la console Web du moteur hébergé d'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 d'utilisateur admin@ovirt et le mot de passe configuré.

Console Web OLVM

Tâche 3 : Configurer les hôtes KVM (Oracle Linux Kernel-based Virtual Machine)

Nous commençons par 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. Remarque pour mettre à jour les adresses MAC et IP lorsque vous configurez l'interface VLAN 1000.

  1. Vérifiez que l'hôte KVM comporte deux cartes vNIC secondaires, connectées aux réseaux VLAN 1000 et 1001.

    Sommaire des cartes vNIC

  2. Configurez la carte VNIC secondaire dans le réseau 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
    

    Note :

    • 02:00:17:14:AA:20 est l'adresse MAC de la carte VNIC VLAN 1000 pour le premier hôte KVM (n'oubliez pas d'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 utiliserons pour le premier hôte KVM du VLAN 1000.
    • 10.0.10.12/24 est l'adresse IP que nous utiliserons pour le deuxième hôte KVM du VLAN 1000.
  3. Activez le référentiel ol8_baseos_latest.

    [root@kvm-1 opc]# dnf config-manager --enable ol8_baseos_latest
    
  4. Installez l'ensemble 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 cockpit 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 : Configurer la zone privée DNS

  1. Créez une nouvelle zone DNS privée dans OCI. Pour plus d'informations, voir Création d'une zone DNS privée.

    • La zone peut être nommée olvm.demo.
    • Attachez 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 d'Oracle Linux Virtualization Manager.

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

    1. Naviguez jusqu'à Réseau et Réseaux.

    2. Sélectionnez ovirtmgmt et cliquez sur Modifier.

    3. Sélectionnez Activer le marquage de réseau VLAN, entrez 1000 et cliquez sur OK.

  3. Ajoutez les hôtes KVM.

    1. Naviguez jusqu'à Calcul et Hôtes.

    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 supprimez le contenu existant.

    3. Cliquez sur Ok.

    Hôtes KVM

Tâche 6 : Ajouter les autorités de certification d'Oracle Linux Virtualization Manager à la liste des autorités de certification racine de confiance du navigateur

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

  2. Naviguez jusqu'au navigateur Paramètres, Certificats et importez l'autorité de certification Oracle Linux Virtualization Manager vers la liste des autorités de certification racine approuvées.

Tâche 7 : Créer un domaine de stockage

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

    nouveau volume par blocs

  2. Attachez le volume par blocs au premier hôte KVM et sélectionnez Lecture/écriture - partageable comme Accès.

    définir plusieurs volumes par blocs en lecture/écriture

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

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

    1. Allez à la console Web Oracle Linux Virtualization Manager, naviguez jusqu'à Stockage et Domaines.

    2. Cliquez sur New Domain (Nouveau domaine) et entrez 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 détectée et cliquez sur Ajouter pour l'ID lun.

    5. Cliquez sur OK pour créer le nouveau domaine.

Tâche 8 : Charger une nouvelle image du système d'exploitation

  1. Allez à la console Web Oracle Linux Virtualization Manager, naviguez jusqu'à Stockage et Disques.

  2. Cliquez sur Charger 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, voir Obtenir le serveur Ubuntu.

    télécharger une nouvelle ISO

Tâche 9 : Configurer le réseau virtuel ouvert (OVN)

  1. Allez à la console Web Oracle Linux Virtualization Manager, naviguez jusqu'à Réseau, Réseaux et cliquez sur Nouveau.

  2. Entrez les informations suivantes .

    • Nom : Sélectionnez Par défaut.
    • Sélectionnez Créer sur un fournisseur externe.
    • Fournisseur externe : Entrez ovirt-provider-ovn.
    • Sécurité des ports réseau : Sélectionnez Désactivé.

    nouveau réseau OVN

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

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

    paramètres du sous-réseau ovn

  4. Cliquez sur Ok.

Tâche 10 : Provisionner une nouvelle machine virtuelle dans Oracle Linux Virtualization Manager

  1. Allez à la console Web Oracle Linux Virtualization Manager, naviguez jusqu'à Calcul, Machines virtuelles et cliquez sur Nouveau.

  2. Entrez les informations suivantes .

    • Nom : Entrez vm1.
    • Dans Images d'instance, cliquez sur Créer et entrez Taille comme 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 de démarrage : Attachez un CD - ubuntu-24.04.1-live-server-amd64.iso.

    nouvelle machine virtuelle

  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, naviguez jusqu'à Console, Options de console, sélectionnez NoVNC, cliquez sur OK, puis sur Console.

    Poursuivez l'installation du système d'exploitation, notez qu'Internet n'est pas disponible à l'étape.

Tâche 11 : Connecter le réseau virtuel ouvert au VCN OCI

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

Diagramme de réseau OVN

L'accès au VLAN 1001 pour OCI est fourni au moyen d'un port de passerelle distribuée. Pour plus d'informations, voir Comment créer un routeur de passerelle distribuée de réseau virtuel ouvert.

  1. Configurez les troisièmes cartes 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 courante.

    [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 au moyen du 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. Programmez 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 au moyen de la passerelle VLAN pour 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 voir le sommaire 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 dans la section kvm1.olvm.demo que le port du routeur est associé au premier hôte KVM.

  14. Mappez les interfaces locales des hôtes KVM, connectés au réseau VLAN 1001, au 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, dans le cas où le propriétaire du port du routeur logique est modifié, nous devons mettre à jour l'adresse MAC du port du 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 SB Open Virtual Network avec les mappings 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 : Finaliser la configuration du réseau OCI.

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

  1. Vous devez attacher une table de routage au réseau VLAN avec la règle : (Route 0.0.0.0/0 au moyen d'une passerelle NAT).

    VLAN RT

  2. Pour le trafic revenant d'Internet vers VM1, nous devons gérer le routage pour 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 du routeur logique, 10.0.20.10.

    accès externe

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

    OLVM RT

  3. Maintenant, nous pouvons associer cette nouvelle route à la passerelle NAT et transmettre les paquets pour atteindre VM1.

    Association de route GW NAT

    À ce stade, nous devrions être en mesure d'atteindre Internet à partir de VM1.

    test ping

Confirmation

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.