编程知识 cdmana.com

Docker overlay overlay Network and vxlan

La fiabilité et la sécurité des communications entre conteneurs sont très importantes,.Même si le conteneur appartient à différents hôtes dans différents réseaux.C'est aussi l'endroit pour couvrir l'exposition en ligne,Il permet la création de、Un réseau sécurisé à deux niveaux pour connecter plusieurs hôtes,Les conteneurs peuvent être connectés au réseau de superposition et communiquer directement entre eux.

Docker Support pour les réseaux de superposition natifs,Facile à configurer et très sûr.Il est basé sur Libnetwork Et les moteurs correspondants à construire.

Libnetwork - Oui. CNM Mise en œuvre typique de,Ainsi, différentes technologies et topologies de réseau peuvent être mises en œuvre par plug - and - play Drive.

Docker Fournit des informations telles que Overlay Entraînement natif,En même temps, des tiers peuvent également fournir des entraînements.

In 2015 Année 3 Mois,Docker La société a acquis un Socket Plane Des start - up en ligne.Il y a deux raisons à l'acquisition,D'abord parce que ça va donner Docker Une architecture de réseau qui donne un vrai sens,Deuxièmement, rendre la mise en réseau des conteneurs très simple,Pour que les développeurs puissent le configurer.

Docker L'entreprise a connu un grand succès sur ces deux points.Mais,Les commandes réseau simples sont en fait composées d'un grand nombre de composants.Cette section doit être comprise avant le déploiement de l'environnement de production et la localisation des problèmes.

In Swarm Construire et tester en mode Docker Écraser le réseau

Pour compléter l'exemple suivant,Deux Docker Hôte, Et connecté par deux réseaux indépendants à deux niveaux sur un routeur .Comme le montre la figure ci - dessous, Notez que les noeuds sont situés sur différents réseaux .

 1) Construire Swarm
Vous devez d'abord configurer les deux hôtes pour contenir deux noeuds Swarm Cluster. Et ensuite node1 Exécuter sur le noeud docker swarm init La commande en fait un noeud de gestion ,Et après node2 Exécuter sur le noeud docker swarm join Commande pour en faire un noeud de travail .

In node1 Exécutez la commande suivante sur le noeud .

$ docker swarm init \
--advertise-addr=172.31.1.5 \
--listen-addr=172.31.1.5:2377

In node2 Exécuter la commande suivante sur .

$ docker swarm join \
--token SWMTKN-1-0hz2ec...2vye \
172.31.1.5:2377

Maintenant que vous avez créé le noeud de gestion include node1 Et les noeuds de travail node2 Deux noeuds Swarm Cluster.

 2) Créer un nouveau réseau de superposition
Créer un nom uber-net Réseau de couverture pour.

In node1(Gérer les noeuds) Exécutez la commande suivante sur le noeud .

$ docker network create -d overlay uber-net

Je viens de créer un nouveau réseau de superposition. ,Peut se connecter Swarm Tous les hôtes du cluster , Et le réseau comprend un TLS Couche de contrôle chiffrée ! Si vous voulez toujours chiffrer la couche de données , Il suffit d'ajouter à la commande -o encrypted Paramètres.

Peut passer docker network ls La commande énumère tous les réseaux sur chaque noeud .

Si dans node2 Exécuter sur le noeud docker network ls Les ordres, On ne peut pas le voir. uber-net Réseau. C'est parce que ce n'est que lorsque le conteneur en cours d'exécution est connecté au réseau de superposition , Le réseau devient disponible . Cette stratégie d'entrée en vigueur retardée permet de réduire le peignage du réseau , Amélioration de l'extensibilité du réseau .

 3) Connectez le service au réseau de superposition
Le réseau de superposition est prêt ,Ensuite, créez un nouveau Docker Service et connexion au réseau .Docker Le Service comprendra deux copies (Conteneur),Une course node1 Sur le noeud,Un en cours d'exécution node2 Sur le noeud.Ça va automatiquement node2 Accès au noeud uber-net Réseau.

In node1 Exécutez la commande suivante sur le noeud .

Linux Voici quelques exemples.

$ docker service create --name test \
--network uber-net \
--replicas 2 \
ubuntu sleep infinity

Cette commande crée un test Nouveau service pour ,Connecté à uber-net Ce réseau de superposition , Et deux copies ont également été créées à partir du miroir spécifié (Conteneur). Dans deux exemples , Sont utilisés dans des conteneurs sleep Commande pour garder le conteneur en marche , Et sortir du récipient après la fin de la dormance .

Parce que deux copies ont été exécutées (Conteneur),Et Swarm Contient deux noeuds, Donc une copie est exécutée sur chaque noeud .

Peut passer docker service ps Commande pour confirmer l'opération ci - dessus .

$ docker service ps test

Quand Swarm Lors du démarrage d'un conteneur sur un réseau superposé , Ajoute automatiquement le noeud sur lequel le conteneur fonctionne au réseau .En ce moment node2 Vous pouvez le voir sur le noeud uber-net Le réseau..

