Activer BGP en tant que service
Cloud-Native Contrail® Networking prend en™ charge le protocole BGP (Border Gateway Protocol) as a Service (BGPaaS). Ce document doit être utilisé pour activer BGPaaS dans les environnements utilisant la version 22.1 ou ultérieure.
La fonctionnalité BGPaaS de Cloud-Native Contrail Networking permet à BGP de fonctionner au sein d’un réseau virtuel dans des environnements de mise en réseau cloud à l’aide de Cloud-Native Contrail Networking.
Avantages de BGP en tant que service dans Cloud-Native Contrail
Avec BGPaaS dans les environnements Kubernetes avec Cloud-Native Contrail Networking, vous bénéficiez des fonctionnalités suivantes :
-
Un service de protocole BGP qui s’exécute sur le réseau virtuel. Ce service BGP crée des sessions de voisinage BGP pour les pods, les machines virtuelles et d’autres charges de travail du réseau virtuel.
-
Protocole de routage qui prend en charge les voisins IPv4, la famille d’adresses unicast IPv4 et IPv6 et le mappage du saut suivant IPv6-over-IPv4.
-
Un service de protocole BGP configurable par l’utilisateur à l’aide des paramètres de configuration BGP les plus connus.
Vous pouvez utiliser BGPaaS dans n’importe quel environnement de mise en réseau cloud qui a besoin des fonctionnalités fournies par un protocole de routage. BgPaaS peut être particulièrement utile dans les scénarios suivants :
-
Si vous gérez un grand environnement de mise en réseau cloud qui exécute plusieurs charges de travail, vous pouvez utiliser BGPaaS pour faire évoluer les services réseau.
-
Si vous utilisez des protocoles de tunnelisation qui ont besoin d’informations sur l’accessibilité réseau d’un protocole de routage pour créer et entretenir des tunnels, BGPaaS peut vous aider.
Conditions préalables
Nous partons du principe qu’avant d’activer BGP en tant que service :
-
Vous travaillez dans un environnement de mise en réseau cloud opérationnel à l’aide de Kubernetes orchestration, et Cloud-Native Contrail Networking est opérationnel.
- Vous avez une connaissance pratique de BGP.
Présentation de BGP en tant que service dans le cloud-native Contrail Networking
Cloud-Native Contrail prend en charge la mise en réseau de BGPaaS.
Vous devez trouver un service BGP pour exécuter BGP dans votre environnement de mise en réseau cloud. Ce document explique comment activer la prise en charge réseau de BGPaaS avec Cloud-Native Contrail Networking à l’aide du service BGP fourni par bird Internet Routing Daemon (BIRD). Ce démon est disponible en tant qu’outil de développement intégré sur de nombreuses versions d’Unix. Vous pouvez également le télécharger dans votre environnement à l’aide d’une image distincte.
Dans les exemples suivants, vous voyez que le démon BGP de BIRD s’exécute dans un pod lorsque BGPaaS est activé. Ce démon envoie ensuite des messages BGP sur le réseau à l’aide des fonctionnalités réseau fournies par Cloud-Native Contrail Networking. Pour plus d’informations sur BIRD, consultez la page d’accueil de BIRD Internet Routing Daemon .
Lorsque BGPaaS est opérationnel, le démon BGP s’exécute dans un pod et gère BGPaaS. Le démon BGP est directement connecté à un vRouter Contrail.
Le vRouter Contrail est connecté à au moins un nœud du plan de contrôle et connecte le démon BIRD au plan de contrôle. Une session d’appairage BGP entre au moins un nœud de contrôle et le démon BIRD est établie grâce à cette connexion avec contrail vRouter.
Une fois qu’une session d’appairage est créée entre les nœuds de contrôle et le démon BGP, le démon BGP peut gérer BGPaaS et envoyer des routes aux clients BGP via le plan de contrôle. Les tâches de gestion BGPaaS incluent l’attribution d’adresses IP à des charges de travail, pods, VM ou autres objets.
Activer BGPaaS dans un pod
Pour activer BGPaaS, vous devez créer un pod pour héberger le service BGP. Vous devez ensuite associer le pod hébergeant le service BGP aux réseaux virtuels sur lesquels BGPaaS s’exécutera.
Vous pouvez utiliser deux méthodes pour associer un pod hébergeant le service BGP à un réseau virtuel :
-
Sélecteur d’interfaces de machine virtuelle : le pod exécutant le service BGP est directement associé au réseau virtuel. Le pod hébergeant le service BGP est découvert automatiquement une fois l’association réseau virtuelle définie.
-
Références de l’interface de machine virtuelle : le pod exécutant le service BGP est directement associé au réseau virtuel en fournissant explicitement l’espace de noms et le nom de l’interface de machine virtuelle du pod hébergeant le service BGP.
Les sections suivantes fournissent les étapes de chaque méthode d’association.
- Activer BGPaaS dans un pod à l’aide du sélecteur d’interfaces de machine virtuelle
- Activer BGPaaS dans un pod à l’aide de références d’interface de machine virtuelle
Activer BGPaaS dans un pod à l’aide du sélecteur d’interfaces de machine virtuelle
Vous devez créer un pod pour héberger le service BGP, puis activer BGPaaS avec le sélecteur d’interfaces de machine virtuelle.
Le pod doit :
-
Incluez au moins une interface IPv4.
-
Ajoutez des annotations pour
core.juniper.net/bgpaas-networks
spécifier les noms de réseau virtuel associés. La valeur de cette annotation doit comporter au moins un nom de réseau virtuel. Si vous êtes associé au pod hébergeant le démon BIRD à plusieurs réseaux virtuels, saisissez les noms du réseau virtuel sous la forme d’une liste séparée par des virgules.
Dans cet exemple de fichier YAML, un pod est créé pour héberger le service BGP. Le pod est associé à deux réseaux virtuels et BGPaaS est activé pour s’exécuter sur les deux réseaux virtuels. L’image : variable dans les conteneurs : la hiérarchie pointe vers le fichier image BIRD qui fournira le service BGP dans cet exemple.
apiVersion: v1 kind: Pod metadata: name: bird-pod-shared-1 namespace: bgpaas-ns annotations: k8s.v1.cni.cncf.io/networks: | [{ "name": "bgpaas-vn-1", "namespace": "bgpaas-ns", "cni-args": null "interface": "eth1" },{ "name": "bgpaas-vn-2", "namespace": "bgpaas-ns", "cni-args": null "interface": "eth2" }] core.juniper.net/bgpaas-networks: bgpaas-vn-1,bgapss-vn-2 spec: containers: - name: bird-pod-c image: somewhere.juniper.net/cn2/bazel-build/dev/bird-sut:1.0 command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true
Saisissez le kubectl obtenir vmi -n virtual-network-name pour confirmer que le pod et les interfaces de machine virtuelle associées ont été créés. Vous pouvez également saisir la commande kubectl description pour vous assurer que les interfaces de la machine virtuelle existent.
Vous pouvez confirmer que le réseau virtuel a été créé en examinant la sortie bgpaasVN= dans la section label de la commande kubectl describe .
kubectl get vmi -n bgpaas-ns CLUSTERNAME NAME NETWORK PODNAME IFCNAME STATE AGE contrail-k8s-kubemanager-kubernetes bird-pod-1-abb881a8 bgpaas-vn-1 bird-pod-1 eth1 Success 13s contrail-k8s-kubemanager-kubernetes bird-pod-1-e3f93f05 default-podnetwork bird-pod-1 eth0 Success 13s kubectl describe vmi bird-pod-1-abb881a8 -n bgpaas-ns Name: bird-pod-1-abb881a8 Namespace: bgpaas-ns Labels: core.juniper.net/bgpaasVN=bgpaas-vn-1 namespace=bgpaas-ns
Vous devez ensuite créer un objet BGPaaS pour configurer BGPaaS. L’objet BGPaaS fait référence aux réseaux virtuels dans la section VirtualMachineInterfacesSelector: .
apiVersion: core.contrail.juniper.net/v1alpha1 kind: BGPAsAService metadata: namespace: bgpaas-ns name: bgpaas-test spec: shared: false autonomousSystem: 10 bgpAsAServiceSessionAttributes: loopCount: 2 routeOriginOverride: origin: EGP addressFamilies: family: - inet - inet6 virtualMachineInterfacesSelector: - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-1 - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-2
Activer BGPaaS dans un pod à l’aide de références d’interface de machine virtuelle
Vous devez d’abord créer un pod pour héberger le démon BIRD afin d’activer BGPaaS avec les références de l’interface de machine virtuelle. Le pod doit inclure au moins une interface IPv4.
Dans l’exemple suivant, un pod est créé dans l’espace de noms bgpaas-ns . L’annotation associe le pod au réseau virtuel bgpaas-vn-1 . L’image : variable dans les conteneurs : la hiérarchie pointe vers le fichier image BIRD qui fournira le service BGP dans cet exemple.
apiVersion: v1 kind: Pod metadata: name: bird-pod-1 namespace: bgpaas-ns annotations: k8s.v1.cni.cncf.io/networks: bgpaas-vn-1 spec: containers: - name: bird-pod-c image: somewhere.juniper.net/cn2/bazel-build/dev/bird-sut:1.0 command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true
Vérifiez que le pod a été créé après avoir engagé le fichier de configuration de l’objet pod en entrant la commande kubectl get vmi -n bgpaas-ns .
Notez le nom de l’interface de la machine virtuelle pour le pod dans cette sortie de commande. Vous devrez spécifier le nom de l’interface de la machine virtuelle ultérieurement dans cette procédure lors de la configuration de l’objet BGPaaS.
kubectl get vmi -n bgpaas-ns CLUSTERNAME NAME NETWORK PODNAME IFCNAME STATE AGE contrail-k8s-kubemanager-kubernetes bird-pod-1-abb881a8 bgpaas-vn-1 bird-pod-1 eth1 Success 13s contrail-k8s-kubemanager-kubernetes bird-pod-1-e3f93f05 default-podnetwork bird-pod-1 eth0 Success 13s
Les références de l’interface de machine virtuelle sont définies lors de la création de l’objet BGPaaS à l’aide de la hiérarchie virtualMachineInterfaceReferences: L’espace de noms : est l’espace de noms pod et le nom : est le nom de l’interface de la machine virtuelle que vous avez récupéré à l’aide de la commande kubectl get vmi -n bgpaas-ns .
apiVersion: core.contrail.juniper.net/v1alpha1 kind: BGPAsAService metadata: namespace: bgpaas-ns name: bgpaas-sample spec: shared: false autonomousSystem: 100 bgpAsAServiceSessionAttributes: localAutonomousSystem: 10 loopCount: 2 routeOriginOverride: origin: EGP addressFamilies: family: - inet - inet6 virtualMachineInterfaceReferences: - apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualMachineInterface namespace: bgpaas-ns name: bird-pod-1-abb881a8
Configurer la méthode d’allocation d’adresses IP pour BGPasaS
Vous pouvez configurer BGPaaService avec l’une des méthodes d’allocation d’adresses IP suivantes :
-
allocation automatique des adresses IP : le service BGP attribue des adresses IP.
-
allocation d’adresse IP spécifiée par l’utilisateur : vous attribuez l’adresse IP.
Vous configurez la méthode d’allocation d’adresses IP dans l’objet Subnet
.
L’allocation automatique des adresses IP est activée par défaut. Si vous activez BGPaaS sans désactiver manuellement l’allocation d’adresses IP, BGPaaS utilise l’allocation d’adresses IP automatique.
Vous désactivez l’allocation automatique d’adresses IP en définissant la variable disableBGPaaSIPAutoAllocation : dans l’objet Subnet
sur true. Si la variable disableBGPaaSIPAutoAllocation : n’est pas présente dans le fichier objet sous-réseau , l’attribution automatique des adresses IP est activée.
Dans l’exemple de configuration suivant, l’allocation automatique d’adresses IP est activée car la variable désactivéBGPaaSIPAutoAllocation : la variable n’est pas présente dans le fichier de configuration de l’objet sous-réseau .
apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: bgpaas-ns name: bgpaas-subnet-1 spec: cidr: "172.20.10.0/24"
Dans cet exemple de configuration, l’allocation automatique d’adresses IP est activée, car la variable disableBGPaaSIPAutoAllocation : est définie sur false.
apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: bgpaas-ns name: bgpaas-subnet-2 spec: cidr: "172.20.20.0/24" disableBGPaaSIPAutoAllocation: false
Pour activer l’allocation d’adresse IP spécifiée par l’utilisateur, définissez la variable disableBGPaaSIPAutoAllocation : variable sur true
. Lorsque l’allocation d’adresses IP spécifiée par l’utilisateur est activée, vous devez également configurer les adresses BGP que BGPaaS peut attribuer aux points de terminaison du sous-réseau. Vous devez définir une adresse IP principale à l’aide de la variable bgpaasPrimaryIP: . Vous pouvez également définir une adresse IP secondaire en option, ce qui est fait dans cet exemple à l’aide de la variable bgpaas SecondaryIP: .
apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: bgpaas-ns name: bgpaas-subnet-2 spec: cidr: "172.20.20.0/24" disableBGPaaSIPAutoAllocation: true bgpaasPrimaryIP: 172.20.20.3 bgpaasSecondaryIP: 172.20.20.4
Configurer l’objet BGPasaService
Vous activez BGPaaS dans un cluster en créant un BGPAsAService objet.
Créez l’objet BGPAsAService en créant un fichier YAML qui utilise BGPAsAService
dans le type : champ :
apiVersion: core.contrail.juniper.net/v1alpha1 kind: BGPAsAService metadata: namespace: bgpaas-ns name: bgpaas-test spec: shared: false autonomousSystem: 10 bgpAsAServiceSessionAttributes: loopCount: 2 routeOriginOverride: origin: EGP addressFamilies: family: - inet - inet6 virtualMachineInterfacesSelector: - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-1 - matchLabels: core.juniper.net/bgpaasVN: bgpaas-vn-2
Description | de la variable de champ |
---|---|
Partagé: |
Spécifie si un objet de routeur BGP commun peut être partagé avec plusieurs interfaces de machine virtuelle dans le même réseau virtuel. Lorsque ce champ est défini sur true, un routeur client BGP peut être partagé avec plusieurs interfaces de machine virtuelle dans le même réseau virtuel. Ce paramètre limite le nombre total de routeurs clients BGP qui doivent être créés dans un réseau virtuel pour une VMI. Lorsque ce champ est défini sur false, un routeur client BGP est créé pour chaque interface de machine virtuelle. |
système autonome : |
Spécifie le numéro global du système autonome pour l’instance BGP. Le numéro du système autonome peut être n’importe quel nombre entier compris entre 1 et 4294967295. |
bgpAsAServiceSessionAttributes : |
Définit les attributs de session BGP pour BGPaaS.
Voir
le tableau 2
|
VirtualMachineInterfaceRéférences : |
Définit les paramètres d’interface de machine virtuelle à associer à BGPaaS à l’aide de références d’interface de machine virtuelle.
Voir
le tableau 3
|
virtualMachineInterfacesSelector : |
Définit les réseaux virtuels sur lesquels BGPaaS s’exécute à l’aide du sélecteur d’interfaces de machine virtuelle.
Voir
le tableau 4
|
Description | du champ |
---|---|
système autonome local : |
Spécifie le numéro du système autonome local pour BGP. |
LoopCount : |
Spécifie le nombre de fois où le même ASN peut être vu dans une mise à jour de route avant que le routage ne soit rejeté. The LoopCount : peut être n’importe quel nombre entier jusqu’à 16. |
routeOriginé de l’override : |
Remplace le paramètre d’origine et définit l’attribut d’origine sur Incomplet lors du transfert de routes. Si vous définissez ce champ sur false, les routes sont annoncées dans BGP en fonction du paramètre d’origine. L’origine est IGP ou EGP et est définie à l’aide du champ origine: dans ce fichier. Si vous définissez ce champ sur true, l’origine est définie sur Incomplet pour les routes annoncées. Utilisez ce champ si vous souhaitez modifier la façon dont les réseaux BGP hiérarchisent les routes reçues du service BGP. Par défaut, les réseaux BGP hiérarchisent les routes en fonction de l’origine, et les routes dont l’origine est incomplète sont moins prioritaires que les routes reçues d’IGP ou d’EGP. |
Origine: |
Spécifie si BGP fonctionne comme un protocole de passerelle intérieure (igp) ou de passerelle extérieure (egp). L’origine du routage par défaut est igp. |
Famille d’adresses : |
Spécifie la famille d’adresses. Vous pouvez spécifier la famille comme inet pour IPv4 ou inet6 pour IPv6. Les deux familles d’adresses peuvent être spécifiées simultanément. |
Description | du champ |
---|---|
apiVersion : |
Spécifie la version de l’API pour la référence de l’interface de machine virtuelle. |
Genre: |
Définissez toujours ce champ sur VirtualMachineInterface. |
Noms: |
Spécifie l’espace de noms associé à la référence de l’interface de machine virtuelle. Vous définissez cet espace de noms lors de la création de l’objet Pod . Voir. |
Nom: |
Spécifie le nom du pod associé à la référence de l’interface de machine virtuelle. Vous pouvez récupérer le nom du pod en entrant la commande kubectl get vmi -n bgpaas-ns . Voir Activer BGPaaS dans un pod à l’aide des références d’interface de machine virtuelle. |
Description | du champ |
---|---|
les étiquettes de match : |
Définissez les étiquettes de correspondance pour le sélecteur d’interfaces de machine virtuelle. Les étiquettes de correspondance dans ce contexte sont toujours utilisées pour faire référence aux réseaux virtuels sur lesquels le sélecteur d’interfaces de machine virtuelle s’exécute. Les valeurs d’étiquette de correspondance dans cette section sont toujours saisies en tant que core.juniper.net/bgpaasVN:virtual-network-name. Voir Activer BGPaaS dans un pod à l’aide du sélecteur d’interfaces de machine virtuelle. |
Valider la configuration BGP en tant que service
Vous devez confirmer que l’objet BGPaaS s’exécute correctement après avoir valide le fichier objet BGPAsAService.
Saisissez la commande kubectl get BGPAsAService après avoir créé l’objet BGPAsAService pour confirmer l’état de l’objet. L’objet est créé avec succès lorsque le champ État indique réussite.
kubectl get BGPAsAService -n bgpaas-ns NAME AS IPADDRESS SHARED STATE AGE bgpaas-sample 100 false Success 33s
Vous devez également vous assurer que le serveur BGPaaS et le client BGPaaS sont créés et sont dans l’état de réussite .
Saisissez la commande kubectl get BGPRouter pour confirmer la présence et l’état opérationnel des serveurs et clients BGPaaS.
kubectl get BGPRouter -n bgpaas-ns NAME TYPE IDENTIFIER STATE AGE bgpaas-ns-bgpaas-vn-1-bgpaas-server bgpaas-server Success 2m57s bgpaas-ns-bgpaas-vn-1-bird-pod-1-abb881a8 bgpaas-client 172.20.10.2 Success 2m57s
Configurer BGP dans pod
Vous devez également configurer les paramètres réseau du service BGP exécuté dans le pod. La configuration de chaque service BGP est unique et la documentation des paramètres de configuration réseau requis dépasse le champ d’application de ce document.
Dans cet exemple, la configuration du réseau BGP est configurée à l’aide de BIRD.
Vous configurez BGP à l’aide de l’interface CLI BIRD dans cet exemple. Les paramètres de la configuration BGP qui doivent correspondre aux objets BGPaaS définis dans Cloud-Native Contrail Networking sont notés. Bien que cet exemple ne soit pas illustré, vous devez savoir que l’emplacement par défaut pour accéder au fichier de configuration BIRD dans la plupart des déploiements est /etc/bird.conf ou /etc/bird/bird.conf.
# Change the router id to your BIRD router ID. It's a world-wide unique identification # of your router, usually one of router's IPv4 addresses. router id 172.20.10.2; protocol direct { interface "eth1*"; -> interface on which BGPAsAService needs to be configured } protocol bgp bgp1_1 { import all; export all; local as 10; -> AS configured in BGPAsAService neighbor 172.20.10.3 as 64512; -> neighbor for primary BGP session, use BGPaaSPrimaryIP from subnet neighbor 172.20.10.3 as 64512; -> neighbor for secondary BGP session, use BGPaaSSecondaryIP from subnet
Vous pouvez également vérifier que le protocole BGP s’exécute à partir de votre service BGP.
Dans cet exemple de BIRD, la commande show protocol est saisie pour vérifier que le protocole BGP est établi.
birdc show protocol bgp1_1 BIRD 1.6.8 ready. name proto table state since info bgp1_1 BGP master up 10:31:27 Established