Docker Netzwerk einfach erklärt Teil 4 - IPVLAN, OVERLAY und NONE

Docker IPVLAN und OVERLAY

Um Docker Container miteinander zu verbinden und intern oder extern mit einem Container zu kommunizieren, gibt es verschiedene Möglichkeiten. Einige Docker-Grundlagen sollten für dieses Tutorial bereits vorhanden sein, sind aber nicht zwingend notwendig, ansonsten empfehle ich meinen Kurs Das große Docker & Linux Enterprise Bootcamp zu besuchen.

Hier kommst du zu Teil 1 , Teil 2 und Teil 3 dieser Serie über das Docker-Netzwerk.

In dieser Serie verwende ich eine VirtualBox mit einem frisch installierten Ubuntu LTS. Du kannst die Beispiele aber auch auf jeder anderen Maschine oder auf einem gemieteten Server wie z.B. von Netcup nachvollziehen.

Docker-Container im IPVLAN L2-Netzwerk nutzen

Eine bessere Alternative zu MacVLAN ist IPVLAN. IPVLAN gibt es in zwei Varianten. Die erste ist der L2-Modus, der dem MacVLAN sehr ähnlich ist, mit der Ausnahme, dass die MAC-Adressen zugewiesen werden. Im IPVLAN-Modus verwenden alle logischen IP-Schnittstellen die gleiche MAC-Adresse.

So kannst du die übergeordnete Netzwerkkarte aus dem Promiscuous-Modus heraushalten und vermeidest außerdem, dass die MAC-Adressen der Netzwerkkarte oder des Switch-Ports eingeschränkt werden.

Der zweite Modus ist IPVLAN Layer 3. Im Layer-3-Modus verhält sich IPVLAN wie ein Router und leitet Unicast-Pakete in und aus den mit IPVLAN verbundenen Netzwerken weiter.

Overlay-Docker-Netzwerk

In diesem Abschnitt lernst du die Netzwerkoptionen, wie du Docker Swarm und Docker Overlay Networks nutzen kannst, um den Einsatz und die Konnektivität von Multi-Host-Container-Setups zu verbessern und zu vereinfachen.

Ein "Overlay-Netzwerk" ist ein virtuelles Netzwerk, das über einem anderen Netzwerk läuft. Die Geräte in diesem Netzwerk wissen nicht, dass sie sich in einem Overlay befinden. Herkömmliche VPNs zum Beispiel sind Overlay-Netzwerke, die über das Internet laufen.

Der Begriff "Overlay" wird erst ausgiebig verwendet (anstelle von VPN), nachdem andere Technologien als PPTP oder L2TP entwickelt wurden, um virtuelle Netzwerke in Cloud-Umgebungen zu betreiben. Für diese Umgebungen wurden Protokolle wie VXLAN oder GENEVE entwickelt, um spezielle Anforderungen zu erfüllen.

Das Thema, das in diesem Dokument behandelt wird, wird am besten unter https://docs.docker.com/network/ erläutert. Dieses Dokument fasst die wichtigsten dort verfügbaren Informationen zusammen.

Das Docker Overlay: Verbindet mehrere Docker-Daemons miteinander, um ein flaches virtuelles Netzwerk über Hosts hinweg zu schaffen, in dem du die Kommunikation zwischen einem Schwarmdienst und einem Standalone-Container oder zwischen zwei Standalone-Containern auf verschiedenen Docker-Daemons herstellen kannst. Mit dieser Strategie entfällt das Routing auf Betriebssystemebene zwischen diesen Containern.

Firewall-Regeln für Docker-Daemons in Overlay-Netzwerken

Du musst die folgenden Ports für den Datenverkehr zu und von jedem Docker-Host, der an einem Overlay-Netzwerk teilnimmt, öffnen:

  • TCP-Port 2377 für die Kommunikation mit dem Clustermanagement
  • TCP- und UDP-Port 7946 für die Kommunikation zwischen den Knotenpunkten
  • UDP-Port 4789 für den Overlay-Netzwerkverkehr

Auf bestimmten Linux-Systemen musst du die Ports möglicherweise in der Host-Firewall öffnen. Das kannst du mit firewalld in Systemen wie RedHat oder mit iptables machen. Hier ist ein Beispiel, wie du es in RedHat implementieren kannst.

$ sudo firewall-cmd --add-port=2377/tcp --permanent
$ sudo firewall-cmd --add-port=7946/tcp --permanent
$ sudo firewall-cmd --add-port=7946/udp --permanent
$ sudo firewall-cmd --add-port=4789/udp –permanent
$ sudo firewall-cmd --reload

Bevor du ein Overlay-Netzwerk erstellen kannst, musst du deinen Docker-Daemon entweder mit docker swarm init als Schwarmmanager initialisieren oder ihn mit docker swarm join einem bestehenden Schwarm hinzufügen. In beiden Fällen wird das standardmäßige Ingress-Overlay-Netzwerk erstellt, das von den Swarm-Diensten standardmäßig verwendet wird. Das musst du auch dann tun, wenn du nie vorhast, die Schwarmdienste zu nutzen. Danach kannst du weitere benutzerdefinierte Overlay-Netzwerke erstellen.

Die Einrichtung des Overlay-Docker-Netzwerks mit Swarm

