Rechercher

10.21. Mise en réseau de machines virtuelles

download PDF

10.21.1. Configuration de la machine virtuelle pour le réseau de pods par défaut

Vous pouvez connecter une machine virtuelle au réseau de pods interne par défaut en configurant son interface réseau pour qu'elle utilise le mode de liaison masquerade

10.21.1.1. Configuration du mode mascarade à partir de la ligne de commande

Vous pouvez utiliser le mode mascarade pour cacher le trafic sortant d'une machine virtuelle derrière l'adresse IP du pod. Le mode mascarade utilise la traduction d'adresses réseau (NAT) pour connecter les machines virtuelles au backend du réseau du pod par l'intermédiaire d'un pont Linux.

Activez le mode mascarade et autorisez le trafic à entrer dans la machine virtuelle en modifiant le fichier de configuration de votre machine virtuelle.

Conditions préalables

  • La machine virtuelle doit être configurée pour utiliser DHCP afin d'acquérir des adresses IPv4. Les exemples ci-dessous sont configurés pour utiliser DHCP.

Procédure

  1. Modifiez la spécification interfaces du fichier de configuration de votre machine virtuelle :

    kind: VirtualMachine
    spec:
      domain:
        devices:
          interfaces:
            - name: default
              masquerade: {} 1
              ports: 2
                - port: 80
      networks:
      - name: default
        pod: {}
    1
    Se connecter en utilisant le mode mascarade.
    2
    Facultatif : Listez les ports que vous souhaitez exposer à partir de la machine virtuelle, chacun étant spécifié par le champ port. La valeur port doit être un nombre compris entre 0 et 65536. Lorsque le tableau ports n'est pas utilisé, tous les ports de la plage valide sont ouverts au trafic entrant. Dans cet exemple, le trafic entrant est autorisé sur le port 80.
    Note

    Les ports 49152 et 49153 sont réservés à l'usage de la plateforme libvirt et tout autre trafic entrant vers ces ports est supprimé.

  2. Créer la machine virtuelle :

    $ oc create -f <vm-name>.yaml

10.21.1.2. Configuration du mode masquerade avec dual-stack (IPv4 et IPv6)

Vous pouvez configurer une nouvelle machine virtuelle (VM) pour qu'elle utilise à la fois IPv6 et IPv4 sur le réseau de pods par défaut à l'aide de cloud-init.

Le champ Network.pod.vmIPv6NetworkCIDR dans la configuration de l'instance de la machine virtuelle détermine l'adresse IPv6 statique de la VM et l'adresse IP de la passerelle. Ces adresses sont utilisées par le pod virt-launcher pour acheminer le trafic IPv6 vers la machine virtuelle et ne sont pas utilisées à l'extérieur. Le champ Network.pod.vmIPv6NetworkCIDR spécifie un bloc d'adresses IPv6 en notation CIDR (Classless Inter-Domain Routing). La valeur par défaut est fd10:0:2::2/120. Vous pouvez modifier cette valeur en fonction des exigences de votre réseau.

Lorsque la machine virtuelle fonctionne, le trafic entrant et sortant de la machine virtuelle est acheminé vers l'adresse IPv4 et l'adresse IPv6 unique du module de lancement virtuel. Le module virt-launcher achemine ensuite le trafic IPv4 vers l'adresse DHCP de la machine virtuelle et le trafic IPv6 vers l'adresse IPv6 statique de la machine virtuelle.

Conditions préalables

  • Le cluster OpenShift Container Platform doit utiliser le plugin réseau OVN-Kubernetes Container Network Interface (CNI) configuré pour la double pile.

Procédure

  1. Dans une nouvelle configuration de machine virtuelle, incluez une interface avec masquerade et configurez l'adresse IPv6 et la passerelle par défaut à l'aide de cloud-init.

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm-ipv6
    ...
              interfaces:
                - name: default
                  masquerade: {} 1
                  ports:
                    - port: 80 2
          networks:
          - name: default
            pod: {}
          volumes:
          - cloudInitNoCloud:
              networkData: |
                version: 2
                ethernets:
                  eth0:
                    dhcp4: true
                    addresses: [ fd10:0:2::2/120 ] 3
                    gateway6: fd10:0:2::1 4
    1
    Se connecter en utilisant le mode mascarade.
    2
    Autorise le trafic entrant sur le port 80 vers la machine virtuelle.
    3
    L'adresse IPv6 statique déterminée par le champ Network.pod.vmIPv6NetworkCIDR dans la configuration de l'instance de la machine virtuelle. La valeur par défaut est fd10:0:2::2/120.
    4
    L'adresse IP de la passerelle déterminée par le champ Network.pod.vmIPv6NetworkCIDR dans la configuration de l'instance de la machine virtuelle. La valeur par défaut est fd10:0:2::1.
  2. Créer la machine virtuelle dans l'espace de noms :

    $ oc create -f example-vm-ipv6.yaml

Vérification

  • Pour vérifier qu'IPv6 a été configuré, démarrez la machine virtuelle et affichez l'état de l'interface de l'instance de la machine virtuelle pour vous assurer qu'elle dispose d'une adresse IPv6 :
$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"

10.21.2. Création d'un service pour exposer une machine virtuelle

Vous pouvez exposer une machine virtuelle à l'intérieur ou à l'extérieur du cluster en utilisant un objet Service.

10.21.2.1. À propos des services

Un Kubernetes service est un moyen abstrait d'exposer une application s'exécutant sur un ensemble de pods en tant que service réseau. Les services permettent à vos applications de recevoir du trafic. Les services peuvent être exposés de différentes manières en spécifiant un spec.type dans l'objet Service:

