Cette page décrit l'opérateur Kubernetes spécialisé de fonction réseau fourni avec Google Distributed Cloud Connected. Cet opérateur implémente un ensemble de CustomResourceDefinitions (CRD) qui permettent à Distributed Cloud Connected d'exécuter des charges de travail hautes performances.
L'opérateur de fonction réseau et la fonctionnalité SR-IOV ne sont pas disponibles sur les serveurs Distributed Cloud Connected.
L'opérateur de fonction réseau vous permet d'effectuer les opérations suivantes :
- Interroger les appareils réseau existants sur un nœud.
- Interroger l'adresse IP et l'état du lien physique pour chaque appareil réseau sur un nœud.
- Provisionner des interfaces réseau supplémentaires sur un nœud.
- Configurer les fonctionnalités système de bas niveau sur la machine physique du nœud requises pour prendre en charge les charges de travail hautes performances.
- Utiliser la virtualisation d'entrée/sortie à racine unique (SR-IOV) sur les interfaces réseau PCI Express pour les virtualiser en plusieurs interfaces virtuelles. Vous pouvez ensuite configurer vos charges de travail Distributed Cloud Connected pour qu'elles utilisent ces interfaces réseau virtuelles.
La prise en charge de SR-IOV par Distributed Cloud Connected est basée sur les projets Open Source suivants :
Prérequis
L'opérateur de fonction réseau récupère la configuration réseau à partir de l'API Distributed Cloud Edge Network.
Pour ce faire, vous devez accorder le rôle Lecteur de réseau Edge (roles/edgenetwork.viewer) au compte de service de l'opérateur de fonction réseau à l'aide de la commande suivante :
gcloud projects add-iam-policy-binding ZONE_PROJECT_ID \ --role roles/edgenetwork.viewer \ --member "serviceAccount:CLUSTER_PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"
Remplacez les éléments suivants :
ZONE_PROJECT_IDpar l'ID du Google Cloud projet qui contient les ressources de l'API Distributed Cloud Edge Network.CLUSTER_PROJECT_IDpar l'ID du Google Cloud projet qui contient le cluster Distributed Cloud Connected cible.
Ressources de l'opérateur de fonction réseau
L'opérateur de fonction réseau Distributed Cloud Connected implémente les CRD Kubernetes suivants :
Network. Définit un réseau virtuel que les pods peuvent utiliser pour communiquer avec des ressources internes et externes. Vous devez créer le VLAN correspondant à l'aide de l'API Distributed Cloud Edge Network avant de le spécifier dans cette ressource. Pour obtenir des instructions, consultez la section Créer un réseau.NetworkInterfaceState. Permet de découvrir les états des interfaces réseau et d'interroger une interface réseau pour connaître l'état du lien et l'adresse IP.NodeSystemConfigUpdate. Permet de configurer des fonctionnalités système de bas niveau telles que les options de noyau et les indicateursKubelet.SriovNetworkNodePolicy. Sélectionne un groupe d'interfaces réseau virtualisées SR-IOV et instancie le groupe en tant que ressource Kubernetes. Vous pouvez utiliser cette ressource dans une ressourceNetworkAttachmentDefinition.SriovNetworkNodeState. Vous permet d'interroger l'état de provisionnement de la ressourceSriovNetworkNodePolicysur un nœud Distributed Cloud.NetworkAttachmentDefinition. Vous permet d'associer des pods Distributed Cloud à un ou plusieurs réseaux logiques ou physiques sur votre nœud Distributed Cloud Connected. Vous devez créer le VLAN correspondant à l'aide de l'API Distributed Cloud Edge Network avant de le spécifier dans cette ressource. Pour obtenir des instructions, consultez la section Créer un réseau.
L'opérateur de fonction réseau vous permet également de définir des interfaces réseau secondaires qui n'utilisent pas les fonctions virtuelles SR-IOV.
Ressource Network
La ressource Network définit un réseau virtuel dans le rack Distributed Cloud Connected que les pods de votre cluster Distributed Cloud Connected peuvent utiliser pour communiquer avec des ressources internes et externes.
La ressource Network fournit les paramètres configurables suivants pour l'interface réseau exposée en tant que champs accessibles en écriture :
spec.type: spécifie la couche de transport réseau pour ce réseau. La seule valeur valide estL2. Vous devez également spécifier une valeurnodeInterfaceMatcher.interfaceName.spec.nodeInterfaceMatcher.interfaceName: nom de l'interface réseau physique sur le nœud Distributed Cloud Connected cible à utiliser avec ce réseau.spec.gateway4: adresse IP de la passerelle réseau pour ce réseau.spec.l2NetworkConfig.prefixLength4: spécifie la plage CIDR pour ce réseau.annotations.networking.gke.io/gdce-vlan-id: spécifie l'ID de VLAN pour ce réseau.annotations.networking.gke.io/gdce-vlan-mtu: (facultatif) spécifie la valeur MTU pour ce réseau. Si elle est omise, elle hérite de la valeur MTU de l'interface parente.annotations.networking.gke.io/gdce-lb-service-vip-cidr: spécifie la plage d'adresses IP virtuelles pour le service d'équilibrage de charge. La valeur peut être un bloc CIDR ou une valeur de plage d'adresses explicite. Cette annotation est obligatoire pour l'équilibrage de charge de couche 3 et facultative pour l'équilibrage de charge de couche 2.
L'exemple suivant illustre la structure de la ressource :
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: vlan200-network
annotations:
networking.gke.io/gdce-vlan-id: 200
networking.gke.io/gdce-vlan-mtu: 1500
networking.gke.io/gdce-lb-service-vip-cidrs: "10.1.1.0/24"
spec:
type: L2
nodeInterfaceMatcher:
interfaceName: gdcenet0.200
gateway4: 10.53.0.1
Pour spécifier plusieurs plages d'adresses IP virtuelles pour le service d'équilibrage de charge, utilisez l'annotation networking.gke.io/gdce-lb-service-vip-cidrs. Vous pouvez fournir les valeurs de cette annotation sous forme de liste séparée par des virgules ou de charge utile JSON.
Exemple :
[
{
"name": "test-oam-3",
"addresses": ["10.235.128.133-10.235.128.133"],
"autoAssign": false
}
,
{
"name": "test-oam-4",
"addresses": ["10.235.128.134-10.235.128.134"],
"autoAssign": false
},
{
"name": "test-oam-5",
"addresses": ["10.235.128.135-10.235.128.135"],
"autoAssign": false
}
]
Si vous choisissez d'utiliser une charge utile JSON, nous vous recommandons d'utiliser le format JSON condensé. Exemple :
apiVersion: networking.gke.io/v1
kind: Network
metadata:
annotations:
networking.gke.io/gdce-lb-service-vip-cidrs: '[{"name":"test-oam-3","addresses":["10.235.128.133-10.235.128.133"],"autoAssign":false},{"name":"test-oam-4","addresses":["10.235.128.134-10.235.128.134"],"autoAssign":false},{"name":"test-oam-5","addresses":["10.235.128.135-10.235.128.135"],"autoAssign":false}]'
networking.gke.io/gdce-vlan-id: "81"
name: test-network-vlan81
spec:
IPAMMode: Internal
dnsConfig:
nameservers:
- 8.8.8.8
gateway4: 192.168.81.1
l2NetworkConfig:
prefixLength4: 24
nodeInterfaceMatcher:
interfaceName: gdcenet0.81
type: L2
N'oubliez pas que le champ autoAssign est défini sur false par défaut s'il est omis.
Ressource NetworkInterfaceState
La ressource NetworkInterfaceState est une ressource en lecture seule qui vous permet de découvrir les interfaces réseau physiques sur le nœud et de collecter des statistiques d'exécution sur le trafic réseau qui transite par ces interfaces.
Distributed Cloud crée une ressource NetworkInterfaceState pour chaque nœud d'un cluster.
La configuration par défaut des machines Distributed Cloud Connected inclut une interface réseau liée sur la carte fille réseau Rack Select (rNDC) nommée gdcenet0. Cette interface lie les interfaces réseau eno1np0 et eno2np1. Chacune d'elles est connectée à un commutateur ToR Distributed Cloud, respectivement.
La ressource NetworkInterfaceState fournit les catégories suivantes d'informations sur l'interface réseau exposées en tant que champs d'état en lecture seule.
Informations générales :
status.interfaces.ifname: nom de l'interface réseau cible.status.lastReportTime: date et heure du dernier rapport d'état pour l'interface cible.
Informations de configuration de l'adresse IP :
status.interfaces.interfaceinfo.address: adresse IP attribuée à l'interface cible.status.interfaces.interfaceinfo.dns: adresse IP du serveur DNS attribué à l'interface cible.status.interfaces.interfaceinfo.gateway: adresse IP de la passerelle réseau desservant l'interface cible.status.interfaces.interfaceinfo.prefixlen: longueur du préfixe IP.
Informations sur le matériel :
status.interfaces.linkinfo.broadcast: adresse MAC de diffusion de l'interface cible.status.interfaces.linkinfo.businfo: chemin d'accès à l'appareil PCIe au formatbus:slot.function.status.interfaces.linkinfo.flags: indicateurs d'interface, par exempleBROADCAST.status.interfaces.linkinfo.macAddress: adresse MAC Unicast de l'interface cible.status.interfaces.linkinfo.mtu: valeur MTU pour l'interface cible.
Statistiques de réception :
status.interfaces.statistics.rx.bytes: nombre total d'octets reçus par l'interface cible.status.interfaces.statistics.rx.dropped: nombre total de paquets supprimés par l'interface cible.status.interfaces.statistics.rx.errors: nombre total d'erreurs de réception de paquets pour l'interface cible.status.interfaces.statistics.rx.multicast: nombre total de paquets de multidiffusion reçus par l'interface cible.status.interfaces.statistics.rx.overErrors: nombre total d'erreurs de réception de paquets pour l'interface cible.status.interfaces.statistics.rx.packets: nombre total de paquets reçus par l'interface cible.
Statistiques de transmission :
status.interfaces.statistics.tx.bytes: nombre total d'octets transmis par l'interface cible.status.interfaces.statistics.tx.carrierErrors: nombre total d'erreurs de transport rencontrées par l'interface cible.status.interfaces.statistics.tx.collisions: nombre total de collisions de paquets rencontrées par l'interface cible.status.interfaces.statistics.tx.dropped: nombre total de paquets supprimés par l'interface cible.status.interfaces.statistics.tx.errors: nombre total d'erreurs de transmission pour l'interface cible.status.interfaces.statistics.tx.packets: nombre total de paquets transmis par l'interface cible.
L'exemple suivant illustre la structure de la ressource :
apiVersion: networking.gke.io/v1
kind: NetworkInterfaceState
metadata:
name: MyNode1
nodeName: MyNode1
status:
interfaces:
- ifname: eno1np0
linkinfo:
businfo: 0000:1a:00.0
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 1098522811
errors: 2
multicast: 190926
packets: 4988200
tx:
bytes: 62157709961
packets: 169847139
- ifname: eno2np1
linkinfo:
businfo: 0000:1a:00.1
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 33061895405
multicast: 110203
packets: 110447356
tx:
bytes: 2370516278
packets: 11324730
- ifname: enp95s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf4
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f4
mtu: 9000
statistics:
rx:
bytes: 37858381
multicast: 205645
packets: 205645
tx:
bytes: 1207334
packets: 6542
- ifname: enp95s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf5
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f5
mtu: 9000
statistics:
rx:
bytes: 37852406
multicast: 205607
packets: 205607
tx:
bytes: 1207872
packets: 6545
- ifname: enp134s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6c
prefixlen: 64
linkinfo:
businfo: 0000:86:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6c
mtu: 9000
statistics:
rx:
bytes: 37988773
multicast: 205584
packets: 205584
tx:
bytes: 1212385
packets: 6546
- ifname: enp134s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6d
prefixlen: 64
linkinfo:
businfo: 0000:86:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6d
mtu: 9000
statistics:
rx:
bytes: 37980702
multicast: 205548
packets: 205548
tx:
bytes: 1212297
packets: 6548
- ifname: gdcenet0
interfaceinfo:
- address: 208.117.254.36
prefixlen: 28
- address: fe80::b816:3ff:fe9e:9c87
prefixlen: 64
linkinfo:
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 34160422968
errors: 2
multicast: 301129
packets: 115435591
tx:
bytes: 64528301111
packets: 181171964
.. <remaining interfaces omitted>
lastReportTime: "2022-03-30T07:35:44Z"
Ressource NodeSystemConfigUpdate
La ressource NodeSystemConfigUpdate vous permet de modifier la configuration du système d'exploitation du nœud, ainsi que les indicateurs Kubelet. Les modifications autres que celles apportées à sysctl nécessitent le redémarrage du nœud.
Lorsque vous instanciez cette ressource, vous devez spécifier les nœuds cibles dans le champ nodeSelector. Vous devez inclure toutes les paires clé/valeur pour chaque nœud cible dans le champ nodeSelector. Lorsque vous spécifiez plusieurs nœuds cibles dans ce champ, les nœuds cibles sont mis à jour un par un.
ATTENTION : Le champ nodeName est obsolète. Son utilisation redémarre immédiatement les nœuds cibles, y compris les nœuds du plan de contrôle local, ce qui peut interrompre les charges de travail critiques.
La ressource NodeSystemConfigUpdate fournit les champs de configuration suivants spécifiques à Distributed Cloud Connected :
spec.containerRuntimeDNSConfig.ip: spécifie une liste d'adresses IP pour les registres d'images privées.spec.containerRuntimeDNSConfig: spécifie une liste d'entrées DNS personnalisées utilisées par l'environnement d'exécution de conteneur sur chaque nœud Distributed Cloud Connected. Chaque entrée comporte les champs suivants :ip: spécifie l'adresse IPv4 cible,domain: spécifie le domaine correspondant,interface: spécifie l'interface de sortie réseau via laquelle l'adresse IP spécifiée dans le champipest accessible. Vous pouvez spécifier une interface définie via les ressources suivantes :CustomNetworkInterfaceConfig,Network(par annotation),NetworkAttachmentDefinition(par annotation). Il s'agit d'une fonctionnalité en preview.
spec.kubeletConfig.cpuManagerPolicy: spécifie la règle Kubernetes CPUManager. Les valeurs valides sontNoneetStatic.spec.kubeletConfig.topologyManagerPolicy: spécifie la règle Kubernetes TopologyManager. Les valeurs valides sontNone,BestEffort,RestrictedetSingleNumaMode.spec.osConfig.hugePagesConfig: spécifie la configuration des pages volumineuses par nœud NUMA. Les valeurs valides sont2MBet1GB. Le nombre de pages volumineuses demandées est réparti de manière égale entre les deux nœuds NUMA du système. Par exemple, si vous allouez 16 pages volumineuses de 1 Go chacune, chaque nœud reçoit une pré-allocation de 8 Go.spec.osConfig.isolatedCpusPerSocket: spécifie le nombre de processeurs isolés par socket. Obligatoire sicpuManagerPolicyest défini surStatic. Le nombre maximal de processeurs isolés doit être inférieur à 80 % du nombre total de processeurs du nœud.spec.osConfig.cpuIsolationPolicy: spécifie la règle d'isolation du processeur. La règleDefaultisole uniquement les tâchessystemddes processeurs réservés aux charges de travail. La règleKernelmarque les processeurs commeisolcpuset définit les indicateursrcu_nocb,nohz_fulletrcu_nocb_pollsur chaque processeur.spec.sysctls.NodeLevel: spécifie les paramètressysctlsque vous pouvez configurer globalement sur un nœud à l'aide de l'opérateur de fonction réseau. Les paramètres configurables sont les suivants :fs.inotify.max_user_instancesfs.inotify.max_user_watcheskernel.sched_rt_runtime_uskernel.core_patternnet.ipv4.tcp_wmemnet.ipv4.tcp_rmemnet.ipv4.tcp_slow_start_after_idlenet.ipv4.udp_rmem_minnet.ipv4.udp_wmem_minnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.core.rmem_maxnet.core.wmem_maxnet.core.rmem_defaultnet.core.wmem_defaultnet.netfilter.nf_conntrack_tcp_timeout_unacknowledgednet.netfilter.nf_conntrack_tcp_timeout_max_retransnet.sctp.auth_enablenet.sctp.sctp_memnet.ipv4.udp_memnet.ipv4.tcp_memnet.ipv4.tcp_slow_start_after_idlenet.sctp.auth_enablevm.max_map_count
Vous pouvez également limiter les paramètres sécurisés et non sécurisés
sysctlsà un pod ou à un espace de noms spécifique à l'aide dutuningplug-in CNI (Container Networking Interface).
La ressource NodeSystemConfigUpdate fournit les champs d'état généraux en lecture seule suivants :
status.lastReportTime: dernière heure à laquelle l'état a été signalé pour l'interface cible.status.conditions.lastTransitionTime: dernière heure à laquelle l'état de l'interface a changé.status.conditions.observedGeneration: indique la valeur.metadata.generationsur laquelle la condition initiale était basée.status.conditions.message: message informatif décrivant le changement d'état de l'interface.status.conditions.reason: identifiant programmatique indiquant la raison du dernier changement d'état de l'interface.status.conditions.status: descripteur d'état de la condition. Les valeurs valides sontTrue,FalseetUnknown.status.conditions.type: type de condition au format camelCase.
L'exemple suivant illustre la structure de la ressource :
apiVersion: networking.gke.io/v1
kind: NodeSystemConfigUpdate
metadata:
name: node-pool-1-config
namespace: default
spec:
nodeSelector:
baremetal.cluster.gke.io/node-pool: node-pool-1
networking.gke.io/worker-network-sriov.capable: true
sysctls:
nodeLevel:
"net.ipv4.udp_mem" : "12348035 16464042 24696060"
kubeletConfig:
topologyManagerPolicy: BestEffort
cpuManagerPolicy: Static
osConfig:
hugePagesConfig:
"TWO_MB": 0
"ONE_GB": 16
isolatedCpusPerSocket:
"0": 10
"1": 10
Ressource SriovNetworkNodePolicy
La ressource SriovNetworkNodePolicy vous permet d'allouer un groupe de fonctions virtuelles (VF) SR-IOV sur une machine physique Distributed Cloud Connected et d'instancier ce groupe en tant que ressource Kubernetes. Vous pouvez ensuite utiliser cette ressource dans une ressource NetworkAttachmentDefinition.
Vous pouvez sélectionner chaque VF cible par son fournisseur PCIe et son ID d'appareil, ses adresses d'appareil PCIe ou par son nom d'appareil énuméré Linux. L'opérateur de réseau SR-IOV configure chaque interface réseau physique pour provisionner les VF cibles. Cela inclut la mise à jour du micrologiciel de l'interface réseau, la configuration du pilote de noyau Linux et le redémarrage de la machine Distributed Cloud Connected, si nécessaire.
Pour découvrir les interfaces réseau disponibles sur votre nœud, vous pouvez rechercher les
NetworkInterfaceState ressources
sur ce nœud dans l'espace de noms nf-operator.
L'exemple suivant illustre la structure de la ressource :
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodePolicy
metadata:
name: mlnx6-p2-sriov-en2
namespace: sriov-network-operator
spec:
deviceType: netdevice
isRdma: true
mtu: 9000
nicSelector:
pfNames:
- enp134s0f1np1
nodeSelector:
edgecontainer.googleapis.com/network-sriov.capable: "true"
numVfs: 31
priority: 99
resourceName: mlnx6_p2_sriov_en2
L'exemple précédent crée un maximum de 31 VF à partir du deuxième port de l'interface réseau nommée enp134s0f1np1 avec une valeur MTU de 9000 (valeur maximale autorisée). Utilisez le libellé de sélecteur de nœud edgecontainer.googleapis.com/network-sriov.capable, qui est présent sur tous les nœuds Distributed Cloud Connected compatibles avec SR-IOV.
Pour en savoir plus sur l'utilisation de cette ressource, consultez
SriovNetworkNodeState.
Ressource SriovNetworkNodeState
La ressource en lecture seule SriovNetworkNodeState vous permet d'interroger l'état de provisionnement de la ressource SriovNetworkNodePolicy sur un nœud Distributed Cloud Connected. Elle renvoie la configuration complète de la ressource SriovNetworkNodePolicy sur le nœud, ainsi qu'une liste des VF actifs sur le nœud. Le champ status.syncStatus indique si toutes les ressources SriovNetworkNodePolicy définies pour le nœud ont été correctement appliquées.
L'exemple suivant illustre la structure de la ressource :
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodeState
metadata:
name: MyNode1
namespace: sriov-network-operator
spec:
dpConfigVersion: "1969684"
interfaces:
- mtu: 9000
name: enp134s0f1np1
numVfs: 31
pciAddress: 0000:86:00.1
vfGroups:
- deviceType: netdevice
mtu: 9000
policyName: mlnx6-p2-sriov-en2
resourceName: mlnx6_p2_sriov_en2
vfRange: 0-30
status:
Status:
Interfaces:
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno1np0
Pci Address: 0000:1a:00.0
Vendor: 15b3
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno2np1
Pci Address: 0000:1a:00.1
Vendor: 15b3
Vfs:
- Vfs:
- deviceID: 101e
driver: mlx5_core
mac: c2:80:29:b5:63:55
mtu: 9000
name: enp134s0f1v0
pciAddress: 0000:86:04.1
vendor: 15b3
vfID: 0
- deviceID: 101e
driver: mlx5_core
mac: 7e:36:0c:82:d4:20
mtu: 9000
name: enp134s0f1v1
pciAddress: 0000:86:04.2
vendor: 15b3
vfID: 1
.. <omitted 29 other VFs here>
syncStatus: Succeeded
Pour en savoir plus sur l'utilisation de cette ressource, consultez
SriovNetworkNodeState.
Ressource NetworkAttachmentDefinition
La ressource NetworkAttachmentDefinition vous permet d'associer des pods Distributed Cloud à un ou plusieurs réseaux logiques ou physiques sur votre nœud Distributed Cloud Connected. Elle exploite
le framework Multus-CNI
et les plug-ins suivants :
Utilisez une annotation pour référencer le nom de la ressource SriovNetworkNodePolicy appropriée. Lorsque vous créez cette annotation, procédez comme suit :
- Utilisez la clé
k8s.v1.cni.cncf.io/resourceName. - Utilisez le préfixe
gke.io/dans sa valeur, suivi du nom de la ressourceSriovNetworkNodePolicycible.
Utilisez l'annotation networking.gke.io/gdce-vlan-id pour spécifier l'ID de VLAN pour le réseau cible. Cette annotation est obligatoire.
Les exemples suivants illustrent la structure de la ressource. Pour la mise en réseau IPv4 :
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-net1
namespace: mynamespace
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p2_sriov_en2
networking.gke.io/gdce-vlan-id: 225
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-network",
"ipam": {
"type": "host-local",
"subnet": "10.56.217.0/24",
"routes": [{
"dst": "0.0.0.0/0"
}],
"gateway": "10.56.217.1"
}
}'
Pour la mise en réseau IPv6 :
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-210-den102
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p0_sriov_en
networking.gke.io/gdce-vlan-id: 225
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-210-den102",
"vlan": 210,
"ipam": {
"type": "host-local",
"rangeStart": "2001:4860:1025:102:ffff:0220::2",
"rangeEnd": "2001:4860:1025:102:ffff:0220::F",
"subnet": "2001:4860:1025:102:ffff:0220::/96",
"routes": [{
"dst": "::/0"
}],
"gateway": "2001:4860:1025:102:ffff:0220::1"
}
}'
Configurer une interface secondaire sur un pod à l'aide de VF SR-IOV
Une fois que vous avez configuré une ressource SriovNetworkNodePolicy et une ressource NetworkAttachmentDefinition correspondante, vous pouvez configurer une interface réseau secondaire sur un pod Distributed Cloud à l'aide de fonctions virtuelles SR-IOV.
Pour ce faire, ajoutez une annotation à la définition de votre pod Distributed Cloud comme suit :
- Clé :
k8s.v1.cni.cncf.io/networks - Valeur :
nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...
L'exemple suivant illustre cette annotation :
apiVersion: v1
kind: pod
metadata:
name: sriovpod
annotations:
k8s.v1.cni.cncf.io/networks: mynamespace/sriov-net1
spec:
containers:
- name: sleeppodsriov
command: ["sh", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine
securityContext:
capabilities:
add:
- NET_ADMIN
Configurer une interface secondaire sur un pod à l'aide du pilote MacVLAN
Distributed Cloud Connected permet également de créer une interface réseau secondaire sur un pod à l'aide du pilote MacVLAN. Seule l'interface gdcenet0 est compatible avec cette configuration, et uniquement sur les pods qui exécutent des charges de travail conteneurisées.
Pour configurer une interface afin qu'elle utilise le pilote MacVLAN :
Configurez une ressource
NetworkAttachmentDefinitioncomme indiqué dans les exemples suivants. Pour la mise en réseau IPv4 :apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-b400-1 annotations: networking.gke.io/gdce-vlan-id: 400 spec: config: '{ "type": "macvlan", "master": "gdcenet0.400", "ipam": { "type": "static", "addresses": [ { "address": "192.168.100.20/27", "gateway": "192.168.100.1" } ] ... } }'Pour la mise en réseau IPv6 :
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-bond0-210-den402 annotations: networking.gke.io/gdce-vlan-id spec: config: '{ "type": "macvlan", "cniVersion": "0.3.1", "name": "bond0-210", "master": "bond0.210", "ipam": { "type": "host-local", "rangeStart": "2001:4860:1025:102:0001:0210::2", "rangeEnd": "2001:4860:1025:102:0001:0210::F", "subnet": "2001:4860:1025:102:0001:0210::/96", "routes": [{ "dst": "::/0" }], "gateway": "2001:4860:1025:102:0001:0210::1" } }'Ajoutez une annotation à la définition de votre pod Distributed Cloud comme suit. Pour la mise en réseau IPv4 :
apiVersion: v1 kind: pod metadata: name: macvlan-testpod1 annotations: k8s.v1.cni.cncf.io/networks: macvlan-b400-1Pour la mise en réseau IPv6 :
apiVersion: v1 kind: Pod metadata: name: vlan210-1 namespace: default annotations: k8s.v1.cni.cncf.io/networks: default/macvlan-bond0-210-den402
Configurer une interface secondaire sur un pod à l'aide de la mise en réseau multiple Distributed Cloud
Distributed Cloud Connected permet de créer une interface réseau secondaire sur un pod à l'aide de sa fonctionnalité de réseau multiple. Pour cela, procédez comme suit :
Configurez une ressource
Network. Exemple :apiVersion: networking.gke.io/v1 kind: Network metadata: name: vlan200-network spec: type: L2 nodeInterfaceMatcher: interfaceName: vlan200-interface gateway4: 10.53.0.1Ajoutez une annotation à la définition de votre pod Distributed Cloud comme suit :
apiVersion: v1 kind: pod metadata: name: mypod annotations: networking.gke.io/interfaces: '[{"interfaceName":"eth1","network":"vlan200-network"}]' networking.gke.io/default-interface: eth1 ...Étape suivante