Un nouveau réseau de superposition a été créé avec succès sur deux noeuds connectés par un réseau physique .En même temps, Deux conteneurs sont également connectés au réseau .
4) Test overlay Network
Utiliser maintenant ping Commande pour tester le réseau de superposition .

Comme le montre la figure ci - dessous, Dans deux réseaux distincts Docker Hôte, Et les deux sont connectés au même réseau de superposition . Actuellement, un conteneur est connecté au réseau de superposition sur chaque noeud . Testez si vous pouvez ping OK..

Pour effectuer ce test , Besoin de connaître chaque conteneur IP Adresse(Pour tester, Ignorer temporairement que les conteneurs sur le même réseau de superposition peuvent s'échanger par nom ping Les faits ).

Exécution docker network inspect Voir les Subnet.

$ docker network inspect uber-net

uber-net Le Sous - réseau de 10.0.0.0/24.Attention!, Ceci est relié à n'importe quel réseau physique sous - jacent de deux noeuds IP Aucune ne correspond (172.31.1.0/24 Et 192.168.1.0/24).

In node1 Et node2 Exécutez les deux commandes suivantes sur le noeud . Ces deux commandes peuvent obtenir le conteneur ID Et IP Adresse. Dans la deuxième commande, assurez - vous d'utiliser le conteneur dans l'environnement du lecteur ID.

La commande ci - dessus doit être exécutée séparément sur les deux noeuds , Obtenir deux conteneurs ID Et IP Adresse.

La figure ci - dessous montre l'état actuel de la configuration .Dans un environnement opérationnel,Sous - réseaux et IP Les informations d'adresse peuvent être différentes .

Comme le montre la figure, Un réseau de superposition à deux niveaux s'étend sur deux hôtes , Et chaque conteneur a son propre IP Adresse.Cela signifie node1 Les conteneurs sur les noeuds peuvent passer par node2 Du conteneur sur le noeud IP Adresse 10.0.0.4 Allez, viens. ping OK.,Le IP L'adresse appartient au réseau de superposition . Bien que les deux noeuds appartiennent à des réseaux à deux niveaux différents , Ou peut - être directement ping OK.. Vérifiez ceci. .

Connectez - vous à node1 Conteneur pour,Et ping Un autre conteneur .

In Linux Ubuntu Si l'opération est effectuée dans le conteneur ,Installation requise ping Kit d'outils.

Il est également possible de suivre à l'intérieur du conteneur ping Informations de routage pour la commande . Il n'y a qu'une seule information de routage , Démontrer que la communication entre les conteneurs est effectivement directement connectée par un réseau de superposition .

Si vous voulez Linux Dans l'exemple traceroute Exécutable,Installation requise traceroute Sac.

Linux Voici quelques exemples.

$ [email protected]:/# traceroute 10.0.0.4

Jusqu'à présent, Un réseau de superposition a été créé avec une seule commande , Et un conteneur a été connecté au réseau . Ces conteneurs sont répartis sur deux hôtes différents , Les deux hôtes appartiennent à des réseaux à deux niveaux différents . Je cherche deux conteneurs. IP Après, Vérifier que le conteneur peut être connecté directement en recouvrant le réseau .

Comment ça marche
1) VXLAN Introduction
Docker Utiliser VXLAN La technologie des tunnels crée un réseau virtuel de superposition à deux niveaux .

In VXLAN Dans la conception, Permet à l'utilisateur de créer un réseau virtuel à deux niveaux basé sur une structure de réseau à trois niveaux qui existe déjà . Dans l'exemple précédent, un masque de sous - Réseau a été créé avec 10.0.0.0/24 Réseau à deux niveaux, Le réseau est basé sur trois niveaux IP Mise en place du réseau ,Trois niveaux IP Réseau par 172.31.1.0/24 Et 192.168.1.0/24 Ces deux réseaux à deux niveaux .Voir la figure ci - dessous pour plus de détails..

VXLAN Ce qui est merveilleux, c'est qu'il s'agit d'une technologie d'emballage , Peut faire ressembler les routeurs existants et l'architecture réseau à la normale IP/UDP Le même sac., Et il n'y a aucun problème à gérer .

Pour créer un réseau de superposition à deux niveaux ,VXLAN Basé sur les trois niveaux existants IP Le réseau a créé un tunnel .Réseau de base(Underlay Network)Ce terme, Il est utilisé pour faire référence à la partie de fondation sous trois couches .

VXLAN Les deux extrémités du tunnel sont VXLAN Terminal Tunnel (VXLAN Tunnel Endpoint, VTEP).VTEP Les étapes d'encapsulation et de décompression sont terminées , Et certaines opérations nécessaires à la réalisation de la fonction ,Comme le montre la figure ci - dessous.

 2) Peignez deux exemples de contenants
Dans l'exemple précédent,Adoption IP Le réseau relie deux hôtes . Chaque hôte exécute un conteneur , Ensuite, une connexion conteneur a été créée VXLAN Écraser le réseau.