ClusterIP
Expose le service sur une adresse IP interne au sein du cluster. ClusterIP est le service par défaut type.
NodePort
Expose le service sur le même port de chaque nœud sélectionné dans la grappe. NodePort rend un service accessible depuis l'extérieur de la grappe.
Équilibreur de charge

Crée un équilibreur de charge externe dans le nuage actuel (s'il est pris en charge) et attribue une adresse IP externe fixe au service.

Note

Pour les clusters sur site, vous pouvez configurer un service d'équilibrage de charge en utilisant l'opérateur MetalLB en mode couche 2. Le mode BGP n'est pas pris en charge. Le MetalLB Operator est installé dans l'espace de noms metallb-system.

10.21.2.1.1. Prise en charge de la double pile

Si le réseau à double pile IPv4 et IPv6 est activé pour votre cluster, vous pouvez créer un service qui utilise IPv4, IPv6 ou les deux, en définissant les champs spec.ipFamilyPolicy et spec.ipFamilies dans l'objet Service.

Le champ spec.ipFamilyPolicy peut prendre l'une des valeurs suivantes :

Pile unique
Le plan de contrôle attribue une adresse IP de cluster pour le service sur la base de la première plage IP de cluster de service configurée.
PreferDualStack
Le plan de contrôle attribue des adresses IP IPv4 et IPv6 pour le service sur les clusters configurés en double pile.
RequireDualStack
Cette option échoue pour les clusters dont le réseau à double pile n'est pas activé. Pour les clusters dont la double pile est configurée, le comportement est le même que lorsque la valeur est définie sur PreferDualStack. Le plan de contrôle alloue les adresses IP des clusters à partir des plages d'adresses IPv4 et IPv6.

Vous pouvez définir la famille IP à utiliser pour la pile simple ou définir l'ordre des familles IP pour la pile double en définissant le champ spec.ipFamilies sur l'une des valeurs de tableau suivantes :

  • [IPv4]
  • [IPv6]
  • [IPv4, IPv6]
  • [IPv6, IPv4]

10.21.2.2. Exposer une machine virtuelle en tant que service

Créez un service ClusterIP, NodePort ou LoadBalancer pour vous connecter à une machine virtuelle (VM) en cours d'exécution depuis l'intérieur ou l'extérieur du cluster.

Procédure

  1. Modifiez le manifeste VirtualMachine pour ajouter l'étiquette de création de service :

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-ephemeral
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key 1
    # ...
    1
    Ajouter le libellé special: key dans la section spec.template.metadata.labels.
    Note

    Les étiquettes d'une machine virtuelle sont transmises au pod. L'étiquette special: key doit correspondre à l'étiquette de l'attribut spec.selector du manifeste Service.

  2. Enregistrez le fichier manifeste VirtualMachine pour appliquer vos modifications.
  3. Créez un manifeste Service pour exposer la VM :

    apiVersion: v1
    kind: Service
    metadata:
      name: vmservice 1
      namespace: example-namespace 2
    spec:
      externalTrafficPolicy: Cluster 3
      ports:
      - nodePort: 30000 4
        port: 27017
        protocol: TCP
        targetPort: 22 5
      selector:
        special: key 6
      type: NodePort 7
    1
    Le nom de l'objet Service.
    2
    L'espace de noms dans lequel réside l'objet Service. Il doit correspondre au champ metadata.namespace du manifeste VirtualMachine.
    3
    Facultatif : Spécifie comment les nœuds distribuent le trafic de service reçu sur des adresses IP externes. Cette option ne s'applique qu'aux types de service NodePort et LoadBalancer. La valeur par défaut est Cluster, ce qui permet d'acheminer le trafic de manière uniforme vers tous les points d'extrémité du cluster.
    4
    Facultatif : Lorsqu'elle est définie, la valeur nodePort doit être unique pour tous les services. Si elle n'est pas spécifiée, une valeur comprise dans la plage supérieure à 30000 est attribuée dynamiquement.
    5
    Facultatif : Le port VM à exposer par le service. Il doit faire référence à un port ouvert si une liste de ports est définie dans le manifeste VM. Si targetPort n'est pas spécifié, il prend la même valeur que port.
    6
    La référence à l'étiquette que vous avez ajoutée dans la strophe spec.template.metadata.labels du manifeste VirtualMachine.
    7
    Le type de service. Les valeurs possibles sont ClusterIP, NodePort et LoadBalancer.
  4. Enregistrez le fichier manifeste Service.
  5. Créez le service en exécutant la commande suivante :

    oc create -f <service_name>.yaml
  6. Démarrez la VM. Si la VM est déjà en cours d'exécution, redémarrez-la.

Vérification

  1. Interroger l'objet Service pour vérifier qu'il est disponible :

    $ oc get service -n example-namespace

    Exemple de sortie pour le service ClusterIP

    NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    vmservice   ClusterIP   172.30.3.149   <none>        27017/TCP   2m

    Exemple de sortie pour le service NodePort

    NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)            AGE
    vmservice   NodePort    172.30.232.73   <none>       27017:30000/TCP    5m

    Exemple de sortie pour le service LoadBalancer

    NAME        TYPE            CLUSTER-IP     EXTERNAL-IP                    PORT(S)           AGE
    vmservice   LoadBalancer    172.30.27.5   172.29.10.235,172.29.10.235     27017:31829/TCP   5s

  2. Choisissez la méthode appropriée pour vous connecter à la machine virtuelle :

    • Pour un service ClusterIP, connectez-vous à la VM depuis le cluster en utilisant l'adresse IP et le port du service. Par exemple, vous pouvez vous connecter à l'adresse IP et au port du service :

      $ ssh fedora@172.30.3.149 -p 27017
    • Pour un service NodePort, connectez-vous à la VM en spécifiant l'adresse IP du nœud et le port du nœud en dehors du réseau du cluster. Par exemple, l'adresse IP du nœud et le port du nœud se trouvent en dehors du réseau du cluster :

      $ ssh fedora@$NODE_IP -p 30000
    • Pour un service LoadBalancer, utilisez le client vinagre pour vous connecter à votre machine virtuelle en utilisant l'adresse IP et le port publics. Les ports externes sont alloués dynamiquement.