Wir wollen ein Netzwerk einrichten, das drei Container auf drei verschiedenen Docker-Hosts verbindet. Das Ziel ist nicht, Schwärme zu bilden, sondern die Vernetzung von einzelnen Containern, die auf verschiedenen Hosts laufen, zu verbessern.

  1. Erstellen eines neuen Swarms

Host 1

$ docker swarm init

Notiere dir das Token, das der Befehl ausgibt, da du es später noch brauchst. Host1 wird der Schwarmmanager.

Host 2 und Host 3

$ docker swarm join --token <TOKEN> <IP-ADDRESS-OF-MANAGER>:2377

2. Überprüfe auf Host1 (weil er der Manager ist), dass der Schwarm bereit ist:

$ docker node ls
ID                            HOSTNAME         STATUS AVAILABILITY MANAGER STATUS
d18ace5iraw2whp2llvpu48 *   ip-172-31-34-12 Ready Active        Leader
nvp1rwa2vb3lhdggo3f4plg     ip-172-31-35-14 Ready Active
ouvx2l2qfcx4soyms3mgahw     ip-172-31-36-89  Ready Active

3. Überprüfe auf Host1 (weil er der Manager ist) die Standardnetzwerke:

 $ docker network ls
 NETWORK ID   NAME DRIVER SCOPE
 4c570046be bridge              bridge              local
 9c6cae5945 docker_gwbridge     bridge              local
 f5ceda7663 host                host                local
 tnl4tq4c6n ingress             overlay             swarm
 c57dee39cb none                null                local

4. Wenn du keine Datenverschlüsselung brauchst: Erstelle auf host1 (weil er der Manager ist) das Overlay-Netzwerk (zum Beispiel my_net). Das Attachable-Flag wird benötigt, damit sich Standalone-Container mit my_net verbinden können:

 $ docker network create -d overlay –-attachable my_net

5. Der gesamte Datenverkehr des Schwarmmanagements wird standardmäßig mit AES im GCM-Modus verschlüsselt. Um auch den Anwendungsdatenverkehr zu verschlüsseln, füge -opt encrypted an den obigen Befehl an. Dadurch werden IPSEC-Tunnel zwischen den Docker-Hosts aufgebaut. Die Verschlüsselung erfolgt ebenfalls mit AES-GCM und einer 12-stündigen Schlüsselrotation. Die Overlay-Verschlüsselung wird auf Windows-Hosts nicht unterstützt.

$ docker network create –-opt encrypted -d overlay –-attachable my_net

6. Nach all diesen Schritten hast du erfolgreich ein Overlay-Netzwerk namens my_net aufgebaut, das drei verschiedene Docker-Hosts umfasst.

Probiere es aus. Erstelle drei Testcontainer, um die Erreichbarkeit und die Namensauflösung innerhalb des Overlays zu überprüfen

Auf Host1:

$ docker run -it --name alpine1 --network my-net alpine
/ #

7. Auf Host2:

$ docker run -it --name alpine2 --network my-net alpine
/ #

8. Auf Host3:

$ docker run -it --name alpine3 --network my-net alpine
/ #

9. Überprüfe nun die Konnektivität. Du solltest Antworten auf all diese Befehle erhalten, die die Erreichbarkeit und Namensauflösung zeigen:

Auf Host1:

/ # ping alpine2
PING alpine2 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: seq=0 ttl=64 time=1.100 ms
/ # ping alpine3
PING alpine3 (10.0.0.6): 56 data bytes
64 bytes from 10.0.0.6: seq=0 ttl=64 time=1.100 ms

Auf Host2:

/ # ping alpine1
PING alpine2 (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=1.100 ms
/ # ping alpine3
PING alpine3 (10.0.0.6): 56 data bytes
64 bytes from 10.0.0.6: seq=0 ttl=64 time=1.100 ms

Auf Host3:

/ # ping alpine1
PING alpine2 (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=1.100 ms
/ # ping alpine2
PING alpine3 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: seq=0 ttl=64 time=1.100 ms

10. Du kannst jetzt aus den Containern aussteigen und sie entfernen.

Docker-Container ohne Netzwerk

Diese Netzwerk Option ist nützlich, wenn es einen Container gibt, der vollständig von allen anderen Netzwerken isoliert werden muss.

Verwende in diesem Fall --network none

Fazit

Das sind die Grundlagen für den Einsatz und die Nutzung von IPVLAN und Overlay-Docker-Netzwerken. Abgesehen von der Erstellungsprozedur verhalten sie sich aus Containersicht ähnlich wie Brückennetzwerke und bieten viele Funktionen und Flexibilität, die die Vernetzung in Docker-Multihost-Szenarien vereinfachen.

Bitte beachte, dass du bei der Erstellung eines neuen Overlay-Netzwerks Optionen angeben kannst. Schau in docker network create -help oder unter https://docs.docker.com/network/overlay/ nach für weitere Informationen. Diese Dokumentation wurde mithilfe der Docker Docs von diesem Link erstellt.

Quelle

Docker Kurs - Das große Docker & Linux Enterprise Bootcamp

Docker - https://docs.docker.com/engine/reference/run/#network-settings

Docker IPVLAN - https://docs.docker.com/network/ipvlan/

Docker Overlay - https://santandergto.com/en/using-docker-overlay-networks-configuration-guide/

Docker Swarm - https://docs.docker.com/engine/swarm/admin_guide/

DER NEWSLETTER FÜR IT-BEGEISTERTE

Trag dich ein für den Newsletter und bleib auf dem Laufenden über alle neuesten Aktionen und IT-News!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.