SUR CETTE PAGE
VNR maillé qui connecte deux réseaux virtuels ou plus dans le même espace de noms
Ajouter de nouveaux réseaux virtuels dans le même espace de noms à un VNR de type maillage existant
Cas d’utilisation standard : un seul VNR connectant deux réseaux virtuels
Cas d’utilisation de mise à jour : un seul VNR connecte deux réseaux virtuels supplémentaires
Déployer VirtualNetworkRouter dans le cloud-native Contrail Networking
RÉSUMÉ Cloud-Native Contrail® Networking prend en™ charge la VirtualNetworkRouter
construction (VNR). Cette construction fournit une connectivité entre VirtualNetworks
.
Présentation de VirtualNetworkRouter
En règle générale, VirtualNetwork
le trafic est isolé pour maintenir la séparation des locataires. Dans Cloud-Native Contrail Networking, VirtualNetworkRouter
(VNR) effectue une fuite de route. La fuite de routage établit la connectivité entre VirtualNetworks
les instances de routage (RI) et les tables de routage associées à ces instances. En conséquence, les équipements d’une table de routage peuvent accéder aux ressources des équipements d’une autre table de routage.
Le VNR fournit la connectivité pour les deux modèles de réseau courants suivants :
-
Maillage : les pods de tous les équipements connectés
VirtualNetworks
communiquent entre eux. -
Hub-spoke :
VirtualNetworks
connectez-vous à deux types différents de VNR (spoke, hub).VirtualNetworks
connectés à des VNR de type spoke communiquent avecVirtualNetworks
des VNR de type hub et inversement.VirtualNetworks
connectés à des VNR en étoile ne peuvent pas communiquer avec les autresVirtualNetworks
VNR connectés à des VNR en étoile.
VNR est une construction Kubernetes déployée dans Cloud-Native Contrail Networking.
Cas d’utilisation de VirtualNetworkRouter
Les exemples suivants sont des cas d’utilisation courants qui démontrent les fonctionnalités de VNR dans Cloud-Native Contrail Networking.
Cas d’utilisation de maillage
Cas d’utilisation en étoile
VNR maillé qui connecte deux réseaux virtuels ou plus dans le même espace de noms
- Figure 1 : L’utilisateur crée VN1 et VN2 dans l’espace de noms-1. Les pods dans VN1 ne peuvent pas se connecter aux pods dans VN2. C’est le comportement par défaut de
VirtualNetworks
Cloud-Native Contrail Networking. - Figure 2 : L’utilisateur définit un VNR de type maillage qui sélectionne VN1 et VN2. Ce VNR permet aux pods de VN1 de communiquer avec les pods dans VN2 et vice-versa.
- Figure 3 : Les pods dans VN1 se connectent aux pods dans VN2. La cible de route du VNR est
importExported
à la foisVirtualNetworks
.
Ajouter de nouveaux réseaux virtuels dans le même espace de noms à un VNR de type maillage existant
- Figure 1 : Deux
VirtualNetworks
(VN1, VN2) se connectent au VNR dans l’espace de noms-1. - Figure 2 : L’utilisateur crée deux nouveaux
VirtualNetworks
(VN3, VN4). - Figure 3 : VN3 et VN4 se connectent au VNR. En conséquence, tous les
VirtualNetworks
connectés au VNR bénéficient d’une connectivité.
Deux VNR maillage dans le même espace de noms
- Figure 1 : VNR-web et VNR-db de type maillage existent déjà dans l’espace de noms 1. Seuls les VNR connectés aux VNR respectifs communiquent entre eux.
- Figure 2 : VNR-web et VNR-db communiquent entre eux.
- Figure 3 : toutes les
VirtualNetworks
connexions VNR-web et VNR-db communiquent entre elles.
Deux VNR maillage avec des espaces de noms différents
- Fig-1 : VNR-web sélectionne VN1 et VN2. Les pods VN1 et VN2 communiquent entre eux. VN1 et VN2 ne peuvent pas communiquer avec VN3 et VN4.
- Fig 2 : VNR-db sélectionne VN3 et VN4. Les pods dans VN3 et VN4 communiquent entre eux. VN3 et VN4 ne peuvent pas communiquer avec VN1 et VN2.
- Fig-3 : L’utilisateur met à jour VNR-web pour sélectionner VNR-db.
- Fig-3 : L’utilisateur met à jour VNR-db pour sélectionner VNR-web.
- Fig 3 : puisque deux VNR se sélectionnent, le RT (cible de routage) de VNR-web est ajouté à VN3 et VN4. Le RT de VNR-db est ajouté à VN1 et VN2. Les pods dans VN1, VN2, VN3 et VN4 communiquent entre eux.
VNR en étoile dans le même espace de noms
- Figure 1 : Les pods de VN1 ne peuvent pas communiquer avec les pods dans VN2. VN1 et VN2 ne peuvent pas communiquer avec VN3.
- Figure 2 : L’utilisateur crée un VNR de type « spoke » et « hub ». VNR-spoke et VNR-hub s’importent les RT de l’autre.
- Figure 3 : les RT en étoile VNR et VNR-hub sont ajoutés à VN1, VN2 et VN3 parce qu’ils importent les RT les uns des autres. En conséquence, les pods de VN1 et VN2 communiquent avec VN3. Les pods VN1 et VN2 ne peuvent pas communiquer.
VNR en étoile dans différents espaces de noms
- La figure 1-Figure-3 est la même que les VNR en étoile dans le même espace de noms, sauf que VNR-spoke et VNR-hub fonctionnent dans différents espaces de noms.
Mêmes réseaux virtuels sous plusieurs VNR
- Figure 1 : Les pods VN1 et VN2 ne peuvent pas communiquer entre eux. mais VN3, VN4. Les ressources sur VN3 et VN4 peuvent également communiquer entre elles
- Figure 2 : Création de VNR-spoke de sélection VN1, VN2, VNR-hub sélectionnant VN3, VN4, VNR-mesh sélectionnant VN3, VN4
- Figure 3 : VNR-spoke garantit que VN1 et VN2 ne peuvent pas communiquer entre eux, VNR-hub permet à VN1, VN2 d’atteindre VN3, VN4 tandis que le maillage VNR permet de communiquer entre VN3 et VN4
Explication du cas d’utilisation
Cette section comprend les deux cas d’utilisation VNR suivants, ainsi que des explications de bout en bout de chaque cas d’utilisation :
Cas d’utilisation standard : un seul VNR connectant deux réseaux virtuels
apiVersion: v1 kind: Namespace metadata: name: ns-single-mesh labels: ns: ns-single-mesh spec: finalizers: - kubernetes --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: ns-single-mesh name: subnet-1 annotations: core.juniper.net/display-name: subnet_vn_1 spec: cidr: "10.10.1.0/24" defaultGateway: 10.10.1.254 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: ns-single-mesh name: subnet-2 annotations: core.juniper.net/display-name: subnet_vn_2 spec: cidr: "10.10.2.0/24" defaultGateway: 10.10.2.254 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetwork metadata: namespace: ns-single-mesh name: vn-1 annotations: core.juniper.net/display-name: vn-1 labels: vn: web spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet namespace: ns-single-mesh name: subnet-1 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetwork metadata: namespace: ns-single-mesh name: vn-2 annotations: core.juniper.net/display-name: vn-2 labels: vn: web spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet namespace: ns-single-mesh name: subnet-2 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetworkRouter metadata: namespace: ns-single-mesh name: vnr-1 annotations: core.juniper.net/display-name: vnr-1 labels: vnr: web spec: type: mesh virtualNetworkSelector: matchExpressions: - key: vn operator: In values: - web --- apiVersion: v1 kind: Pod metadata: name: pod-vn-1 namespace: ns-single-mesh annotations: k8s.v1.cni.cncf.io/networks: vn-1 spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: agent-mode operator: NotIn values: - dpdk containers: - name: pod-vn-1 image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/google-containers/toolbox command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true imagePullPolicy: IfNotPresent restartPolicy: OnFailure --- apiVersion: v1 kind: Pod metadata: name: pod-vn-2 namespace: ns-single-mesh annotations: k8s.v1.cni.cncf.io/networks: vn-2 spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: agent-mode operator: NotIn values: - dpdk containers: - name: pod-vn-2 image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/google-containers/toolbox command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true imagePullPolicy: IfNotPresent restartPolicy: OnFailure
Ce cas d’utilisation comprend deux VirtualNetworks
(vn-1
, vn-2
) dans l’espace de noms ns-single-mesh
. Les deux réseaux virtuels ont le . label
vn: web
Chacune VirtualNetwork
contient un seul pod. Le VirtualNetwork
vn-1
contient pod-vn-1
. Le VirtualNetwork
vn-2
contient pod-vn-2
. Un type: mesh
VNR du nom vnr-1
établit la connectivité entre les deux VirtualNetworks
à l’aide de matchExpressions
vn: web
. Le VNR importe le RI et la table de routage vers vn-1
vn-2
et inversement. Étant vnr-1
donné qu’il s’agit d’un VNR maillé, tous les pods connectés VirtualNetworks
communiquent entre eux.
Cas d’utilisation de mise à jour : un seul VNR connecte deux réseaux virtuels supplémentaires
apiVersion: v1 kind: Namespace metadata: name: ns-single-mesh labels: ns: ns-single-mesh spec: finalizers: - kubernetes --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: ns-single-mesh name: subnet-2 annotations: core.juniper.net/display-name: subnet_vn_1 spec: cidr: "10.10.3.0/24" defaultGateway: 10.10.3.254 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet metadata: namespace: ns-single-mesh name: subnet-4 annotations: core.juniper.net/display-name: subnet_vn_2 spec: cidr: "10.10.4.0/24" defaultGateway: 10.10.4.254 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetwork metadata: namespace: ns-single-mesh name: vn-3 annotations: core.juniper.net/display-name: vn-1 labels: vn: db spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet namespace: ns-single-mesh name: subnet-3 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetwork metadata: namespace: ns-single-mesh name: vn-4 annotations: core.juniper.net/display-name: vn-2 labels: vn: middleware spec: v4SubnetReference: apiVersion: core.contrail.juniper.net/v1alpha1 kind: Subnet namespace: ns-single-mesh name: subnet-4 --- apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetworkRouter metadata: namespace: ns-single-mesh name: vnr-2 annotations: core.juniper.net/display-name: vnr-1 labels: vnr: db vnr: middleware spec: type: mesh virtualNetworkSelector: matchExpressions: - key: vn operator: In values: - db, middlware --- apiVersion: v1 kind: Pod metadata: name: pod-vn-3 namespace: ns-single-mesh annotations: k8s.v1.cni.cncf.io/networks: vn-1 spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: agent-mode operator: NotIn values: - dpdk containers: - name: pod-vn-3 image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/google-containers/toolbox command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true imagePullPolicy: IfNotPresent restartPolicy: OnFailure --- apiVersion: v1 kind: Pod metadata: name: pod-vn-4 namespace: ns-single-mesh annotations: k8s.v1.cni.cncf.io/networks: vn-2 spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: agent-mode operator: NotIn values: - dpdk containers: - name: pod-vn-4 image: svl-artifactory.juniper.net/atom-docker/cn2/bazel-build/dev/google-containers/toolbox command: ["bash","-c","while true; do sleep 60s; done"] securityContext: privileged: true imagePullPolicy: IfNotPresent restartPolicy: OnFailure
Ce cas d’utilisation est similaire au cas d’utilisation standard, sauf que dans ce cas d’utilisation, l’utilisateur met à jour le YAML avec un VNR supplémentaire type: mesh
pour connecter deux nouveaux VirtualNetworks
(vn-3
, vn-4
) dans l’espace de noms ns-single-mesh
. Le VNR affiché a le nom vnr-2
dans l’espace de noms ns-single-mesh
avec matchExpressions: db, middlware
. Le VirtualNetwork
vn-3
label vn: db
et vn-4
le label vn: middleware
. En conséquence, vnr-2
importe le RI et la table de routage de vn-3
vers vn-4
et vice versa.
VirtualNetworkRouter Configuration
La section suivante fournit des informations de configuration YAML pour les ressources suivantes :
Type d’API (schéma)
type VirtualNetworkRouterSpec struct { // Common spec fields CommonSpec `json:",inline" protobuf:"bytes,1,opt,name=commonSpec"` // Type of VirtualNetworkRouter. valid types - mesh, spoke, hub Type VirtualNetworkRouterType `json:"type,omitempty" protobuf:"bytes,2,opt,name=type"` // Select VirtualNetworks to which this VNR's RT be shared VirtualNetworkSelector *metav1.LabelSelector `json:"virtualNetworkSelector,omitempty" protobuf:"bytes,3,opt,name=virtualNetworkSelector"` // Import Router targets from other virtualnetworkrouters Import ImportVirtualNetworkRouter `json:"import,omitempty" protobuf:"bytes,4,opt,name=import"` } type ImportVirtualNetworkRouter struct { VirtualNetworkRouters []VirtualNetworkRouterEntry `json:"virtualNetworkRouters,omitempty" protobuf:"bytes,1,opt,name=virtualNetworkRouters"` } type VirtualNetworkRouterEntry struct { VirtualNetworkRouterSelector *metav1.LabelSelector `json:"virtualNetworkRouterSelector,omitempty" protobuf:"bytes,1,opt,name=virtualNetworkRouterSelector"` NamespaceSelector *metav1.LabelSelector `json:"namespaceSelector,omitempty" protobuf:"bytes,2,opt,name=namespaceSelector"` }
VNR maillage
apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetworkRouter metadata: namespace: frontend name: vnr-1 annotations: core.juniper.net/display-name: vnr-1 labels: vnr: web ns: frontend spec: type: mesh virtualNetworkSelector: matchLabels: vn: web import: virtualNetworkRouters: - virtualNetworkRouterSelector: matchLabels: vnr: db namespaceSelector: matchLabels: ns: backend
Ce YAML est un exemple d’un VNR maillage avec le nom vnr-1
dans l’espace de noms frontend
, avec le labels
vnr: web
et ns: frontend
. Ce VNR importe sa cible de routage vers n’importe quel VNR de l’espace de noms backend
avec matchLabel
vnr: db
.
VNR en réseau
kind: VirtualNetworkRouter metadata: namespace: frontend name: vnr-1 annotations: core.juniper.net/display-name: vnr-1 labels: vnrgroup: spokes ns: frontend spec: type: spoke virtualNetworkSelector: matchLabels: vngroup: spokes import: virtualNetworkRouters: - virtualNetworkRouterSelector: matchLabels: vnrgroup: hubs namespaceSelector: matchLabels: ns: backend
Ce YAML est un exemple d’un VNR en spoke dont le nom vnr-1
est dans l’espace de noms frontend
avec le labels
vnrgroup: spokes
et ns: frontend
. Ce VNR importe ses cibles de routage dans n’importe quel VNR de l’espace de noms backend
avec matchLabel
vnrgroup: hubs
.
Hub VNR
apiVersion: core.contrail.juniper.net/v1alpha1 kind: VirtualNetworkRouter metadata: namespace: backend name: vnr-2 annotations: core.juniper.net/display-name: vnr-2 labels: vnrgroup: hubs ns: backend spec: type: hub virtualNetworkSelector: matchLabels: vngroup: hubs import: virtualNetworkRouters: - virtualNetworkRouterSelector: matchLabels: vnrgroup: spokes namespaceSelector: matchLabels: ns: frontend
Ce YAML est un exemple d’un VNR hub dont le nom vnr-2
est dans l’espace de noms backend
avec labels
vnrgroup: hubs
et ns: backend
. Ce VNR importe ses cibles de routage dans n’importe quel VNR de l’espace de noms frontend
avec matchLabels
vnrgroup: spokes
.