10.21.2.3. Ressources supplémentaires

10.21.3. Connexion d'une machine virtuelle à un réseau pont Linux

Par défaut, OpenShift Virtualization est installé avec un seul réseau de pods interne.

Vous devez créer une définition d'attachement au réseau (NAD) pour le pont Linux afin de vous connecter à des réseaux supplémentaires.

Pour attacher une machine virtuelle à un réseau supplémentaire :

  1. Créer une politique de configuration du réseau du nœud de pont Linux.
  2. Créer une définition de l'attachement au réseau Linux bridge.
  3. Configurer la machine virtuelle pour qu'elle reconnaisse la définition de l'attachement réseau.

Pour plus d'informations sur la planification, les types d'interface et les autres activités de mise en réseau des nœuds, voir la section relative à la mise en réseau des nœuds.

10.21.3.1. Connexion au réseau par le biais de la définition de l'attachement au réseau

10.21.3.1.1. Création d'une politique de configuration du réseau de nœuds de pont Linux

Utilisez un fichier YAML du manifeste NodeNetworkConfigurationPolicy pour créer le pont Linux.

Conditions préalables

  • Vous avez installé l'opérateur NMState de Kubernetes.

Procédure

  • Créez le manifeste NodeNetworkConfigurationPolicy. Cet exemple contient des valeurs types que vous devez remplacer par vos propres informations.

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: br1-eth1-policy 1
    spec:
      desiredState:
        interfaces:
          - name: br1 2
            description: Linux bridge with eth1 as a port 3
            type: linux-bridge 4
            state: up 5
            ipv4:
              enabled: false 6
            bridge:
              options:
                stp:
                  enabled: false 7
              port:
                - name: eth1 8
    1
    Nom de la politique.
    2
    Name of the interface.
    3
    Facultatif : description lisible par l'homme de l'interface.
    4
    Le type d'interface. Cet exemple crée un pont.
    5
    L'état demandé pour l'interface après sa création.
    6
    Désactive IPv4 dans cet exemple.
    7
    Désactive le protocole STP dans cet exemple.
    8
    Le NIC du nœud auquel le pont est attaché.

10.21.3.2. Création d'une définition d'attachement à un réseau de ponts Linux

Avertissement

La configuration de la gestion des adresses IP (IPAM) dans une définition d'attachement réseau pour les machines virtuelles n'est pas prise en charge.

10.21.3.2.1. Création d'une définition d'attachement réseau pour un pont Linux dans la console web

Les administrateurs réseau peuvent créer des définitions d'attachement réseau pour fournir un réseau de couche 2 aux pods et aux machines virtuelles.

Procédure

  1. Dans la console web, cliquez sur Networking Network Attachment Definitions.
  2. Cliquez sur Create Network Attachment Definition.

    Note

    La définition de l'attachement réseau doit se trouver dans le même espace de noms que le pod ou la machine virtuelle.

  3. Saisissez une adresse unique Name et une adresse facultative Description.
  4. Cliquez sur la liste Network Type et sélectionnez CNV Linux bridge.
  5. Entrez le nom du pont dans le champ Bridge Name.
  6. Facultatif : si la ressource a des ID VLAN configurés, saisissez les numéros d'ID dans le champ VLAN Tag Number.
  7. Facultatif : Sélectionnez MAC Spoof Check pour activer le filtrage de l'usurpation d'adresse MAC. Cette fonction offre une sécurité contre les attaques de MAC spoofing en n'autorisant qu'une seule adresse MAC à quitter le pod.
  8. Cliquez sur Create.

    Note

    La définition de l'attachement au réseau d'un pont Linux est la méthode la plus efficace pour connecter une machine virtuelle à un VLAN.

10.21.3.2.2. Création d'une définition d'attachement à un réseau de pont Linux dans l'interface de programmation (CLI)

En tant qu'administrateur réseau, vous pouvez configurer une définition d'attachement réseau de type cnv-bridge pour fournir un réseau de couche 2 aux pods et aux machines virtuelles.

Conditions préalables

  • Le nœud doit supporter nftables et le binaire nft doit être déployé pour permettre la vérification de l'usurpation de MAC.

