Grundlegendes Konzept:
Wenn der Container direkt mit dem physischen Netzwerk verbunden werden muss, kann Macvlan verwendet werden. Macvlan selbst erstellt kein Netzwerk. Im Wesentlichen lässt es die physische Netzwerkkarte des Hosts zunächst im „Promiscuous-Modus“ arbeiten, sodass die MAC-Adresse der physischen Netzwerkkarte ungültig wird und die physische Netzwerkkarte den gesamten Datenverkehr im Layer-2-Netzwerk empfangen kann. Der nächste Schritt besteht darin, auf dieser physischen Netzwerkkarte eine virtuelle Netzwerkkarte zu erstellen und der virtuellen Netzwerkkarte eine MAC-Adresse zuzuweisen, um eine Mehrfachverwendung einer Karte zu erreichen. Aus Sicht des physischen Netzwerks ist jede virtuelle Netzwerkkarte eine separate Schnittstelle. Bei der Nutzung von Macvlan müssen Sie folgende Punkte beachten:
Projektumfeld:
Projektabwicklung: Beispiel 1: MacVLAN Cross-Host-Einzelnetzwerklösung: docker01: (1) Aktivieren Sie den Promiscuous-Modus der ens33-Netzwerkkarte und aktivieren Sie mehrere virtuelle Schnittstellen der Netzwerkkarte. [root@sqm-docker01 ~]# IP-Link-Set ens33 Promisc ein ##Überprüfen Sie den Status der Netzwerkkarte: [root@sqm-docker01 ~]# IP-Link zeigt ens33 (2) Erstellen Sie ein Macvlan-Netzwerk: [root@sqm-docker01 ~]# Docker-Netzwerk erstellen -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=ens33 mac_net1
(3) Führen Sie einen Container basierend auf dem soeben erstellten Netzwerk aus: [root@sqm-docker01 ~]# docker run -itd --name box1 --ip 172.16.100.10 --network mac_net1 busybox docker02: (gleiche Operation wie docker01) Promiscuous-Modus aktivieren [root@sqm-docker02 ~]# ip link set ens33 promisc on [root@sqm-docker02 ~]# IP-Link zeigt ens33 //Erstellen Sie ein Macvlan-Netzwerk [root@sqm-docker02 ~]# docker network create -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=ens33 mac_net1 //Einen Container ausführen: [root@sqm-docker02 ~]# docker run -itd --name box2 --network mac_net1 --ip 172.16.100.20 busybox (4) Testen Sie, ob zwei Container auf zwei Hosts miteinander kommunizieren: Notiz: Der Grund für den erfolgreichen Ping liegt darin, dass beide Container auf echten ens33-Netzwerkkarten basieren und die ens33-Netzwerkkarten auf dem Host daher miteinander kommunizieren können müssen. Mit dieser Methode kann nur ein Ping an die IP-Adresse gesendet werden, nicht jedoch an den Containernamen. Beispiel 2: Macvlan Cross-Host-Multi-Netzwerk-Lösung: (1) Überprüfen Sie zunächst das 8021q-Modul des Host-Kernels: [root@sqm-docker01 ~]# modinfo 8021q ##Wenn Sie das Modul nicht sehen, müssen Sie den folgenden Befehl ausführen, um es zu laden: [root@sqm-docker01 ~]# modprobe 8021q Routing-Weiterleitung aktivieren: [root@sqm-docker01 ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf [root@sqm-docker01 ~]# sysctl -p net.ipv4.ip_forward = 1 (2) Netzwerkkonfigurationsinformationen ändern: docker01: [root@sqm-docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@sqm-docker01 Netzwerkskripte]# ls [root@sqm-docker01 Netzwerkskripte]# vim ifcfg-ens33 Erstellen Sie eine Subnetzkarte basierend auf der ens33-Netzwerkkarte: [root@sqm-docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10 #Netzwerkkartennamen anpassen [root@sqm-docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.20 -p: bedeutet Beibehaltung der ursprünglichen Attribute (Berechtigungen) //Ens33.10 Netzwerkkarte ändern: [root@sqm-docker01 Netzwerkskripte]# vim ifcfg-ens33.10 ##Behalten Sie nur die folgenden Optionen: //Ens33.20-Netzwerkkarte ändern: [root@sqm-docker01 Netzwerkskripte]# vim ifcfg-ens33.20 Die Konfiguration ist die gleiche wie bei ens33.10, lediglich die IP-Adresse muss angepasst werden: (3) Starten Sie die Subnetzkarte: [root@sqm-docker01 Netzwerkskripte]# ifup ifcfg-ens33.10 [root@sqm-docker01 Netzwerkskripte]# ifup ifcfg-ens33.20 //Netzwerkinformationen anzeigen [root@sqm-docker01 network-scripts]# ifconfig (4) Erstellen Sie ein Macvlan-Netzwerk basierend auf ens33.10 und ens33.20: Hinweis: Verschiedene Netzwerksegmente haben unterschiedliche Netzwerknamen [root@sqm-docker01 ~]# Docker-Netzwerk erstellen -d macvlan --subnet 172.16.200.0/24 --gateway 172.16.200.1 -o parent=ens33.10 mac_net10 [root@sqm-docker01 ~]# Docker-Netzwerk erstellen -d macvlan --subnet 172.16.210.0/24 --gateway 172.16.210.1 -o parent=ens33.20 mac_net20 (5) Führen Sie zwei Container basierend auf dem obigen Netzwerk aus: [root@sqm-docker01 ~]# docker run -itd --name test1 --ip 172.16.200.10 --network mac_net10 busybox [root@sqm-docker01 ~]# docker run -itd --name test2 --ip 172.16.210.10 --network mac_net20 busybox Stellen Sie docker02 bereit: Der Vorgang ist grundsätzlich derselbe wie bei docker01. Beachten Sie, dass das Netzwerksegment dasselbe ist, die Host-IP jedoch unterschiedlich ist. #Die folgenden Vorgänge werden nicht erklärt: Routing-Weiterleitung aktivieren: [root@sqm-docker01 ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf [root@sqm-docker01 ~]# sysctl -p net.ipv4.ip_forward = 1 [root@sqm-docker02 Netzwerkskripte]# pwd /etc/sysconfig/Netzwerkskripte [root@sqm-docker02 Netzwerkskripte]# vim ifcfg-ens33 [root@sqm-docker02 Netzwerkskripte]# cp -p ifcfg-ens33 ifcfg-ens33.10 [root@sqm-docker02 Netzwerkskripte]# cp -p ifcfg-ens33 ifcfg-ens33.20 [root@sqm-docker02 Netzwerkskripte]# vim ifcfg-ens33.10 [root@sqm-docker02 Netzwerkskripte]# vim ifcfg-ens33.20 Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. (6) Testen Sie, ob Container über Hosts hinweg kommunizieren können: (Hinweis: Wenn Sie VMware verwenden, müssen Sie den Standard-NAT-Modus der beiden Hosts in den Bridge-Modus ändern, um eine normale Kommunikation aufgrund der virtuellen VMware-Maschinen zu ermöglichen.) Test4 kommuniziert mit Test2 (gleiches Netzwerksegment):
----------------------Bereitstellung der Multi-Network-Cross-Host-Kommunikation von Macvlan abgeschlossen--------------------- Erweiterte Wissenspunkte:
Das Obige ist der grundlegende Inhalt der Bereitstellung des Netzwerkstapels. Ich verwende ihn nicht oft. Er dient nur dazu, anderen Containern die gemeinsame Nutzung der Ressourcen in einem Container zu ermöglichen. Das könnte Sie auch interessieren:
|
>>: React führt antd-mobile+postcss ein, um ein mobiles Terminal zu erstellen
Die folgenden drei Methoden werden häufig verwende...
Wissenspunkte in der Vorschau anzeigen. Animation...
Werfen wir einen Blick auf die Zabbix-Überwachung...
01. Befehlsübersicht md5sum - MD5-Prüfcode berech...
Überblick Volume ist die Abstraktion und Virtuali...
Inhaltsverzeichnis 1. Mehrere .catch 2. Mehrere ....
Inhaltsverzeichnis Vorwort Was ist Deno? Vergleic...
IP-Masquerading und Port-Weiterleitung Firewalld ...
Code kopieren Der Code lautet wie folgt: 1. Sina ...
Als ich kürzlich an einem Frontend-Docking-Funkti...
Inhaltsverzeichnis 1. Panorama II. Hintergrund 1....
In diesem Artikel wird der Datenanzeigecode für d...
Vorwort Hallo zusammen, hier ist der CSS-Assisten...
Der datetime-Typ wird normalerweise zum Speichern...
Die folgenden Attribute sind nicht sehr browserkom...