Notes d'étude du programme de mise en œuvre du réseau Docker

Préface

Maintenant, quelle que soit la nouvelle technologie, un nouveau cadre apparaît, qu'il y a 2un problème, c'est que nous ne sommes pas ouverts autour, y compris le système d'exploitation, y compris pas ouvert autour de ce 2problème, mais aussi une question très basique - 网络et 存储.
Rappelez-vous les frameworks suivants appris auparavant, rappelez-vous les principes de système d'exploitation suivants, est-il impossible de contourner ces deux points? Ces deux points sont à la base de toutes les procédures et sont également Dockerdes questions clés à résoudre. Aujourd'hui, nous allons découvrir ensemble les Dockersolutions réseau.

Solution réseau dans Docker

Dans Dockerle réseau, les problèmes sont des 3sortes de solutions. comme suit:

  • Flannel
  • Weave
  • Calico

Leur but n'est rien de plus que de résoudre le même problème: comment faire communiquer les conteneurs entre eux? Ce problème est à nouveau escaladé, et en kubernetesregardant le cluster, il résout le même problème. Cependant kubernetes, il a quelques contraintes, toutes les implémentations du réseau doivent suivre des CNIstandards (standards kubernetesdéfinis par la communauté ou les entreprises pour faciliter l'expansion). CNILes normes peuvent être résumées en trois chapitres et quatre objectifs . comme suit:

Trois chapitres:

  • podAvec podune communication directe, pas besoin d'afficher l'utilisationNAT
  • nodeAvec podune communication directe, pas besoin d'afficher l'utilisationNAT
  • podL' IPadresse visible appartient en effet podà d'autres lors de la communication avec elle, sans conversion d'affichage

Quatre objectifs:

  • Conteneur donnant la communication de conteneur
  • podEt la podcommunication entre
  • podEt la servicecommunication entre
  • serviceCommunication externe

De plus, en général, les principales plates-formes cloud combineront leurs propres solutions réseau pour parvenir à une solution et les ignoreront pour le moment. Étudions les 3solutions ci-dessus une par une .

Flanelle

flannelIl a été développé par l' coreoséquipe et a ipété conçu à l' origine pour résoudre les règles d'utilisation des adresses de replanification de tous les nœuds du cluster , afin que les conteneurs sur différents nœuds puissent être obtenus 同一个内网et 不重复的IP地址que les conteneurs sur différents nœuds puissent 内网IPcommuniquer directement !

La structure générale est la suivante:
Insérez la description de l'image ici

  • Flannel utilise etcd pour stocker les données de configuration et les informations d'allocation de sous-réseau. Une fois Flannel démarré, le processus d'arrière-plan récupère d'abord la configuration et la liste des sous-réseaux utilisés, puis sélectionne un sous-réseau disponible, puis essaie de l'enregistrer. etcdStockez également ce correspondant à chaque hôte ip. flannelUtilisation d' etcdun watchmécanisme pour surveiller /coreos.com/network/subnetsles informations suivantes pour tous les éléments de modification et pour les maintenir conformément à une table de routage.
  • Chaque hôte est configuré avec un segment IP et le nombre de sous-réseaux. Par exemple, vous pouvez configurer un 10.100.0.0/16segment d' utilisation du réseau de superposition et chaque hôte possède /24un sous-réseau. Paquet donc 主机aacceptable 10.100.5.0/24et 主机Bacceptable 10.100.18.0/24. flannelUtilisé etcdpour maintenir iple mappage entre le sous-réseau attribué et l' adresse réelle . Pour le chemin des données, flannelutilisez udppour encapsuler ip数据报et transmettre à l'hôte distant. Le udpprotocole a été choisi car il peut pénétrer le pare-feu.

Un processus de communication complet est le suivant

  1. Le paquet de données est envoyé du conteneur source et docker0transmis àflannel0
  2. Une fois que la source a flanneldécouté ce paquet de données, à qui le paquet de données doit-il être analysé flanneld? Une source flanneldd' etcdinformations de routage à l' intérieur de la requête de l'adresse de destination
  3. L'hôte source encapsule flanneldensuite UDPle paquet de données à l'aide du protocole, puis délivre le paquet de données à l'extrémité opposée selon la table de routageflanneld
  4. L'extrémité opposée flanneldreçoit le paquet de données, le décompresse et l'envoie à la flannel0carte réseau, puis le transmet à la docker0carte réseau
  5. Enfin docker0acheminé vers le conteneur final