Procédure

  1. Créez une définition de pièce jointe au réseau dans le même espace de noms que la machine virtuelle.
  2. Ajoutez la machine virtuelle à la définition de l'attachement réseau, comme dans l'exemple suivant :

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: <bridge-network> 1
      annotations:
        k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/<bridge-interface> 2
    spec:
      config: '{
        "cniVersion": "0.3.1",
        "name": "<bridge-network>", 3
        "type": "cnv-bridge", 4
        "bridge": "<bridge-interface>", 5
        "macspoofchk": true, 6
        "vlan": 1 7
      }'
    1
    Nom de l'objet NetworkAttachmentDefinition.
    2
    Facultatif : Paire clé-valeur d'annotation pour la sélection des nœuds, où bridge-interface doit correspondre au nom d'un pont configuré sur certains nœuds. Si vous ajoutez cette annotation à votre définition d'attachement réseau, vos instances de machines virtuelles ne s'exécuteront que sur les nœuds auxquels le pont bridge-interface est connecté.
    3
    Le nom de la configuration. Il est recommandé de faire correspondre le nom de la configuration à la valeur name de la définition de l'attachement réseau.
    4
    Le nom réel du plugin Container Network Interface (CNI) qui fournit le réseau pour cette définition d'attachement réseau. Ne modifiez pas ce champ, sauf si vous souhaitez utiliser une CNI différente.
    5
    Le nom du pont Linux configuré sur le nœud.
    6
    Facultatif : Indicateur permettant d'activer la vérification de l'usurpation d'adresse MAC. Lorsqu'il est défini sur true, vous ne pouvez pas modifier l'adresse MAC du pod ou de l'interface invité. Cet attribut offre une sécurité contre les attaques par usurpation d'adresse MAC en n'autorisant qu'une seule adresse MAC à quitter le pod.
    7
    Facultatif : La balise VLAN. Aucune configuration VLAN supplémentaire n'est requise au niveau de la stratégie de configuration du réseau de nœuds.
    Note

    La définition de l'attachement au réseau d'un pont Linux est la méthode la plus efficace pour connecter une machine virtuelle à un VLAN.

  3. Créer la définition de la pièce jointe au réseau :

    oc create -f <network-attachment-definition.yaml> 1
    1
    <network-attachment-definition.yaml> est le nom de fichier du manifeste de définition des pièces jointes au réseau.

Vérification

  • Vérifiez que la définition de la pièce jointe au réseau a été créée en exécutant la commande suivante :

    oc get network-attachment-definition <bridge-network>

10.21.3.3. Configuration de la machine virtuelle pour un réseau pont Linux

10.21.3.3.1. Créer un NIC pour une machine virtuelle dans la console web

Créez et attachez des cartes réseau supplémentaires à une machine virtuelle à partir de la console web.

Conditions préalables

  • Une définition de l'attachement au réseau doit être disponible.

Procédure

  1. Dans le bon projet de la console OpenShift Container Platform, cliquez sur Virtualization VirtualMachines dans le menu latéral.
  2. Sélectionnez une machine virtuelle pour ouvrir la page VirtualMachine details.
  3. Cliquez sur l'onglet Network Interfaces pour afficher les cartes réseau déjà connectées à la machine virtuelle.
  4. Cliquez sur Add Network Interface pour créer un nouvel emplacement dans la liste.
  5. Sélectionnez une définition d'attachement au réseau dans la liste Network pour le réseau supplémentaire.
  6. Remplissez les champs Name, Model, Type, et MAC Address pour le nouveau NIC.
  7. Cliquez sur Save pour enregistrer et attacher le NIC à la machine virtuelle.
10.21.3.3.2. Domaines de mise en réseau
NomDescription

Nom

Nom du contrôleur d'interface réseau.

Model

Indique le modèle du contrôleur d'interface réseau. Les valeurs prises en charge sont e1000e et virtio.

Réseau

Liste des définitions de pièces jointes disponibles.

Type

Liste des méthodes de liaison disponibles. Sélectionnez la méthode de liaison adaptée à l'interface réseau :

  • Réseau de pods par défaut : masquerade
  • Réseau de ponts Linux : bridge
  • Réseau SR-IOV : SR-IOV

Adresse MAC

Adresse MAC du contrôleur d'interface réseau. Si aucune adresse MAC n'est spécifiée, une adresse est attribuée automatiquement.

10.21.3.3.3. Attacher une machine virtuelle à un réseau supplémentaire dans le CLI

Attachez une machine virtuelle à un réseau supplémentaire en ajoutant une interface de pont et en spécifiant une définition d'attachement réseau dans la configuration de la machine virtuelle.

Cette procédure utilise un fichier YAML pour démontrer l'édition de la configuration et l'application du fichier mis à jour au cluster. Vous pouvez également utiliser la commande oc edit <object> <name> pour modifier une machine virtuelle existante.

Conditions préalables

  • Arrêtez la machine virtuelle avant de modifier la configuration. Si vous modifiez une machine virtuelle en cours d'exécution, vous devez la redémarrer pour que les modifications soient prises en compte.

Procédure

  1. Créez ou modifiez la configuration d'une machine virtuelle que vous souhaitez connecter au réseau de ponts.
  2. Ajoutez l'interface de pont à la liste spec.template.spec.domain.devices.interfaces et la définition de l'attachement au réseau à la liste spec.template.spec.networks. Cet exemple ajoute une interface de pont appelée bridge-net qui se connecte à la définition de l'attachement au réseau a-bridge-network:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
        name: <example-vm>
    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
                - masquerade: {}
                  name: <default>
                - bridge: {}
                  name: <bridge-net> 1
    ...
          networks:
            - name: <default>
              pod: {}
            - name: <bridge-net> 2
              multus:
                networkName: <network-namespace>/<a-bridge-network> 3
    ...
    1
    Le nom de l'interface du pont.
    2
    Le nom du réseau. Cette valeur doit correspondre à la valeur name de l'entrée spec.template.spec.domain.devices.interfaces correspondante.
    3
    Le nom de la définition de l'attachement réseau, préfixé par l'espace de noms dans lequel il existe. L'espace de noms doit être soit l'espace de noms default, soit l'espace de noms dans lequel la VM doit être créée. Dans ce cas, multus est utilisé. Multus est un plugin d'interface de réseau en nuage (CNI) qui permet à plusieurs CNI d'exister afin qu'un pod ou une machine virtuelle puisse utiliser les interfaces dont il a besoin.
  3. Appliquer la configuration :

    oc apply -f <example-vm.yaml>
  4. Facultatif : si vous modifiez une machine virtuelle en cours d'exécution, vous devez la redémarrer pour que les modifications soient prises en compte.

