Detaillierte Erläuterung des direkten Routings bei der hostübergreifenden Kommunikation von Docker-Containern

Detaillierte Erläuterung des direkten Routings bei der hostübergreifenden Kommunikation von Docker-Containern

Überblick

Was das aktuelle Standardnetzwerk von Docker selbst betrifft, können verschiedene Docker-Container auf einem einzelnen Host mithilfe der Docker0-Brücke direkt kommunizieren, was in Ordnung ist. Docker-Container auf verschiedenen Hosts können jedoch nur kommunizieren, indem sie Ports auf dem Host zuordnen. Manchmal ist diese Methode unpraktisch und erfüllt möglicherweise nicht einmal unsere Anforderungen. Daher müssen Docker-Container auf verschiedenen physischen Maschinen direkt über ihre eigenen IP-Adressen kommunizieren. Wenn wir Docker-Container auf unterschiedlichen physischen Hosts starten, treten außerdem zwangsläufig Probleme mit der hostübergreifenden Kommunikation der Docker-Container auf. Versuchen wir es in diesem Artikel.

Analyse des Schemaprinzips

Da die IP des Containers für das Routing verwendet wird, muss vermieden werden, dass Container auf unterschiedlichen Hosts dieselbe IP verwenden. Um dies sicherzustellen, sollten wir verschiedenen Hosts unterschiedliche Subnetze zuweisen. Daher konstruieren wir eine Routing-Lösung für die Kommunikation zwischen zwei Containern.

Einführung in die Umgebung:

Die IP-Adresse von Host 1 lautet: 192.168.145.128
Die IP-Adresse von Host 2 lautet: 192.168.145.129
Dem Docker-Container auf Host 1 zugewiesenes Subnetz: 172.17.1.0/24
Den Docker-Containern auf Host 2 zugewiesenes Subnetz: 172.17.2.0/24
Nach dieser Konfiguration verwenden die Docker-Container auf den beiden Hosts definitiv nicht dieselbe IP-Adresse, wodurch IP-Konflikte vermieden werden.

Zusammenfassend läuft der Datenpaketübertragungsprozess zwischen zwei Containern wie folgt ab:
Das von Container1 an Container2 gesendete Datenpaket wird zuerst an das „Gateway“ Docker0 von Container1 gesendet. Anschließend wird durch Nachschlagen der Route von Host1 festgestellt, dass das Datenpaket an Host2 gesendet werden muss. Nachdem das Datenpaket bei Host2 angekommen ist, wird es an Docker0 von Host2 weitergeleitet und schließlich von Docker0 an Container2 übertragen. Das umgekehrte Prinzip ist dasselbe und wird hier nicht wiederholt.

1. Konfigurieren Sie Docker0 auf Host 1 bzw. Host 2

Bearbeiten Sie die Datei /etc/docker/daemon.json auf Host 1 und fügen Sie den folgenden Inhalt hinzu: „bip“ : „ip/netmask“
{ "bip", "172.17.1.252/24" }

Bearbeiten Sie die Datei /etc/docker/daemon.json auf Host 2 und fügen Sie den folgenden Inhalt hinzu: „bip“ : „ip/netmask“
{ "bip", "172.17.2.252/24" }

Starten Sie den Docker-Dienst neu. Führen Sie den folgenden Befehl auf Host 1 und Host 2 aus, um den Docker-Dienst neu zu starten, damit das geänderte Docker0-Netzwerksegment wirksam wird. systemctl restart docker

2. Routing-Regeln hinzufügen

Fügen Sie Routingregeln auf Host 1 wie folgt hinzu:
Route add -net 172.17.2.0 Netzmaske 255.255.255.0 gw 192.168.145.129

Fügen Sie Routingregeln auf Host 2 wie folgt hinzu:
Route add -net 172.17.1.0 Netzmaske 255.255.255.0 gw 192.168.145.128

3. Konfigurieren Sie iptables-Regeln

Fügen Sie auf Host 1 die folgenden Regeln hinzu:
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

Fügen Sie auf Host 2 die folgenden Regeln hinzu:
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

4. Starten Sie den Container

Starten Sie den CentOS-Container auf Host 1:
docker run -it --name container1 centos /bin/bash

Starten Sie den CentOS-Container auf Host 2:
docker run -it --name container2 centos /bin/bash

OK, jetzt können die beiden Container sich gegenseitig anpingen.

5. Routenpersistenz (um Routenverlust beim Neustart des Hosts zu verhindern)

root@rancher:~# vi /etc/rc.local

Fügen Sie Routing-Informationen hinzu. Denken Sie daran, diese vor dem Beenden zu schreiben! ! ! :
Route add -net 172.17.2.0 Netzmaske 255.255.255.0 gw 192.168.102.88

Das Obige ist alles Wissenswerte über die hostübergreifende Kommunikation von Docker-Containern. Vielen Dank für Ihr Wissen und Ihre Unterstützung für 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung, wie Docker-Container über Hosts hinweg kommunizieren
  • Detaillierte Erklärung des Overlay-Netzwerks in Docker
  • Implementierung eines Docker-Cross-Host-Netzwerks (Overlay)
  • Hostübergreifende Kommunikation im Docker-Container – Overlay-Netzwerk

<<:  Detaillierte Erklärung zur Installation und Verwendung von Vue-Router

>>:  Funktionsweise von SQL-SELECT-Datenbankabfragen

Artikel empfehlen

Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS

Dieser Artikel stellt kurz den Prozess der Einric...

So deinstallieren Sie MySQL 8.0 unter Linux

1. MySQL herunterfahren [root@localhost /]# Diens...

HTML-Grundlagen - Einfaches Beispiel zum Festlegen des Hyperlink-Stils

*** Beispiel für das Festlegen des Stils eines Hy...

Implementierung integrierter Module und benutzerdefinierter Module in Node.js

1. Commonjs Commonjs ist ein benutzerdefiniertes ...

Apache Calcite-Code zur Dialektkonvertierung

Definition Calcite kann SQL vereinheitlichen, ind...

Tutorial zur Installation von MySQL8 unter Linux CentOS7

1. Installation der RPM-Version Überprüfen Sie, o...

Lösen Sie das Problem, dass Docker Sudo-Operationen verwenden muss

Die Schritte sind wie folgt 1. Erstellen Sie eine...

Die Fallstricke beim Erlernen von Vue.js

Inhaltsverzeichnis Klasse void zeigen ES6-Pfeilfu...

Detaillierte Erklärung der Verwendung des chmod-Befehls in Linux

chmod-Befehlssyntax Dies ist die korrekte Syntax ...

Implementierung einer Lösung für adaptive Textbereichshöhe in Vue

Inhaltsverzeichnis Versteckte Probleme Lösung zur...

Einführung in die Vue-Grundlagen: Installation und Verwendung von Vuex

Inhaltsverzeichnis 1. Was ist vuex 2. Installatio...

mysql-5.7.28 Installations-Tutorial unter Linux

1. Laden Sie die Linux-Version von der offizielle...

Detaillierte grafische Erklärung zum Löschen des Keep-Alive-Cache

Inhaltsverzeichnis Eröffnungsszene Direktes Rende...