1. Einführung in Macvlan Vor dem Aufkommen von Macvlan konnten wir einer Ethernet-Karte nur mehrere IP-Adressen hinzufügen, nicht jedoch mehrere MAC-Adressen, da die MAC-Adresse eine Ethernet-Karte durch ihre globale Eindeutigkeit identifiziert. Selbst wenn Sie die Methode zum Erstellen von ethx:y verwenden, werden Sie feststellen, dass die MAC-Adressen aller dieser „Netzwerkkarten“ mit ethx identisch sind. Im Wesentlichen handelt es sich immer noch um eine Netzwerkkarte, was Ihre Fähigkeit zur Durchführung vieler Layer-2-Vorgänge einschränkt. Mit der Macvlan-Technologie ist dies möglich. Macvlan ermöglicht Ihnen die Konfiguration mehrerer virtueller Netzwerkschnittstellen auf einer Netzwerkschnittstelle des Hosts. Diese Netzwerkschnittstellen verfügen über eigene, unabhängige MAC-Adressen und können für die Kommunikation auch mit IP-Adressen konfiguriert werden. Die virtuellen Maschinen oder Containernetzwerke unter Macvlan befinden sich im selben Netzwerksegment wie der Host und teilen sich dieselbe Broadcast-Domäne. Macvlan ähnelt Bridge, ist aber einfacher zu konfigurieren und zu debuggen, da es Bridge nicht benötigt und seine Effizienz relativ hoch ist. Darüber hinaus unterstützt Macvlan selbst auch VLAN perfekt. Die Datenübertragung zwischen demselben VLAN erfolgt über den gegenseitigen Zugriff auf Schicht 2, d. h. über die MAC-Adresse, ohne dass ein Routing erforderlich ist. Standardmäßig können Benutzer in verschiedenen VLANs nicht direkt miteinander kommunizieren. Wenn sie kommunizieren möchten, benötigen sie ein Layer-3-Gerät für das Routing. Dasselbe gilt für Macvlan. Die mit der Macvlan-Technologie virtualisierte virtuelle Netzwerkkarte ist logisch gleichwertig mit der physischen Netzwerkkarte. Die physische Netzwerkkarte entspricht einem Switch, der die entsprechende virtuelle Netzwerkkarte und MAC-Adresse aufzeichnet. Wenn die physische Netzwerkkarte ein Datenpaket empfängt, bestimmt sie anhand der Ziel-MAC-Adresse, zu welcher virtuellen Netzwerkkarte das Paket gehört. Dies bedeutet, dass die physische Netzwerkkarte das Datenpaket nur empfängt, aber nicht verarbeitet, solange das Datenpaket von der Macvlan-Subschnittstelle gesendet wird (oder an die Macvlan-Subschnittstelle gesendet wird). Dies führt also zu einem Problem: Die IP auf der lokalen Macvlan-Netzwerkkarte kann nicht mit der IP auf der physischen Netzwerkkarte kommunizieren! Wir werden die Lösung dieses Problems im nächsten Abschnitt besprechen. Einfach ausgedrückt ist das virtuelle Netzwerkkartengerät Macvlan parasitär auf dem physischen Netzwerkkartengerät. Beim Senden eines Pakets ruft es seine eigene Paketsendefunktion auf, findet das parasitäre physische Gerät und sendet das Paket dann über das physische Gerät. Beim Empfangen von Paketen werden die Datenpakete durch Registrierung der rx_handler-Rückruffunktion des parasitären physischen Geräts verarbeitet. 2. Stellen Sie den manuellen Prozess kurz vor Wie der Name schon sagt, ist Macvlan eine Netzwerkkartenvirtualisierungstechnologie, die mehrere Schnittstellen einer physischen Netzwerkkarte virtualisieren kann. Jede Schnittstelle kann mit einer MAC-Adresse und einer eigenen IP-Adresse konfiguriert werden. Jede Schnittstelle ist wie ein Switch-Port und kann in VLANs unterteilt werden. Was macvlan tatsächlich macht, ist, diese virtuellen Schnittstellen direkt mit dem Docker-Container zu verbinden, um den Kommunikationszweck zu erreichen. Ein MacVLAN-Netzwerk entspricht einer Schnittstelle, und verschiedenen MacVLAN-Netzwerken werden unterschiedliche Subnetze zugewiesen. Daher können dieselben MacVLAN-Netzwerke miteinander kommunizieren, aber verschiedene MacVLAN-Netzwerke können nicht auf der zweiten Ebene kommunizieren und benötigen die Hilfe eines Routers der dritten Ebene, um die Kommunikation abzuschließen. Im Folgenden wird der Kommunikationsprozess zwischen zwei verschiedenen MacVLAN-Netzwerken gezeigt. Wir verwenden einen Linux-Host, konfigurieren seine Routing-Tabelle und iptables und machen ihn zu einem Router (natürlich virtuell), damit wir den Datenaustausch zwischen verschiedenen Macvlan-Netzwerken durchführen können. Natürlich spricht nichts dagegen, einen physischen Router zu verwenden. 3. Funktionen von Macvlan: 1. Ermöglichen Sie Benutzern, mehrere MAC-Adressen auf derselben physischen Netzwerkkarte festzulegen. 4. Experimentelle Umgebung
Firewall ausschalten und Selinux deaktivieren, Hostnamen ändern [root@localhost ~]# hostnamectl set-hostname docker01 [root@localhost ~]# su - Letzte Anmeldung: 17. Feb 08:20:36 CST 2019 von 192.168.1.1pts/0 [root@docker01 ~]# systemctl stop firealld Firealld.service konnte nicht gestoppt werden: Unit firealld.service wurde nicht geladen. [root@docker01 ~]# setenforce 0 setenforce: SELinux ist deaktiviert [root@docker01 ~]# systemctl daemon-reload [root@docker01 ~]# systemctl Neustart Docker 4.1 Einzelnetzwerkkommunikation von Macvlan 4.1 Einzelnetzwerkkommunikation von Macvlan 1) Aktivieren Sie den Promiscuous-Modus der Netzwerkkarte //Dieser Vorgang muss sowohl auf docker01 als auch auf docker02_ ausgeführt werden. [root@docker01 ~]# IP-Link zeigt ens33 //Überprüfen Sie den Netzwerkkartenmodus [root@docker01 ~]# IP-Link-Set ens33 Promisc ein //Erstellen Sie eine Netzwerkkarte im Promiscuous-Modus [root@docker01 ~]# ip link show ens33 //Überprüfen Sie den Netzwerkkartenmodus 2) Erstellen Sie ein Macvlan-Netzwerk auf Docker01. [root@docker01 ~]# Docker-Netzwerk erstellen -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1 // Ein Netzwerk im Macvlan-Modus erstellen -o parent=welche Netzwerkkarte ist an [root@docker01 ~] gebunden# docker network ls // Überprüfen Sie die Netzwerkkarteninformationen 3) Führen Sie einen Container basierend auf dem erstellten Macvlan-Netzwerk aus [root@docker01 ~]# docker run -itd --name bbox1 --ip 172.22.16.10 --network mac_net1 busybox 4) Erstellen Sie ein MacVLAN-Netzwerk auf Docker02. (Es sollte genau dasselbe sein wie das MacVLAN von Docker01.) [root@docker02 ~]# Docker-Netzwerk erstellen -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1 [root@docker02 ~]# Docker-Netzwerk ls 5) Führen Sie auf docker02 einen Container basierend auf dem erstellten Macvlan-Netzwerk aus und überprüfen Sie die Kommunikation mit dem Container auf docker01. [root@docker02 ~]# docker run -itd --name bbox2 --network mac_net1 --ip 172.22.16.20 busybox //Erstellen Sie einen Container basierend auf busybox[root@docker02 ~]# docker exec -it bbox2 /bin/sh //Geben Sie den bbox2-Container ein/ # ping 172.22.16.10 //Pingen Sie den Host von docker01 4.2MacVLAN-Multinetzwerkkommunikation 1) Docker01 und Docker02 überprüfen die Kapselung des Kernelmoduls 8021q Das Problem, das macvlan lösen muss: Erstellen Sie eine neue virtuelle Netzwerkkarte basierend auf der realen ens33-Netzwerkkarte. [root@docker01 ~]# modinfo 8021q //Überprüfen Sie die Kapselung des Kernelmoduls 8021q [root@docker01 ~]# modprobe 8021q //Wenn das Kernelmodul nicht aktiviert ist, führen Sie den obigen Befehl aus, um es zu importieren 2) docker01 erstellt eine virtuelle Netzwerkkarte basierend auf ens33 Ändern Sie die Konfigurationsdatei der ens33-Netzwerkkarte [root@docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@docker01 Netzwerkskripte]# vim ifcfg-ens33 Manuelles Hinzufügen einer Konfigurationsdatei für virtuelle Netzwerkkarten [root@docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@docker01 Netzwerkskripte]# cp -p ifcfg-ens33 ifcfg-ens33.10 //-p behält die Eigenschaften der Quelldatei oder des Quellverzeichnisses bei [root@docker01 network-scripts]# vim ifcfg-ens33.10 //Konfigurationsdatei der Netzwerkkarte ens33.10 ändern BOOTPROTO=none NAME=ens33.10 GERÄT=ens33.10 ONBOOT=ja IPADDR=192.168.10.10 Präfix = 24 GATEWAY=192.168.10.2 VLAN=ja Beachten Sie, dass die IP vom ens33-Netzwerksegment unterschieden werden muss, um die Konsistenz des Gateways und der Netzwerksegment-IP, die Konsistenz des Gerätenamens und der Konfigurationsdatei sicherzustellen und den VLAN-Unterstützungsmodus zu aktivieren. Erstellen Sie eine zweite virtuelle NIC-Konfigurationsdatei [root@docker01 Netzwerkskripte]# cp -p ifcfg-ens33.10 ifcfg-ens33.20 [root@docker01 Netzwerkskripte]# vim ifcfg-ens33.20 //Konfigurationsdatei der Netzwerkkarte ens33.20 ändern BOOTPROTO=none NAME=ens33.20 GERÄT=ens33.20 ONBOOT=ja IPADDR=192.168.20.20 Präfix = 24 GATEWAY=192.168.20.2 VLAN=ja Vorgang auf docker01, Aktivieren der erstellten virtuellen Netzwerkkarte: [root@docker01 Netzwerkskripte]# ifup ifcfg-ens33.10 [root@docker01 Netzwerkskripte]# ifup ifcfg-ens33.20 [root@docker01 Netzwerkskripte]# ifconfig //IP prüfen 3) docker02 erstellt eine virtuelle Netzwerkkarte basierend auf ens33 Ändern Sie die Konfigurationsdatei der ens33-Netzwerkkarte [root@docker02 ~]# cd /etc/sysconfig/network-scripts/ [root@docker02 Netzwerkskripte]# vim ifcfg-ens33 Manuelles Hinzufügen einer Konfigurationsdatei für virtuelle Netzwerkkarten [root@docker02 ~]# cd /etc/sysconfig/network-scripts/ [root@docker02 Netzwerkskripte]# cp -p ifcfg-ens33 ifcfg-ens33.10 //-p behält die Eigenschaften der Quelldatei oder des Quellverzeichnisses bei [root@docker02 network-scripts]# vim ifcfg-ens33.10 //Konfigurationsdatei der Netzwerkkarte ens33.10 ändern BOOTPROTO=none NAME=ens33.10 GERÄT=ens33.10 ONBOOT=ja IPADDR=192.168.10.11 Präfix = 24 GATEWAY=192.168.10.2 VLAN=ja Beachten Sie, dass die IP vom ens33-Netzwerksegment unterschieden werden muss, um die Konsistenz des Gateways und der Netzwerksegment-IP, die Konsistenz des Gerätenamens und der Konfigurationsdatei sicherzustellen und den VLAN-Unterstützungsmodus zu aktivieren. Erstellen Sie eine zweite virtuelle NIC-Konfigurationsdatei [root@docker02 Netzwerkskripte]# cp -p ifcfg-ens33.10 ifcfg-ens33.20 [root@docker02 Netzwerkskripte]# vim ifcfg-ens33.20 //Konfigurationsdatei der Netzwerkkarte ens33.20 ändern BOOTPROTO=none NAME=ens33.20 GERÄT=ens33.20 ONBOOT=ja IPADDR=192.168.20.21 Präfix = 24 GATEWAY=192.168.20.2 VLAN=ja Vorgang auf docker02, Aktivieren der erstellten virtuellen Netzwerkkarte: [root@docker02 Netzwerkskripte]# systemctl Netzwerk neu starten [root@docker02 Netzwerkskripte]# ifup ifcfg-ens33.10 [root@docker02 Netzwerkskripte]# ifup ifcfg-ens33.20 [root@docker02 Netzwerkskripte]# ifconfig //IP prüfen 4) docekr01 und docker02 erstellen ein Macvlan-Netzwerk basierend auf einer virtuellen Netzwerkkarte [root@docker02 Netzwerkskripte]# Docker-Netzwerk erstellen -d macvlan --subnet 172.16.10.0/24 --gateway 172.16.10.1 -o parent=ens33.10 mac_net10 //Erstellen Sie eine neue Netzwerkkarte basierend auf ens33.10 [root@docker02 Netzwerkskripte]# Docker-Netzwerk erstellen -d macvlan --subnet 172.16.20.0/24 --gateway 172.16.20.1 -o parent=ens33.20 mac_net20 //Erstellen Sie eine neue Netzwerkkarte basierend auf ens33.20 5) Docker01 stellt ein privates Lager bereit Docker-Pull-Registrierung //Laden Sie das Registrierungsimage herunter docker run -itd --name registry -p 5000:5000 --restart=always registry:latest // Basierend auf dem Registrierungsimage starten Sie einen Container-Docker-Tag busybox:latest 192.168.1.11:5000/busybox:v1 // Benennen Sie den Container in ein Label um: docker ps vim /usr/lib/systemd/system/docker.service #13 Zeilenänderung ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000 systemctl daemon-reload systemctl Neustart docker.service //Docker neu starten Docker-Push 192.168.1.11:5000/Busybox:v1 //Laden Sie den Container in das private Repository Docker Images hoch Docker02 vim /usr/lib/systemd/system/docker.service #13 Zeilenänderung ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000 systemctl daemon-reload systemctl Neustart docker.service //Docker neu starten Docker-Pull 192.168.1.11/Busybox:v1 //Laden Sie das gerade hochgeladene Bild herunter 6) Docker01 und Docker02 erstellen Container basierend auf dem Busybox:v1-Image und den Netzwerkkarten mac_net10 und mac_net20. [root@docker01 ~]# docker run -itd --name bbox10 --network mac_net10 --ip 172.16.10.10 192.168.1.11:5000/busybox:v1 [root@docker01 ~]# docker run -itd --name bbox20 --network mac_net20 --ip 172.16.20.20 192.168.1.11:5000/busybox:v1 **Docker02** [root@docker02 ~]# docker run -itd --name bbox10 --network mac_net10 --ip 172.16.10.10 192.168.1.11:5000/busybox:v1 [root@docker02 ~]# docker run -itd --name bbox20 --network mac_net20 --ip 172.16.20.20 192.168.1.11:5000/busybox:v1 ***Beachten Sie nur, dass unsere Operationen hier genau dieselben sind wie in docker01 und höher. Die Reihenfolge der Operationen ist ungefähr: Erstellen Sie neue virtuelle Netzwerkkarten basierend auf der Netzwerkkarte ens33, ens33.10 und ens33.20 (beachten Sie, dass ens33.10 und ens33.20 auf docker01 im selben Netzwerksegment sein müssen und die IP-Adressen nicht in Konflikt geraten dürfen) und führen Sie Container basierend auf diesem Netzwerk aus. (Beachten Sie, dass die Container auf Docker01 alle auf dem gerade erstellten Macvlan-Netzwerk basieren, die IP-Adressen jedoch nicht in Konflikt geraten dürfen.) 7) Überprüfung Testen Sie, ob der Host mit der gleichen Netzwerkkarte pingen kann [root@docker01 ~]# docker exec -it bbox10 /bin/sh /# ping 172.16.20.20 [root@docker02 ~]# docker exec -it bbox20 /bin/sh /# ping 172.16.20.20 5. Einschränkungen von Macvlan Macvlan ist eine nahezu ideale Lösung, um VMs oder Container über Layer 2 mit dem physischen Netzwerk zu verbinden, weist jedoch auch einige Einschränkungen auf: 1. Der Switch, an den der Linux-Host angeschlossen ist, begrenzt möglicherweise die Anzahl der MAC-Adressen auf demselben physischen Port. Sie könnten diese Richtlinien zwar von Ihrem Netzwerkadministrator ändern lassen, manchmal ist das jedoch einfach nicht machbar (beispielsweise, wenn Sie eine schnelle PoC-Demo für einen Kunden durchführen). 6. Zusammenfassung macvlan ist eine Netzwerkkarten-Virtualisierungstechnologie, die mehrere Netzwerkkarten von einer Netzwerkkarte aus virtualisieren kann. Ein spezifischer Kommunikationsmodus von Macvlan. Der häufig verwendete Modus ist Bridge. In Docker unterstützt macvlan nur den Bridge-Modus. Das gleiche MacVLAN kann kommunizieren, aber verschiedene MacVLANs können auf der zweiten Schicht nicht kommunizieren. Die Kommunikation kann über Layer-3-Routing erfolgen. Bedenken Sie Folgendes: Die Ähnlichkeiten und Unterschiede zwischen Macvlan Bridge und Bridge Es gibt auch eine ähnliche Technologie, bei der mehrere virtuelle Netzwerkkarten dieselbe MAC-Adresse teilen, aber unabhängige IP-Adressen haben. Was ist das für eine Technologie? 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. Das könnte Sie auch interessieren:
|
<<: Node+Socket realisiert einfache Chatroom-Funktion
>>: Grafisches Tutorial zur Installation und Konfiguration der MySQL 8.0.16 Win10-Zip-Version
Ich lerne derzeit etwas über Redis und Container ...
Inhaltsverzeichnis Was ist cgroup Zusammensetzung...
Funktion 0. Aktuelle Uhrzeit anzeigen Befehl: sel...
Beim Speichern von Daten in MySQL werden manchmal...
Heute habe ich eine Menüschaltfläche erstellt. Wen...
Inhaltsverzeichnis Definieren der HTML-Struktur E...
Wenn href zum Übergeben von Parametern benötigt w...
Vorwort Kürzlich bin ich beim Upgrade von MySQL 5...
SELECT * FROM Tabellenname Limit m,n; SELECT * FR...
Personen, die MySQL häufig verwenden, können mit ...
Was bedeutet Linux-CD? Unter Linux bedeutet cd „V...
Da wir eine Website erstellen wollten, enthielt d...
Wir, insbesondere Linux-Ingenieure, haben täglich...
Dieser Artikel entstand aus der Hausaufgabe „Erle...
Das dürfte etwas sein, was viele Leute gemacht ha...