10.21.4. Connexion d'une machine virtuelle à un réseau SR-IOV

Vous pouvez connecter une machine virtuelle (VM) à un réseau de virtualisation d'E/S à racine unique (SR-IOV) en procédant comme suit :

  1. Configurer un périphérique de réseau SR-IOV.
  2. Configurer un réseau SR-IOV.
  3. Connecter la VM au réseau SR-IOV.

10.21.4.1. Conditions préalables

10.21.4.2. Configuration des périphériques de réseau SR-IOV

L'opérateur de réseau SR-IOV ajoute la ressource SriovNetworkNodePolicy.sriovnetwork.openshift.io CustomResourceDefinition à OpenShift Container Platform. Vous pouvez configurer un périphérique réseau SR-IOV en créant une ressource personnalisée (CR) SriovNetworkNodePolicy.

Note

Lors de l'application de la configuration spécifiée dans un objet SriovNetworkNodePolicy, l'opérateur SR-IOV peut vidanger les nœuds et, dans certains cas, les redémarrer.

L'application d'une modification de configuration peut prendre plusieurs minutes.

Conditions préalables

  • You installed the OpenShift CLI (oc).
  • Vous avez accès au cluster en tant qu'utilisateur ayant le rôle cluster-admin.
  • Vous avez installé l'opérateur de réseau SR-IOV.
  • Vous avez suffisamment de nœuds disponibles dans votre cluster pour gérer la charge de travail expulsée des nœuds épuisés.
  • Vous n'avez sélectionné aucun nœud du plan de contrôle pour la configuration des équipements du réseau SR-IOV.

Procédure

  1. Créez un objet SriovNetworkNodePolicy, puis enregistrez le YAML dans le fichier <name>-sriov-node-network.yaml. Remplacez <name> par le nom de cette configuration.

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: <name> 1
      namespace: openshift-sriov-network-operator 2
    spec:
      resourceName: <sriov_resource_name> 3
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true" 4
      priority: <priority> 5
      mtu: <mtu> 6
      numVfs: <num> 7
      nicSelector: 8
        vendor: "<vendor_code>" 9
        deviceID: "<device_id>" 10
        pfNames: ["<pf_name>", ...] 11
        rootDevices: ["<pci_bus_id>", "..."] 12
      deviceType: vfio-pci 13
      isRdma: false 14
    1
    Spécifiez un nom pour l'objet CR.
    2
    Indiquer l'espace de noms dans lequel l'opérateur SR-IOV est installé.
    3
    Indiquez le nom de la ressource du plugin de périphérique SR-IOV. Vous pouvez créer plusieurs objets SriovNetworkNodePolicy pour un nom de ressource.
    4
    Spécifiez le sélecteur de nœuds pour sélectionner les nœuds à configurer. Seuls les périphériques réseau SR-IOV des nœuds sélectionnés sont configurés. Le plugin SR-IOV Container Network Interface (CNI) et le plugin de périphérique sont déployés uniquement sur les nœuds sélectionnés.
    5
    Facultatif : Indiquez une valeur entière comprise entre 0 et 99. Un nombre plus petit a une priorité plus élevée, donc une priorité de 10 est plus élevée qu'une priorité de 99. La valeur par défaut est 99.
    6
    Facultatif : Spécifiez une valeur pour l'unité de transmission maximale (MTU) de la fonction virtuelle. La valeur maximale du MTU peut varier selon les modèles de NIC.
    7
    Indiquez le nombre de fonctions virtuelles (VF) à créer pour le périphérique de réseau physique SR-IOV. Pour un contrôleur d'interface réseau (NIC) Intel, le nombre de VF ne peut pas être supérieur au nombre total de VF pris en charge par le périphérique. Pour un NIC Mellanox, le nombre de VF ne peut pas être supérieur à 128.
    8
    Le mappage nicSelector sélectionne l'appareil Ethernet que l'opérateur doit configurer. Il n'est pas nécessaire de spécifier des valeurs pour tous les paramètres. Il est recommandé d'identifier l'adaptateur Ethernet avec suffisamment de précision pour minimiser la possibilité de sélectionner un périphérique Ethernet par inadvertance. Si vous spécifiez rootDevices, vous devez également spécifier une valeur pour vendor, deviceID ou pfNames. Si vous spécifiez pfNames et rootDevices en même temps, assurez-vous qu'ils pointent vers un périphérique identique.
    9
    Facultatif : Indiquez le code hexadécimal du fournisseur de l'appareil réseau SR-IOV. Les seules valeurs autorisées sont 8086 ou 15b3.
    10
    Facultatif : Indiquez le code hexadécimal du périphérique du réseau SR-IOV. Les seules valeurs autorisées sont 158b, 1015, 1017.
    11
    Facultatif : Ce paramètre accepte un tableau d'un ou plusieurs noms de fonctions physiques (PF) pour le périphérique Ethernet.
    12
    Ce paramètre accepte un tableau d'une ou plusieurs adresses de bus PCI pour la fonction physique du périphérique Ethernet. Indiquez l'adresse au format suivant : 0000:02:00.1.
    13
    Le type de pilote vfio-pci est requis pour les fonctions virtuelles dans OpenShift Virtualization.
    14
    Facultatif : Indiquez si le mode RDMA (remote direct memory access) doit être activé. Pour une carte Mellanox, définissez isRdma sur false. La valeur par défaut est false.
    Note

    Si l'indicateur isRDMA est défini sur true, vous pouvez continuer à utiliser le VF compatible RDMA comme un périphérique réseau normal. Un périphérique peut être utilisé dans l'un ou l'autre mode.

  2. Facultatif : Étiqueter les nœuds de cluster compatibles SR-IOV avec SriovNetworkNodePolicy.Spec.NodeSelector s'ils ne le sont pas déjà. Pour plus d'informations sur l'étiquetage des nœuds, voir "Understanding how to update labels on nodes".
  3. Créer l'objet SriovNetworkNodePolicy:

    oc create -f <name>-sriov-node-network.yaml

    <name> spécifie le nom de cette configuration.

    Après l'application de la mise à jour de la configuration, tous les pods de l'espace de noms sriov-network-operator passent à l'état Running.

  4. Pour vérifier que le dispositif de réseau SR-IOV est configuré, entrez la commande suivante. Remplacez <node_name> par le nom d'un nœud avec le dispositif de réseau SR-IOV que vous venez de configurer.

    oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'

