10.21. Mise en réseau de machines virtuelles
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
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 valeurport
doit être un nombre compris entre 0 et 65536. Lorsque le tableauports
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 port80
.
NoteLes ports 49152 et 49153 sont réservés à l'usage de la plateforme libvirt et tout autre trafic entrant vers ces ports est supprimé.
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
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 estfd10: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 estfd10:0:2::1
.
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éfauttype
. - 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.
NotePour 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
.
Ressources supplémentaires
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
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 sectionspec.template.metadata.labels
.
NoteLes étiquettes d'une machine virtuelle sont transmises au pod. L'étiquette
special: key
doit correspondre à l'étiquette de l'attributspec.selector
du manifesteService
.-
Enregistrez le fichier manifeste
VirtualMachine
pour appliquer vos modifications. 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 champmetadata.namespace
du manifesteVirtualMachine
. - 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
etLoadBalancer
. La valeur par défaut estCluster
, 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 queport
. - 6
- La référence à l'étiquette que vous avez ajoutée dans la strophe
spec.template.metadata.labels
du manifesteVirtualMachine
. - 7
- Le type de service. Les valeurs possibles sont
ClusterIP
,NodePort
etLoadBalancer
.
-
Enregistrez le fichier manifeste
Service
. Créez le service en exécutant la commande suivante :
oc create -f <service_name>.yaml
- Démarrez la VM. Si la VM est déjà en cours d'exécution, redémarrez-la.
Vérification
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
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 clientvinagre
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 :
- Créer une politique de configuration du réseau du nœud de pont Linux.
- Créer une définition de l'attachement au réseau Linux bridge.
- 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
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
-
Dans la console web, cliquez sur Networking
Network Attachment Definitions. Cliquez sur Create Network Attachment Definition.
NoteLa définition de l'attachement réseau doit se trouver dans le même espace de noms que le pod ou la machine virtuelle.
- Saisissez une adresse unique Name et une adresse facultative Description.
- Cliquez sur la liste Network Type et sélectionnez CNV Linux bridge.
- Entrez le nom du pont dans le champ Bridge Name.
- Facultatif : si la ressource a des ID VLAN configurés, saisissez les numéros d'ID dans le champ VLAN Tag Number.
- 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.
Cliquez sur Create.
NoteLa 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
- Créez une définition de pièce jointe au réseau dans le même espace de noms que la machine virtuelle.
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 pontbridge-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.
NoteLa 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.
Créer la définition de la pièce jointe au réseau :
oc create -f <network-attachment-definition.yaml> 1
- 1
- Où
<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
-
Dans le bon projet de la console OpenShift Container Platform, cliquez sur Virtualization
VirtualMachines dans le menu latéral. - Sélectionnez une machine virtuelle pour ouvrir la page VirtualMachine details.
- Cliquez sur l'onglet Network Interfaces pour afficher les cartes réseau déjà connectées à la machine virtuelle.
- Cliquez sur Add Network Interface pour créer un nouvel emplacement dans la liste.
- Sélectionnez une définition d'attachement au réseau dans la liste Network pour le réseau supplémentaire.
- Remplissez les champs Name, Model, Type, et MAC Address pour le nouveau NIC.
- Cliquez sur Save pour enregistrer et attacher le NIC à la machine virtuelle.
10.21.3.3.2. Domaines de mise en réseau
Nom | Description |
---|---|
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 :
|
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
- Créez ou modifiez la configuration d'une machine virtuelle que vous souhaitez connecter au réseau de ponts.
Ajoutez l'interface de pont à la liste
spec.template.spec.domain.devices.interfaces
et la définition de l'attachement au réseau à la listespec.template.spec.networks
. Cet exemple ajoute une interface de pont appeléebridge-net
qui se connecte à la définition de l'attachement au réseaua-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éespec.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.
Appliquer la configuration :
oc apply -f <example-vm.yaml>
- 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 :
- Configurer un périphérique de réseau SR-IOV.
- Configurer un réseau SR-IOV.
- Connecter la VM au réseau SR-IOV.
10.21.4.1. Conditions préalables
- Vous devez avoir activé les paramètres SR-IOV et VT-d globaux dans le micrologiciel de l'hôte.
- Vous devez avoir installé l'opérateur de réseau SR-IOV.
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.
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
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
et99
. Un nombre plus petit a une priorité plus élevée, donc une priorité de10
est plus élevée qu'une priorité de99
. La valeur par défaut est99
. - 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écifiezrootDevices
, vous devez également spécifier une valeur pourvendor
,deviceID
oupfNames
. Si vous spécifiezpfNames
etrootDevices
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
ou15b3
. - 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
surfalse
. La valeur par défaut estfalse
.
NoteSi l'indicateur
isRDMA
est défini surtrue
, 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.-
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". Créer l'objet
SriovNetworkNodePolicy
:oc create -f <name>-sriov-node-network.yaml
où
<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'étatRunning
.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
.
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
-
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 objetNetworkAttachmentDefinition
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'objetSriovNetworkNodePolicy
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 entre0
et4095
. La valeur par défaut est0
. - 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"
.ImportantVous 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 sontenable
,disable
etauto
. - 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.NoteLes 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 est0
. - 11
- Optionnel : Remplacer
<trust_vf>
par le mode de confiance du VF. Les valeurs autorisées sont les chaînes"on"
et"off"
.ImportantVous 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.
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
Facultatif : Pour confirmer que l'objet
NetworkAttachmentDefinition
associé à l'objetSriovNetwork
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'objetSriovNetwork
.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
Inclure les détails du réseau SR-IOV dans les pages
spec.domain.devices.interfaces
etspec.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.
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
- Vous devez avoir installé le Service Mesh Operator et déployé le plan de contrôle du service mesh.
- Vous devez avoir ajouté l'espace de noms où la machine virtuelle est créée au rouleau de membres du maillage de services.
-
Vous devez utiliser la méthode de liaison
masquerade
pour le réseau de pods par défaut.
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
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
Appliquer la configuration de la VM :
oc apply -f <vm_name>.yaml 1
- 1
- Le nom du fichier YAML de la machine virtuelle.
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'objetService
nommévm-istio
cible le port TCP 8080 sur n'importe quel module portant l'étiquetteapp=vm-istio
.
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 :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
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
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
-
Dans la console OpenShift Container Platform, cliquez sur Virtualization
VirtualMachines dans le menu latéral. - 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.
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.
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-