Ce document explique comment mettre en œuvre un modèle de réseau en mode plat compatible avec le protocole BGP (Border Gateway Protocol). Lorsque vous mettez en œuvre un modèle de réseau compatible avec BGP, BGP garantit de manière dynamique que les pods de différents domaines de couche 2 peuvent communiquer entre eux. La mise en réseau en mode plat avec BGP est parfois appelée adresse IP plate dynamique.
Pour en savoir plus sur les modèles de réseau en mode plat, consultez la section Modèles réseau en mode plat ou en mode île.
Comment mettre en œuvre un réseau en mode plat utilisant BGP
La mise en réseau en mode plat avec BGP est activée lorsque vous créez un cluster. Vous ne pouvez pas activer cette fonctionnalité pour un cluster existant. Une fois cette fonctionnalité activée, vous pouvez modifier certains paramètres de configuration.
Pour mettre en œuvre un cluster sur un modèle de réseau en mode plat compatible avec BGP :
Modifiez le fichier de configuration du cluster :
- Définissez le champ
spec.clusterNetwork.advancedNetworkingsurtrue. Si vous souhaitez activer le réseau en mode plat pour IPv4, définissez le champ
spec.clusterNetwork.flatIPv4surtrue.Pour une autre option, consultez la section Cluster à double pile (île IPv4, adresse IP plate dynamique IPv6), qui configure votre cluster avec une mise en réseau en mode plat pour IPv6 uniquement.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: bm namespace: cluster-bm spec: type: user ... clusterNetwork: advancedNetworking: true flatIPv4: true ...Lorsque
spec.clusterNetwork.flatIPv4est défini surtrue, le champspec.clusterNetwork.pods.cidrBlocksest ignoré et peut être omis. Cependant, vous devez ajouter un fichier manifesteClusterCIDRConfigsdans le fichier de configuration du cluster (par nœud, par pool de nœuds et/ou par cluster).- Définissez le champ
Ajoutez un fichier manifeste
NetworkGatewayGroupau fichier de configuration du cluster :Spécifiez les adresses IP flottantes à utiliser pour l'appairage BGP. Assurez-vous que le nom de ressource est
defaultet que l'espace de noms est bien l'espace de noms du cluster.--- apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: default namespace: cluster-bm spec: floatingIPs: - 10.0.1.100 - 10.0.2.100La ressource personnalisée
NetworkGatewayGroupgère une liste d'une ou de plusieurs adresses IP flottantes. Les sessions d'appairage BGP sont lancées à partir d'adresses IP flottantes que vous spécifiez dans la ressource personnaliséeNetworkGatewayGroup.Ajoutez un fichier manifeste
FlatIPModeau fichier de configuration du cluster :Le nom de la ressource
FlatIPModedoit êtredefaultet l'espace de noms doit être celui du cluster. La valeurpeerSelectorflatip-peer: "true"correspond aux étiquettes des objets BGPPeerbgppeer1etbgppeer2(définis à l'étape suivante). Les deux pairs sont donc utilisés pour la mise en réseau en mode plat.Le fichier manifeste
FlatIPModesuivant concerne le réseau IPv4 à pile unique et en mode plat avec BGP. Pour d'autres configurations, consultez Exemples de configuration.--- apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: FlatIPMode metadata: name: default namespace: cluster-bm spec: enableBGPIPv4: true enableBGPIPv6: false peerSelector: flatip-peer: "true"Ajoutez un ou plusieurs fichiers manifestes
BGPPeerau fichier de configuration du cluster :Vous choisissez les noms des ressources, mais toutes les ressources
BGPPeerdoivent se trouver dans l'espace de noms du cluster.--- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer1 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.1.254 sessions: 2 --- apiVersion: networking.gke.io/v1 kind: BGPPeer metadata: name: bgppeer2 namespace: cluster-bm labels: flatip-peer: "true" spec: localASN: 65001 peerASN: 65000 peerIP: 10.0.2.254 sessions: 2Ajoutez un fichier manifeste
ClusterCIDRConfigau fichier de configuration du cluster :La ressource
CusterCIDRConfigdoit également se trouver dans l'espace de noms du cluster.apiVersion: baremetal.cluster.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: name: cluster-wide-1 namespace: cluster-bm spec: ipv4: cidr: "192.168.0.0/16" perNodeMaskSize: 24ClusterCIDRConfig est une ressource personnalisée qui spécifie les plages CIDR de pods à allouer aux nœuds de manière dynamique. Le CNI utilise les plages CIDR de pod allouées sur un nœud pour allouer des adresses IP aux pods individuels exécutés sur le nœud.
ClusterCIDRConfigest également utilisé pour la mise en réseau à double pile. Pour en savoir plus sur la ressource personnaliséeClusterCIDRConfig, y compris des exemples d'utilisation, consultez Comprendre la ressource personnalisée ClusterCIDRConfig.Créez le cluster :
bmctl create clusterPour en savoir plus sur la création de clusters, consultez la page Présentation de la création de clusters.
Si votre environnement est compatible avec le BGP multiprotocole (MP-BGP), les routes IPv4 et IPv6 peuvent être annoncées sur ces sessions IPv4. Pour obtenir des exemples de différentes configurations, y compris des exemples utilisant MP-BGP, consultez Exemples de configuration.
Modifier la configuration de votre mise en réseau en mode plat basée sur BGP
Une fois que vous avez créé votre cluster configuré pour utiliser un modèle de réseau en mode plat avec BGP, certains paramètres de configuration peuvent être mis à jour. Utilisez le fichier kubeconfig du cluster d'administrateur lorsque vous apportez des modifications ultérieures aux ressources liées à BGP (NetworkGatewayGroup, FlatIPMode et BGPPeer). Le cluster d'administrateur réconcilie ensuite les modifications apportées au cluster utilisateur. Si vous modifiez ces ressources directement sur le cluster d'utilisateur, le cluster d'administrateur écrase vos modifications lors des réconciliations suivantes.
Exemples de configurations
Les sections suivantes incluent des exemples de configuration de cluster pour différentes variantes du modèle de réseau en mode plat avec BGP. Les exemples de fichiers de configuration ne sont pas complets. La plupart des paramètres de cluster qui ne sont pas pertinents pour la mise en réseau en mode plat avec BGP ont été omis.
Cluster IPv4 à pile unique
L'exemple de fichier de configuration de cluster suivant montre les paramètres permettant de configurer un cluster IPv4 à pile unique avec mise en réseau en mode plat avec BGP :
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
services:
cidrBlocks:
- 10.96.0.0/12
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: false
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Cluster à double pile (île IPv4, adresse IP plate dynamique IPv6)
L'exemple de fichier de configuration de cluster suivant montre les paramètres permettant de configurer un cluster à double pile (IPv4/IPv6) avec une mise en réseau en mode plat avec BGP pour IPv6 uniquement :
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: false
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "192.168.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: false
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Cluster à double pile (adresse IP plate dynamique IPv4, adresse IP plate dynamique IPv6)
L'exemple de fichier de configuration de cluster suivant montre les paramètres permettant de configurer un cluster à double pile avec une mise en réseau en mode plat avec BGP :
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: bm
namespace: cluster-bm
spec:
...
clusterNetwork:
advancedNetworking: true
flatIPv4: true
pods:
cidrBlocks:
- 192.168.0.0/16
services:
cidrBlocks:
- 10.96.0.0/12
# Additional IPv6 CIDR block determines if the cluster is dual-stack
- 2620:0:1000:2630:5:2::/112
...
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: ClusterCIDRConfig
metadata:
name: cluster-wide-1
namespace: cluster-bm # Must match the cluster namespace
spec:
ipv4:
cidr: "222.2.0.0/16"
perNodeMaskSize: 24
ipv6:
cidr: "2222:3::/112"
perNodeMaskSize: 120
---
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
floatingIPs:
- 10.0.1.100
- 10.0.3.100
---
apiVersion: baremetal.cluster.gke.io/v1alpha1
kind: FlatIPMode
metadata:
name: default
namespace: cluster-bm # Must match the cluster namespace
spec:
enableBGPIPv4: true
enableBGPIPv6: true
peerSelector:
flatipmode-peer: "true"
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.1.254
sessions: 2
---
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer2
namespace: cluster-bm # Must match the cluster namespace
labels:
flatipmode-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
Dépannage
Pour vous aider à résoudre les problèmes liés à la mise en réseau en mode plat avec BGP, cette section inclut des instructions pour vérifier votre configuration :
Vérifiez si un objet
FlatIPModesest créé dans l'espace de noms du cluster sur le cluster d'administration :kubectl get flatipmodes -A --kubeconfig ADMIN_KUBECONFIGLa réponse doit se présenter comme suit :
NAMESPACE NAME AGE cluster-bm default 2d17hVérifiez si un objet
flatipmodes.networking.gke.ioest créé sur le cluster utilisateur :L'objet
flatipmodes.networking.gke.ioest à l'échelle du cluster.kubectl get flatipmodes.networking.gke.io --kubeconfig USER_KUBECONFIGLa réponse doit se présenter comme suit :
NAME AGE default 2d17hObtenez les ressources
BGPSessionspour afficher les sessions en cours :kubectl get bgpsessions -A --kubeconfig USER_KUBECONFIGLa réponse doit se présenter comme suit :
NAMESPACE NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT kube-system 10.0.1.254-node-01 65500 65000 10.0.1.100 10.0.1.254 Established 2s kube-system 10.0.1.254-node-02 65500 65000 10.0.3.100 10.0.1.254 NotEstablished 2s kube-system 10.0.3.254-node-01 65500 65000 10.0.1.100 10.0.3.254 NotEstablished 2s kube-system 10.0.3.254-node-02 65500 65000 10.0.3.100 10.0.3.254 Established 2sObtenez les ressources
BGPAdvertisedRoutepour afficher les routes actuellement annoncées :kubectl get bgpadvertisedroutes -A --kubeconfig USER_KUBECONFIGLa réponse doit se présenter comme suit :
NAMESPACE NAME PREFIX METRIC kube-system route-via-222-22-208-240 222.2.0.0/24 kube-system route-via-222-22-209-240 222.2.1.0/24Les noms des routes indiquent le prochain saut. Par exemple, la valeur
route-via-222-22-208-240de l'exemple de réponse précédent indique que le prochain saut pour le préfixe annoncé222.2.0.0/24est222.22.208.240.