Préface
Maintenant, quelle que soit la nouvelle technologie, un nouveau cadre apparaît, qu'il y a 2
un 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 2
problè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 Docker
des questions clés à résoudre. Aujourd'hui, nous allons découvrir ensemble les Docker
solutions réseau.
Solution réseau dans Docker
Dans Docker
le réseau, les problèmes sont des 3
sortes 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 kubernetes
regardant 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 CNI
standards (standards kubernetes
définis par la communauté ou les entreprises pour faciliter l'expansion). CNI
Les normes peuvent être résumées en trois chapitres et quatre objectifs . comme suit:
Trois chapitres:
pod
Avecpod
une communication directe, pas besoin d'afficher l'utilisationNAT
node
Avecpod
une communication directe, pas besoin d'afficher l'utilisationNAT
pod
L'IP
adresse visible appartient en effetpod
à d'autres lors de la communication avec elle, sans conversion d'affichage
Quatre objectifs:
- Conteneur donnant la communication de conteneur
pod
Et lapod
communication entrepod
Et laservice
communication entreservice
Communication 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 3
solutions ci-dessus une par une .
Flanelle
flannel
Il 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 内网IP
communiquer directement !
La structure générale est la suivante:
- 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.
etcd
Stockez également ce correspondant à chaque hôteip
.flannel
Utilisation d'etcd
unwatch
mécanisme pour surveiller/coreos.com/network/subnets
les 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/16
segment d' utilisation du réseau de superposition et chaque hôte possède/24
un sous-réseau. Paquet donc主机a
acceptable10.100.5.0/24
et主机B
acceptable10.100.18.0/24
.flannel
Utiliséetcd
pour maintenirip
le mappage entre le sous-réseau attribué et l' adresse réelle . Pour le chemin des données,flannel
utilisezudp
pour encapsulerip数据报
et transmettre à l'hôte distant. Leudp
protocole a été choisi car il peut pénétrer le pare-feu.
Un processus de communication complet est le suivant
- Le paquet de données est envoyé du conteneur source et
docker0
transmis àflannel0
- 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 sourceflanneld
d'etcd
informations de routage à l' intérieur de la requête de l'adresse de destination - L'hôte source encapsule
flanneld
ensuiteUDP
le 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
- L'extrémité opposée
flanneld
reçoit le paquet de données, le décompresse et l'envoie à laflannel0
carte réseau, puis le transmet à ladocker0
carte réseau - Enfin
docker0
acheminé 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 ip
adresses et les identifiers
ressources afin de localiser les ressources. C'est, TCP
Emballage dans un autre transfert de paquets de réseau et de routage communication à l' intérieur, prend désormais en charge UDP
, VxLAN
, AWS VPC
et le GCE
routage mode de transmission de données.
Tisser
weave
Il a été développé par la weaveworks
société et son objectif est de résoudre la Docker
communication entre hôtes et de connecter des conteneurs sur plusieurs nœuds pour former un réseau local. Aucun KV Store
stockage requis .
Un weave
réseau est composé d'une série peers
( WRoute
), qui WRoute
sont stockées sur différents hôtes. Connectez - vous entre différents hôtes WRoute
via des weave connect
commandes. 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:
- Il y en a un déployé sur chaque
Docker
hô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.weave
Le réseau est composé de cesweave routers
points de terminaison homologues (peer
) et laweave
topologie du réseau peut être personnalisée via la ligne de commande. - Une connexion
WRoute
sera établie entre chaque2
- Une
tcp
connexion pour la prise de contact et l'échange d'informations sur la topologie du réseau. Le6783
port par défaut . - Une
udp
connexion pour le transfert d'informations sur le plan de données. Le6783
port par défaut .
- Du côté des données, il
weave
estudp
réalisé par encapsulationL2 Overlay
.2
Modes de prise en charge de l'encapsulation des données
sleeve mode
: Le mode utilisateur, viapcap
l'appareil dansLinux bridge
les paquets de données interceptés par le packagewRouter
completUDP
, prend en charge leL2 traffic
cryptage, prend en chargePartial Connection
, mais perte significative de performancesfastpath mode
: Mode noyau, à traversOVS
l'odp
empaquetageVxlan
, MPLS,WRouter
pas directement impliqué dans le transfert, cette approche peut considérablement améliorer le débit, ne prend pas en charge le cryptage
sleeve mode
Le modèle est le suivant:
fastpath mode
Le modèle est le suivant:
Ce qui précède est vraiment weave
l'information de base et la structure générale sous l' introduction , arrivons à un organigramme plus détaillé, comme suit:
weave
Chaque conteneur doit avoir deux cartes réseau, l'une est connectée au pont pour gérer leL2
trafic et l'autre est connectéedocker0
àweave-bridge
: Leweave
pont créé, une extrémité du pont est connectée au conteneur et une extrémité estweave
docker0
:docker
Réseau natif, utilisé pour communiquer avec le conteneur hôte,Docker0
derrière lui se trouve toujours l'iptables nat
implémentation
Les étapes de communication entre les conteneurs dans la figure ci-dessus sont les suivantes:
container1
Enveth1
passant le trafic vers leweave-bridge
pont réseau de l'hôteWRoute
Utilisezpcap
les 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 sontWRoute
encapsulés dansUDP
des paquets de données et transférés à tous les autres hôtes- Sur d'autres hôtes,
WRoute
décapsulez le paquet après l'avoir reçu, puispcap
injectez le paquet dans l'interface du pont, puisveth
transférez le trafic vers le conteneur via le pont
Calicot
calico
Considé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 calico
solution 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 etcd
de stocker des métadonnées réseau.
La structure générale est la suivante:
Felix
:calico agent
, Responsable de la configuration du routage etACL
(contrôle d'accès), etc.etcd
: Stockage des métadonnées sur le réseau pour garantircalico
un état du réseau cohérentBGP Client(BIDR)
: Principalement responsable de l'Felix
écriturekernel
et de la distribution des informations de routage vers leCalico
réseau actuel pour assurerworkload
l'efficacité de la communication entreBGP Route Reflector(BIRD)
: Le déploiement d'une utilisation à grande échelle, se débarrasser de tous les nœuds enmesh
mode interconnecté , un ou plusieursBGP Route Reflector
pour compléter la distribution centralisée des routescalico-ipam
: Principalement utilisé pour leskubernetes-cni
plug-ins, non écrit ici
Il exécutera deux programmes principaux sur chaque nœud. L'un est de Felix
surveiller ECTD
le stockage du centre et d'en récupérer les événements. Par exemple, l'utilisateur en ajoute un à cette machine IP
ou alloue un conteneur. Ensuite, un conteneur sera créé sur cette machine, et il sera 网卡、IP、MAC
mis en place, puis écrire une entrée dans la table de routage du noyau, indiquant que cela IP
devrait aller sur cette carte réseau. BGP Client
C'est un programme de routage standard. Il obtiendra du noyau les IP
routes qui ont changé, puis se BGP
propage à tous les autres hôtes via le protocole de routage standard, de sorte que le monde extérieur sache que IP
c'est ici, et vous y arrivez lorsque vous routez. Viens.
Calico
Méthode de réseau:
calico
Il existe deux types de méthodes réseau, comme suit:
IPinIP
: C'est l'équivalent d'un pont réseau de base. Juste unip隧道
BGP
: Border Gateway Protocol, un protocole de routage autonome décentralisé sur Internet
Calico conclut:
Comme il Calico
s'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 NAT
et 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 |