10.21.4.3. Configuration du réseau supplémentaire SR-IOV

Vous pouvez configurer un réseau supplémentaire qui utilise le matériel SR-IOV en créant un objet SriovNetwork.

Lorsque vous créez un objet SriovNetwork, l'opérateur de réseau SR-IOV crée automatiquement un objet NetworkAttachmentDefinition.

Note

Ne modifiez pas et ne supprimez pas un objet SriovNetwork s'il est attaché à des pods ou à des machines virtuelles dans un état running.

Conditions préalables

  • Installez le CLI OpenShift (oc).
  • Connectez-vous en tant qu'utilisateur disposant des privilèges cluster-admin.

Procédure

  1. Créez l'objet SriovNetwork suivant, puis enregistrez le YAML dans le fichier <name>-sriov-network.yaml. Remplacez <name> par un nom pour ce réseau supplémentaire.
apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetwork
metadata:
  name: <name> 1
  namespace: openshift-sriov-network-operator 2
spec:
  resourceName: <sriov_resource_name> 3
  networkNamespace: <target_namespace> 4
  vlan: <vlan> 5
  spoofChk: "<spoof_check>" 6
  linkState: <link_state> 7
  maxTxRate: <max_tx_rate> 8
  minTxRate: <min_rx_rate> 9
  vlanQoS: <vlan_qos> 10
  trust: "<trust_vf>" 11
  capabilities: <capabilities> 12
1
Remplacez <name> par un nom pour l'objet. L'opérateur du réseau SR-IOV crée un objet NetworkAttachmentDefinition portant le même nom.
2
Indiquer l'espace de noms dans lequel l'opérateur de réseau SR-IOV est installé.
3
Remplacer <sriov_resource_name> par la valeur du paramètre .spec.resourceName de l'objet SriovNetworkNodePolicy qui définit le matériel SR-IOV pour ce réseau supplémentaire.
4
Remplacez <target_namespace> par l'espace de noms cible du SriovNetwork. Seuls les pods ou les machines virtuelles de l'espace de noms cible peuvent s'attacher au SriovNetwork.
5
Facultatif : Remplacez <vlan> par un ID de réseau local virtuel (VLAN) pour le réseau supplémentaire. La valeur entière doit être comprise entre 0 et 4095. La valeur par défaut est 0.
6
Facultatif : Remplacer <spoof_check> par le mode de vérification de l'usurpation d'identité du VF. Les valeurs autorisées sont les chaînes "on" et "off".
Important

Vous devez mettre la valeur que vous indiquez entre guillemets, sinon le CR est rejeté par l'opérateur de réseau SR-IOV.

7
Facultatif : Remplacer <link_state> par l'état de la liaison de la fonction virtuelle (VF). Les valeurs autorisées sont enable, disable et auto.
8
Facultatif : Remplacez <max_tx_rate> par un taux de transmission maximal, en Mbps, pour le VF.
9
Facultatif : Remplacer <min_tx_rate> par un taux de transmission minimum, en Mbps, pour le VF. Cette valeur doit toujours être inférieure ou égale à la vitesse de transmission maximale.
Note

Les cartes réseau Intel ne prennent pas en charge le paramètre minTxRate. Pour plus d'informations, voir BZ#1772847.

10
Facultatif : Remplacez <vlan_qos> par un niveau de priorité IEEE 802.1p pour le VF. La valeur par défaut est 0.
11
Optionnel : Remplacer <trust_vf> par le mode de confiance du VF. Les valeurs autorisées sont les chaînes "on" et "off".
Important

Vous devez mettre la valeur que vous indiquez entre guillemets, sinon le CR est rejeté par l'opérateur de réseau SR-IOV.

12
Facultatif : Remplacez <capabilities> par les capacités à configurer pour ce réseau.
  1. Pour créer l'objet, entrez la commande suivante. Remplacez <name> par un nom pour ce réseau supplémentaire.

    oc create -f <name>-sriov-network.yaml
  2. Facultatif : Pour confirmer que l'objet NetworkAttachmentDefinition associé à l'objet SriovNetwork que vous avez créé à l'étape précédente existe, entrez la commande suivante. Remplacez <namespace> par l'espace de noms que vous avez spécifié dans l'objet SriovNetwork.

    oc get net-attach-def -n <namespace>