Flannel a conclu qu'il
flannel s'agissait essentiellement d'un type unique "覆盖网络(overlay network)", ce qui signifie qu'un réseau fonctionnant sur Internet (réseau de couche d'application) ne dépend pas des adresses IP pour transmettre des messages, mais utilise un mécanisme de mappage pour mapper les ipadresses et les identifiersressources afin de localiser les ressources. C'est, TCPEmballage dans un autre transfert de paquets de réseau et de routage communication à l' intérieur, prend désormais en charge UDP, VxLAN, AWS VPCet le GCEroutage mode de transmission de données.

Tisser

weaveIl a été développé par la weaveworkssociété et son objectif est de résoudre la Dockercommunication entre hôtes et de connecter des conteneurs sur plusieurs nœuds pour former un réseau local. Aucun KV Storestockage requis .

Un weaveréseau est composé d'une série peers( WRoute), qui WRoutesont stockées sur différents hôtes. Connectez - vous entre différents hôtes WRoutevia des weave connectcommandes. Cela signifie que vous pouvez spécifier vous-même la topologie du réseau du cluster.

Le diagramme d'architecture globale est le suivant:
Insérez la description de l'image ici

  • Il y en a un déployé sur chaque Dockerhôte déployé (soit une machine physique soit une machine virtuelle) WRouter, et il peut également être déployé sous la forme d'un conteneur. weaveLe réseau est composé de ces weave routerspoints de terminaison homologues ( peer) et la weavetopologie du réseau peut être personnalisée via la ligne de commande.
  • Une connexion WRoutesera établie entre chaque2
  1. Une tcpconnexion pour la prise de contact et l'échange d'informations sur la topologie du réseau. Le 6783port par défaut .
  2. Une udpconnexion pour le transfert d'informations sur le plan de données. Le 6783port par défaut .
  • Du côté des données, il weaveest udpréalisé par encapsulation L2 Overlay. 2Modes de prise en charge de l'encapsulation des données
  1. sleeve mode: Le mode utilisateur, via pcapl'appareil dans Linux bridgeles paquets de données interceptés par le package wRoutercomplet UDP, prend en charge le L2 trafficcryptage, prend en charge Partial Connection, mais perte significative de performances
  2. fastpath mode: Mode noyau, à travers OVSl' odpempaquetage Vxlan, MPLS, WRouterpas directement impliqué dans le transfert, cette approche peut considérablement améliorer le débit, ne prend pas en charge le cryptage

sleeve modeLe modèle est le suivant:
Insérez la description de l'image ici

fastpath modeLe modèle est le suivant:
Insérez la description de l'image ici

Ce qui précède est vraiment weavel'information de base et la structure générale sous l' introduction , arrivons à un organigramme plus détaillé, comme suit:
Insérez la description de l'image ici

  • weaveChaque conteneur doit avoir deux cartes réseau, l'une est connectée au pont pour gérer le L2trafic et l'autre est connectée docker0à
  • weave-bridge: Le weavepont créé, une extrémité du pont est connectée au conteneur et une extrémité estweave
  • docker0: dockerRéseau natif, utilisé pour communiquer avec le conteneur hôte, Docker0derrière lui se trouve toujours l' iptables natimplémentation

Les étapes de communication entre les conteneurs dans la figure ci-dessus sont les suivantes:

  1. container1En veth1passant le trafic vers le weave-bridgepont réseau de l'hôte
  2. WRouteUtilisez pcaples paquets de données interceptés et excluez le trafic de données directement transmis par le noyau via le pont (trafic dans ce sous-réseau, conteneur local, conteneur et hôte). Les paquets capturés sont WRouteencapsulés dans UDPdes paquets de données et transférés à tous les autres hôtes
  3. Sur d'autres hôtes, WRoutedécapsulez le paquet après l'avoir reçu, puis pcapinjectez le paquet dans l'interface du pont, puis vethtransférez le trafic vers le conteneur via le pont

Calicot

