22.5. Attacher un pod à un réseau supplémentaire
En tant qu'utilisateur du cluster, vous pouvez attacher un pod à un réseau supplémentaire.
22.5.1. Ajouter un pod à un réseau supplémentaire
Vous pouvez ajouter un module à un réseau supplémentaire. Le pod continue à envoyer le trafic réseau normal lié au cluster sur le réseau par défaut.
Lorsqu'un module est créé, des réseaux supplémentaires lui sont rattachés. Toutefois, si un module existe déjà, il n'est pas possible d'y attacher des réseaux supplémentaires.
Le pod doit se trouver dans le même espace de noms que le réseau supplémentaire.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). - Connectez-vous au cluster.
Procédure
Ajouter une annotation à l'objet
Pod
. Un seul des formats d'annotation suivants peut être utilisé :Pour attacher un réseau supplémentaire sans aucune personnalisation, ajoutez une annotation avec le format suivant. Remplacez
<network>
par le nom du réseau supplémentaire à associer au pod :metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...] 1
- 1
- Pour spécifier plus d'un réseau supplémentaire, séparez chaque réseau par une virgule. N'incluez pas d'espace entre les virgules. Si vous spécifiez plusieurs fois le même réseau supplémentaire, plusieurs interfaces réseau seront attachées à ce pod.
Pour joindre un réseau supplémentaire avec des personnalisations, ajoutez une annotation avec le format suivant :
metadata: annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "<network>", 1 "namespace": "<namespace>", 2 "default-route": ["<default-route>"] 3 } ]
Pour créer le module, entrez la commande suivante. Remplacez
<name>
par le nom du module.$ oc create -f <name>.yaml
Facultatif : Pour confirmer que l'annotation existe dans le CR
Pod
, entrez la commande suivante, en remplaçant<name>
par le nom du module.$ oc get pod <name> -o yaml
Dans l'exemple suivant, le pod
example-pod
est rattaché au réseau supplémentairenet1
:$ oc get pod example-pod -o yaml apiVersion: v1 kind: Pod metadata: annotations: k8s.v1.cni.cncf.io/networks: macvlan-bridge k8s.v1.cni.cncf.io/networks-status: |- 1 [{ "name": "openshift-sdn", "interface": "eth0", "ips": [ "10.128.2.14" ], "default": true, "dns": {} },{ "name": "macvlan-bridge", "interface": "net1", "ips": [ "20.2.2.100" ], "mac": "22:2f:60:a5:f8:00", "dns": {} }] name: example-pod namespace: default spec: ... status: ...
- 1
- Le paramètre
k8s.v1.cni.cncf.io/networks-status
est un tableau JSON d'objets. Chaque objet décrit l'état d'un réseau supplémentaire attaché au pod. La valeur de l'annotation est stockée sous forme de texte brut.
22.5.1.1. Spécification des options d'adressage et de routage spécifiques au pod
Lorsque vous attachez un module à un réseau supplémentaire, vous pouvez vouloir spécifier d'autres propriétés de ce réseau dans un module particulier. Cela vous permet de modifier certains aspects du routage, ainsi que de spécifier des adresses IP et des adresses MAC statiques. Pour ce faire, vous pouvez utiliser les annotations au format JSON.
Conditions préalables
- Le pod doit se trouver dans le même espace de noms que le réseau supplémentaire.
-
Installez le CLI OpenShift (
oc
). - Vous devez vous connecter au cluster.
Procédure
Pour ajouter un pod à un réseau supplémentaire tout en spécifiant des options d'adressage et/ou de routage, procédez comme suit :
Modifiez la définition de la ressource
Pod
. Si vous modifiez une ressourcePod
existante, exécutez la commande suivante pour modifier sa définition dans l'éditeur par défaut. Remplacez<name>
par le nom de la ressourcePod
à modifier.oc edit pod <name> $ oc edit pod <name>
Dans la définition de la ressource
Pod
, ajoutez le paramètrek8s.v1.cni.cncf.io/networks
au mappage du podmetadata
. Le paramètrek8s.v1.cni.cncf.io/networks
accepte une chaîne JSON d'une liste d'objets référençant le nom des ressources personnalisées (CR)NetworkAttachmentDefinition
en plus de spécifier des propriétés supplémentaires.metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]' 1
- 1
- Remplacez
<network>
par un objet JSON comme indiqué dans les exemples suivants. Les guillemets simples sont obligatoires.
Dans l'exemple suivant, l'annotation spécifie l'attachement réseau qui aura la route par défaut, en utilisant le paramètre
default-route
.apiVersion: v1 kind: Pod metadata: name: example-pod annotations: k8s.v1.cni.cncf.io/networks: ' { "name": "net1" }, { "name": "net2", 1 "default-route": ["192.0.2.1"] 2 }' spec: containers: - name: example-pod command: ["/bin/bash", "-c", "sleep 2000000000000"] image: centos/tools
- 1
- La clé
name
est le nom du réseau supplémentaire à associer au pod. - 2
- La clé
default-route
spécifie la valeur d'une passerelle sur laquelle le trafic doit être acheminé si aucune autre entrée de routage n'est présente dans la table de routage. Si plus d'une clédefault-route
est spécifiée, le pod ne sera pas activé.
La route par défaut permet d'acheminer vers la passerelle tout le trafic qui n'est pas spécifié dans d'autres routes.
La définition de la route par défaut sur une interface autre que l'interface réseau par défaut pour OpenShift Container Platform peut faire en sorte que le trafic prévu pour le trafic pod-to-pod soit acheminé sur une autre interface.
Pour vérifier les propriétés de routage d'un pod, la commande oc
peut être utilisée pour exécuter la commande ip
à l'intérieur d'un pod.
oc exec -it <nom_du_pod> -- ip route
Vous pouvez également consulter le site k8s.v1.cni.cncf.io/networks-status
du pod pour savoir quel réseau supplémentaire s'est vu attribuer la route par défaut, grâce à la présence de la clé default-route
dans la liste d'objets au format JSON.
Pour définir une adresse IP statique ou une adresse MAC pour un pod, vous pouvez utiliser les annotations au format JSON. Pour ce faire, vous devez créer des réseaux qui autorisent spécifiquement cette fonctionnalité. Ceci peut être spécifié dans un rawCNIConfig pour le CNO.
Modifiez le CR CNO en exécutant la commande suivante :
$ oc edit networks.operator.openshift.io cluster
Le fichier YAML suivant décrit les paramètres de configuration du CNO :
Configuration YAML de l'opérateur de réseau de cluster
name: <name> 1 namespace: <namespace> 2 rawCNIConfig: '{ 3 ... }' type: Raw
- 1
- Indiquez un nom pour la pièce jointe réseau supplémentaire que vous créez. Le nom doit être unique au sein de l'adresse
namespace
. - 2
- Indiquez l'espace de noms dans lequel créer la pièce jointe au réseau. Si vous ne spécifiez pas de valeur, l'espace de noms
default
est utilisé. - 3
- Spécifiez la configuration du plugin CNI au format JSON, qui est basé sur le modèle suivant.
L'objet suivant décrit les paramètres de configuration pour l'utilisation d'une adresse MAC statique et d'une adresse IP à l'aide du plugin CNI macvlan :
macvlan Objet de configuration JSON du plugin CNI utilisant une adresse IP et MAC statique
{ "cniVersion": "0.3.1", "name": "<name>", 1 "plugins": [{ 2 "type": "macvlan", "capabilities": { "ips": true }, 3 "master": "eth0", 4 "mode": "bridge", "ipam": { "type": "static" } }, { "capabilities": { "mac": true }, 5 "type": "tuning" }] }
- 1
- Spécifie le nom de la pièce jointe réseau supplémentaire à créer. Le nom doit être unique au sein de l'adresse
namespace
. - 2
- Spécifie un tableau de configurations de plugins CNI. Le premier objet spécifie une configuration de plugin macvlan et le second objet spécifie une configuration de plugin tuning.
- 3
- Spécifie qu'une demande est faite pour activer la fonctionnalité d'adresse IP statique des capacités de configuration d'exécution du plugin CNI.
- 4
- Spécifie l'interface utilisée par le plugin macvlan.
- 5
- Spécifie qu'une demande est faite pour activer la fonctionnalité d'adresse MAC statique d'un plugin CNI.
L'attachement réseau ci-dessus peut être référencé dans une annotation au format JSON, avec des clés permettant de spécifier l'adresse IP statique et l'adresse MAC qui seront attribuées à un pod donné.
Modifier le pod avec :
oc edit pod <name> $ oc edit pod <name>
macvlan Objet de configuration JSON du plugin CNI utilisant une adresse IP et MAC statique
apiVersion: v1 kind: Pod metadata: name: example-pod annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "<name>", 1 "ips": [ "192.0.2.205/24" ], 2 "mac": "CA:FE:C0:FF:EE:00" 3 } ]'
Les adresses IP statiques et les adresses MAC ne doivent pas nécessairement être utilisées en même temps ; vous pouvez les utiliser séparément ou ensemble.
Pour vérifier l'adresse IP et les propriétés MAC d'un module avec des réseaux supplémentaires, utilisez la commande oc
pour exécuter la commande ip dans un module.
oc exec -it <nom_du_pod> -- ip a