10.21.4.4. Connexion d'une machine virtuelle à un réseau SR-IOV

Vous pouvez connecter la machine virtuelle (VM) au réseau SR-IOV en incluant les détails du réseau dans la configuration de la VM.

Procédure

  1. Inclure les détails du réseau SR-IOV dans les pages spec.domain.devices.interfaces et spec.networks de la configuration de la VM :

    kind: VirtualMachine
    ...
    spec:
      domain:
        devices:
          interfaces:
          - name: <default> 1
            masquerade: {} 2
          - name: <nic1> 3
            sriov: {}
      networks:
      - name: <default> 4
        pod: {}
      - name: <nic1> 5
        multus:
            networkName: <sriov-network> 6
    ...
    1
    Un nom unique pour l'interface qui est connectée au réseau de pods.
    2
    La liaison masquerade au réseau de pods par défaut.
    3
    Un nom unique pour l'interface SR-IOV.
    4
    Le nom de l'interface réseau du pod. Ce nom doit être identique à celui de interfaces.name que vous avez défini précédemment.
    5
    Le nom de l'interface SR-IOV. Il doit être identique au nom interfaces.name que vous avez défini précédemment.
    6
    Le nom de la définition de l'attachement au réseau SR-IOV.
  2. Appliquer la configuration de la machine virtuelle :

    oc apply -f <vm-sriov.yaml> 1
    1
    Le nom du fichier YAML de la machine virtuelle.

10.21.5. Connexion d'une machine virtuelle à un maillage de services

OpenShift Virtualization est désormais intégré à OpenShift Service Mesh. Vous pouvez surveiller, visualiser et contrôler le trafic entre les pods qui exécutent des charges de travail de machines virtuelles sur le réseau de pods par défaut avec IPv4.

10.21.5.1. Conditions préalables

10.21.5.2. Configuration d'une machine virtuelle pour le maillage de services

Pour ajouter une charge de travail de machine virtuelle (VM) à un maillage de services, activez l'injection automatique de sidecar dans le fichier de configuration de la VM en définissant l'annotation sidecar.istio.io/inject sur true. Exposez ensuite votre VM en tant que service pour visualiser votre application dans le maillage.

Conditions préalables

  • Pour éviter les conflits de ports, n'utilisez pas les ports utilisés par le proxy Istio sidecar. Il s'agit notamment des ports 15000, 15001, 15006, 15008, 15020, 15021 et 15090.

Procédure

  1. Modifiez le fichier de configuration de la VM pour ajouter l'annotation sidecar.istio.io/inject: "true".

    Exemple de fichier de configuration

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm-istio
      name: vm-istio
    spec:
      runStrategy: Always
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-istio
            app: vm-istio 1
          annotations:
            sidecar.istio.io/inject: "true" 2
        spec:
          domain:
            devices:
              interfaces:
              - name: default
                masquerade: {} 3
              disks:
              - disk:
                  bus: virtio
                name: containerdisk
              - disk:
                  bus: virtio
                name: cloudinitdisk
            resources:
              requests:
                memory: 1024M
          networks:
          - name: default
            pod: {}
          terminationGracePeriodSeconds: 180
          volumes:
          - containerDisk:
              image: registry:5000/kubevirt/fedora-cloud-container-disk-demo:devel
            name: containerdisk

    1
    La paire clé/valeur (étiquette) qui doit être associée à l'attribut du sélecteur de service.
    2
    L'annotation permettant d'activer l'injection automatique de sidecar.
    3
    La méthode de liaison (mode masqué) à utiliser avec le réseau de pods par défaut.
  2. Appliquer la configuration de la VM :

    oc apply -f <vm_name>.yaml 1
    1
    Le nom du fichier YAML de la machine virtuelle.
  3. Créez un objet Service pour exposer votre VM au réseau de services.

      apiVersion: v1
      kind: Service
      metadata:
        name: vm-istio
      spec:
        selector:
          app: vm-istio 1
        ports:
          - port: 8080
            name: http
            protocol: TCP
    1
    Le sélecteur de service qui détermine l'ensemble des pods ciblés par un service. Cet attribut correspond au champ spec.metadata.labels dans le fichier de configuration de la VM. Dans l'exemple ci-dessus, l'objet Service nommé vm-istio cible le port TCP 8080 sur n'importe quel module portant l'étiquette app=vm-istio.
  4. Créer le service :

    oc create -f <service_name>.yaml 1
    1
    Le nom du fichier YAML du service.

10.21.6. Configuration des adresses IP pour les machines virtuelles

Vous pouvez configurer des adresses IP dynamiques ou statiques pour les machines virtuelles.

Conditions préalables

  • La machine virtuelle doit se connecter à un réseau externe.
  • Vous devez disposer d'un serveur DHCP sur le réseau supplémentaire pour configurer une IP dynamique pour la machine virtuelle.

10.21.6.1. Configurer une adresse IP pour une nouvelle machine virtuelle à l'aide de cloud-init

Vous pouvez utiliser cloud-init pour configurer une adresse IP lorsque vous créez une machine virtuelle. L'adresse IP peut être fournie de manière dynamique ou statique.