calicoConsidérez la pile de protocoles de chaque système d'exploitation comme un routeur, puis considérez tous les conteneurs comme des terminaux connectés à ce routeur, exécutez des protocoles de routage standard entre les routeurs BGP协议et laissez-les apprendre eux-mêmes la topologie du réseau Comment faire suivre.

Par conséquent, la calicosolution est une solution pure à trois niveaux (non requise Overlay), ce qui signifie que les trois couches de chaque nœud assurent la connectivité à trois niveaux entre les deux conteneurs sur la machine et entre les deux conteneurs sur l'hôte. Besoin etcdde stocker des métadonnées réseau.

La structure générale est la suivante:
Insérez la description de l'image ici

  • Felix: calico agent, Responsable de la configuration du routage et ACL(contrôle d'accès), etc.
  • etcd: Stockage des métadonnées sur le réseau pour garantir calicoun état du réseau cohérent
  • BGP Client(BIDR): Principalement responsable de l' Felixécriture kernelet de la distribution des informations de routage vers le Calicoréseau actuel pour assurer workloadl'efficacité de la communication entre
  • BGP Route Reflector(BIRD): Le déploiement d'une utilisation à grande échelle, se débarrasser de tous les nœuds en meshmode interconnecté , un ou plusieurs BGP Route Reflectorpour compléter la distribution centralisée des routes
  • calico-ipam: Principalement utilisé pour les kubernetes-cniplug-ins, non écrit ici

Il exécutera deux programmes principaux sur chaque nœud. L'un est de Felixsurveiller ECTDle stockage du centre et d'en récupérer les événements. Par exemple, l'utilisateur en ajoute un à cette machine IPou alloue un conteneur. Ensuite, un conteneur sera créé sur cette machine, et il sera 网卡、IP、MACmis en place, puis écrire une entrée dans la table de routage du noyau, indiquant que cela IPdevrait aller sur cette carte réseau. BGP ClientC'est un programme de routage standard. Il obtiendra du noyau les IProutes qui ont changé, puis se BGPpropage à tous les autres hôtes via le protocole de routage standard, de sorte que le monde extérieur sache que IPc'est ici, et vous y arrivez lorsque vous routez. Viens.

CalicoMéthode de réseau:

calicoIl existe deux types de méthodes réseau, comme suit:

  1. IPinIP: C'est l'équivalent d'un pont réseau de base. Juste unip隧道
  2. BGP: Border Gateway Protocol, un protocole de routage autonome décentralisé sur Internet

Calico conclut:

Comme il Calicos'agit d'une mise en œuvre pure à trois couches, elle peut éviter l'opération d'encapsulation de paquets de données liée au schéma à deux couches. Il n'y a rien au milieu NATet il n'y en a pas overlay, donc son efficacité de transmission peut être la plus élevée de tous les schémas, en raison Le package va directement à l'original TCP/IP协议栈, et son isolation est également facile à faire grâce à cette pile. Parce qu'il TCP/IP协议栈fournit un ensemble complet de règles de pare-feu, il peut réaliser une logique d'isolation plus complexe grâce aux règles de `IPTABLES.

Pour résumer

Les avantages et inconvénients des trois options:

Programme avantage Désavantage
Flanelle 1. Simple et stable
2. Pas besoin de NAT
3. Mode de superposition et mode pur à 3 couches
1. La fonction DNS n'est pas fournie et les conteneurs ne sont accessibles que via ip.
2. etcd est requis.
3. La politique réseau n'est pas prise en charge.
Tisser 1. Prise en charge de l'accès au nom d'hôte
2. Pas besoin de NAT
3. Échangez les informations réseau par vous-même sans stockage
4. Prise en charge du cryptage
1. Réseau de superposition
2. Une configuration complexe, une connexion tissage ou un lancement de tissage est nécessaire pour rejoindre le réseau
Calicot 1. Pure trois couches, pas de superposition, haute efficacité
2. Prise en charge de l'accès au nom d'hôte
3. Pas besoin de NAT
4. Stratégie réseau parfaite
1. Besoin de stocker
2. Parce qu'il se trouve dans la troisième couche, prend actuellement en charge tcp et udp
3. Il y a des exigences pour le réseau sous-jacent, et l'adresse MAC de la deuxième couche est requise pour communiquer

Je suppose que tu aimes

Origine blog.csdn.net/Free_time_/article/details/107647236
conseillé
Classement