Pour réaliser le scénario ci - dessus , Un nouveau Sandbox(Espace de noms réseau).Sandbox Comme un conteneur, Mais ce n'est pas l'application qui fonctionne , Il s'agit plutôt d'une pile réseau autonome sur l'hôte actuel .

In Sandbox En interne, on a créé un Br0 Commutateur virtuel pour( Aussi connu sous le nom de pont virtuel ).En même temps Sandbox En interne, un VTEP, Une des extrémités est reliée à Br0 Dans les commutateurs virtuels , L'autre extrémité accède à la pile du réseau hôte (VTEP).

Le terminal dans la pile du réseau hôte est obtenu à partir du réseau sous - jacent auquel l'hôte est connecté IP Adresse,Et UDP Socket Est lié à 4789 Port. Deux sur différents hôtes VTEP Adoption VXLAN Tunnel crée un réseau de superposition ,Comme le montre la figure ci - dessous.

C'est VXLAN Nécessaire à la création et à l'utilisation du réseau supérieur .

Ensuite, chaque conteneur aura son propre Ethernet virtuel (veth)Adaptateur, Et accès local Br0 Commutateur virtuel. La topologie actuelle est illustrée ci - dessous , Même si le réseau auquel appartient l'hôte est indépendant l'un de l'autre , Mais il est plus facile de voir comment deux conteneurs situés sur différents hôtes passent VXLAN Le réseau supérieur communique .

 3) Exemple de communication
Dans ce cas,,Oui. node1 Le conteneur sur est appelé C1,node2 Le conteneur sur est appelé C2,Comme le montre la figure ci - dessous.Hypothèses C1 L'espoir ping OK. C2.

C1 Lancement ping Demande,Objectifs IP Pour C2 Adresse 10.0.0.4. Le trafic demandé est connecté à Br0 Commutateur virtuel veth Émission de l'interface. Le commutateur virtuel ne sait pas où envoyer le paquet , Parce que dans le commutateur virtuel MAC Tableau de cartographie des adresses(ARP Tableau de cartographie) Il n'y a pas de lien avec le but actuel IP Correspondant MAC Adresse.

Le commutateur virtuel envoie le paquet à tous les ports sur lui .Connectez - vous à Br0 De VTEP L'interface sait comment transmettre ce cadre de données ,Va se transformer MAC Adresse retournée. C'est un agent. ARP Réponse, Et le commutateur virtuel Br0 Apprendre à transmettre le paquet en fonction des résultats retournés . Ensuite, l'échange virtuel met à jour son ARP Tableau de cartographie,Oui. 10.0.0.4 Mapping to Local VTEP De MAC Adresse.

Maintenant Br0 Switch a appris à transmettre la cible pour C2 Flux, Tout ce qui suit est envoyé à C2 Les paquets sont envoyés directement à VTEP Interface.VTEP L'interface sait C2, C'est parce que tous les conteneurs nouvellement lancés auront leurs propres détails de réseau intégrés dans le réseau Gossip Protocole envoyé au même Swarm Autres noeuds dans le cluster .

L'échange transmet le paquet à VTEP Interface,VTEP Encapsulation complète du cadre de données , Pour pouvoir transmettre sur le réseau sous - jacent . L'opération d'emballage consiste à mettre VXLAN Header Message ajouté dans le cadre Ethernet .

VXLAN Header L'information contient VXLAN Réseau ID(VNID), Son rôle est d'enregistrer VLAN À VXLAN Relations cartographiques pour.Chaque VLAN Un pour chacun. VNID, Afin que le paquet puisse être transmis au bon VLAN.

L'Encapsulation place le cadre de données dans UDP Dans le sac,Et la mise en place UDP Objet IP Le champ est node2 Node VTEP De IP Adresse,Ensemble simultané UDP Socket Le port est 4789. Cette Encapsulation garantit que le réseau sous - jacent, même s'il ne sait rien VXLAN Informations sur, Le transfert de données peut également être effectué .

Quand le sac arrive node2 Après, Le port de destination de la découverte du noyau est UDP Port 4789, Et il sait qu'il existe VTEP L'interface est liée à ce Socket. Donc le noyau envoie le paquet VTEP,Par VTEP Lire VNID, Décompresser les informations du paquet ,Et selon VNID Envoyer au nom local Br0 Est connecté à VLAN Commutateur pour. Sur cet interrupteur , Paquet envoyé au conteneur C2.

Les grandes lignes de ce qui précède sont les suivantes: Docker Comment le réseau de superposition est utilisé VXLAN Technique.

La dernière chose à noter est ,Docker Prise en charge du routage à trois niveaux avec le même réseau de superposition . Vous pouvez créer un réseau de superposition avec deux sous - réseaux ,Docker Sera responsable de l'acheminement entre les sous - réseaux . Commandes créées comme docker network create --subnet=10.1.1.0/24 --subnet=11.1.1.0/24 -d overlay prod-net.La commande sera affichée dans le Sandbox Créer deux commutateurs virtuels dans , Le routage est pris en charge par défaut .

版权声明
本文为[Petit, York?]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201080556240948.html

Scroll to Top