Procédure

  • Créez une configuration de machine virtuelle et incluez les détails du réseau cloud-init dans le champ spec.volumes.cloudInitNoCloud.networkData de la configuration de la machine virtuelle :

    1. Pour configurer une IP dynamique, spécifiez le nom de l'interface et le booléen dhcp4:

      kind: VirtualMachine
      spec:
      ...
        volumes:
        - cloudInitNoCloud:
            networkData: |
              version: 2
              ethernets:
                eth1: 1
                  dhcp4: true 2
      1
      Le nom de l'interface.
      2
      Utilise DHCP pour fournir une adresse IPv4.
    2. Pour configurer une IP statique, spécifiez le nom de l'interface et l'adresse IP :

      kind: VirtualMachine
      spec:
      ...
        volumes:
        - cloudInitNoCloud:
            networkData: |
              version: 2
              ethernets:
                eth1: 1
                  addresses:
                  - 10.10.10.14/24 2
      1
      Le nom de l'interface.
      2
      L'adresse IP statique de la machine virtuelle.

10.21.7. Afficher l'adresse IP des cartes réseau d'une machine virtuelle

Vous pouvez afficher l'adresse IP d'un contrôleur d'interface réseau (NIC) en utilisant la console Web ou le client oc. L'agent invité QEMU affiche des informations supplémentaires sur les réseaux secondaires de la machine virtuelle.

10.21.7.1. Conditions préalables

  • Installer l'agent invité QEMU sur la machine virtuelle.

10.21.7.2. Afficher l'adresse IP d'une interface de machine virtuelle dans le CLI

La configuration de l'interface réseau est incluse dans la commande oc describe vmi <vmi_name>.

Vous pouvez également afficher les informations relatives à l'adresse IP en exécutant ip addr sur la machine virtuelle ou en exécutant oc get vmi <vmi_name> -o yaml.

Procédure

  • Utilisez la commande oc describe pour afficher la configuration de l'interface de la machine virtuelle :

    $ oc describe vmi <nom_du_vmi>

    Exemple de sortie

    ...
    Interfaces:
       Interface Name:  eth0
       Ip Address:      10.244.0.37/24
       Ip Addresses:
         10.244.0.37/24
         fe80::858:aff:fef4:25/64
       Mac:             0a:58:0a:f4:00:25
       Name:            default
       Interface Name:  v2
       Ip Address:      1.1.1.7/24
       Ip Addresses:
         1.1.1.7/24
         fe80::f4d9:70ff:fe13:9089/64
       Mac:             f6:d9:70:13:90:89
       Interface Name:  v1
       Ip Address:      1.1.1.1/24
       Ip Addresses:
         1.1.1.1/24
         1.1.1.2/24
         1.1.1.4/24
         2001:de7:0:f101::1/64
         2001:db8:0:f101::1/64
         fe80::1420:84ff:fe10:17aa/64
       Mac:             16:20:84:10:17:aa

10.21.7.3. Afficher l'adresse IP d'une interface de machine virtuelle dans la console web

Les informations IP sont affichées sur la page VirtualMachine details pour la machine virtuelle.

Procédure

  1. Dans la console OpenShift Container Platform, cliquez sur Virtualization VirtualMachines dans le menu latéral.
  2. Sélectionnez un nom de machine virtuelle pour ouvrir la page VirtualMachine details.

Les informations relatives à chaque NIC connecté sont affichées sous IP Address dans l'onglet Details.

10.21.8. Utilisation d'un pool d'adresses MAC pour les machines virtuelles

Le composant KubeMacPool fournit un service de pool d'adresses MAC pour les cartes d'interface réseau des machines virtuelles dans un espace de noms.

10.21.8.1. À propos de KubeMacPool

KubeMacPool fournit un pool d'adresses MAC par espace de noms et attribue des adresses MAC aux cartes d'interface réseau des machines virtuelles à partir du pool. Cela garantit que la carte d'interface réseau se voit attribuer une adresse MAC unique qui n'entre pas en conflit avec l'adresse MAC d'une autre machine virtuelle.

Les instances de machines virtuelles créées à partir de cette machine virtuelle conservent l'adresse MAC attribuée lors des redémarrages.

Note

KubeMacPool ne gère pas les instances de machines virtuelles créées indépendamment d'une machine virtuelle.

KubeMacPool est activé par défaut lors de l'installation d'OpenShift Virtualization. Vous pouvez désactiver un pool d'adresses MAC pour un espace de noms en ajoutant le label mutatevirtualmachines.kubemacpool.io=ignore à l'espace de noms. Réactivez KubeMacPool pour l'espace de noms en supprimant le label.

10.21.8.2. Désactivation d'un pool d'adresses MAC pour un espace de noms dans la CLI

Désactiver un pool d'adresses MAC pour les machines virtuelles dans un espace de noms en ajoutant l'étiquette mutatevirtualmachines.kubemacpool.io=ignore à l'espace de noms.

Procédure

  • Ajoutez l'étiquette mutatevirtualmachines.kubemacpool.io=ignore à l'espace de noms. L'exemple suivant désactive KubeMacPool pour deux espaces de noms, <namespace1> et <namespace2>:

    $ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io=ignore

10.21.8.3. Réactivation d'un pool d'adresses MAC pour un espace de noms dans la CLI

Si vous avez désactivé KubeMacPool pour un espace de noms et que vous souhaitez le réactiver, supprimez l'étiquette mutatevirtualmachines.kubemacpool.io=ignore de l'espace de noms.

Note

Les versions précédentes d'OpenShift Virtualization utilisaient le label mutatevirtualmachines.kubemacpool.io=allocate pour activer KubeMacPool pour un espace de noms. Ceci est toujours supporté mais redondant car KubeMacPool est maintenant activé par défaut.

Procédure

  • Supprimer l'étiquette KubeMacPool de l'espace de noms. L'exemple suivant réactive KubeMacPool pour deux espaces de noms, <namespace1> et <namespace2>:

    oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io-
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.