Netzwerkkonzepte für Windows-Container
Der Prozessor eines normalen Windows-Computers verfügt über einen Kernelmodus und einen Benutzermodus. Die zentralen Betriebssystemkomponenten und die meisten Gerätetreiber werden im Kernelmodus ausgeführt, während Anwendungen im Benutzermodus ausgeführt werden. Wenn Sie Container auf Ihrem Computer implementieren, erstellt jeder Container eine isolierte, schlichte Umgebung zum Ausführen von Apps auf dem Hostbetriebssystem. Der Container teilt den größten Teil des Hostbetriebssystem-Kernels für den Zugriff auf das Dateisystem und die Registrierung.
Windows-Container benötigen ein Containerbetriebssystem. Der Container verlässt sich auf den Kernel des Betriebssystems, um Dienste wie Dateisystem, Netzwerkverwaltung, Prozessplanung und Speicherverwaltung zu verwalten. Das Containerbetriebssystem ist das Betriebssystem, das Teil des gepackten Images ist. Sie können verschiedene Versionen von Windows mit Ihren Containern verwenden, um den Zugriff auf bestimmte Betriebssystemfeatures oder andere erforderliche Software zu ermöglichen.
Netzwerkisolation und Sicherheit
Windows-Container unterstützen zwei Arten von Laufzeitisolation: Prozess und Hyper-V. Der Hauptunterschied ist der Grad der Isolation, die zwischen dem Container, dem Hostbetriebssystem und den anderen Containern auf dem Host erstellt wurde.
Prozessisolation ist der am häufigsten verwendete Ansatz. Mehrere Containerinstanzen, die auf demselben Host ausgeführt werden, erzielen eine Isolation über die Namespace- und Ressourcensteuerungseinstellungen sowie andere Prozessisolationsfunktionen.
- Jeder Container teilt denselben Kernel mit dem Hostbetriebssystem und anderen Containern auf dem Host.
- Jeder Container verfügt über einen virtuellen Netzwerkadapter, der eine Verbindung mit einem virtuellen Switch herstellt.
- Jeder Containerendpunkt wird in einem eigenen Netzwerk-Namespace platziert. Der standardmäßige Netzwerk-Namespace ist der Speicherort des virtuellen Hostnetzwerkadapters und des Hostnetzwerkstapels.
Hyper-V-Isolation bietet eine verbesserte Sicherheit und eine breitere Kompatibilität zwischen dem Host und Containern. Mehrere Containerinstanzen werden auf demselben Host ausgeführt, aber jeder Container wird auf einem optimierten virtuellen Computer ausgeführt. Der virtuelle Computer bietet eine Hardwareebenenisolation zwischen jedem Container und dem Containerhost.
- Jeder Container verfügt im Wesentlichen über einen eigenen Kernel.
- Um die Netzwerkisolation zwischen den Containern auf dem Host zu erzwingen, wird für jeden Container ein Netzwerk-Namespace erstellt.
- Container werden unter Hyper-V-Isolation ausgeführt, in der der virtuelle Netzwerkadapter für den Container installiert ist. Windows Server-Container verwenden einen Host-virtuellen Netzwerkadapter, um an den virtuellen Switch anzufügen. Hyper-V-Isolation verwendet einen künstlichen VM-Netzwerkadapter (nicht verfügbar gemacht für die virtuelle Hilfsmaschine), um an den virtuellen Switch anzufügen.
Netzwerkverwaltung mit Host Network Service (HNS)
Windows verwendet den Host Networking Service (HNS) und Host Compute Service (HCS) zum Erstellen von Containern und Anfügen von Endpunkten an das Netzwerk.
- Netzwerk: HNS erstellt einen virtuellen Hyper-V-Switch für jedes Netzwerk, und HNS erstellt die erforderlichen NAT- und IP-Pools.
- Endpunkte: HNS erstellt den Netzwerk-Namespace für jeden Containerendpunkt, und HNS/HCS fügt dem Namespace den virtuellen Netzwerkadapter hinzu. HNS erstellt virtuelle Switchports. HNS weist dem Endpunkt gemäß dem konfigurierten Netzwerktreibermodus die IP-Adresse, DNS-Informationen (Domain Name System), Routen usw. zu.
- Richtlinien: Für das standardmäßige NAT-Netzwerk erstellt HNS die WinNAT-Portweiterleitungsregeln und Zuordnungen mit den entsprechenden Windows Firewall ALLOW-Regeln. Für alle anderen Netzwerke verwendet HNS die virtuelle Filterplattform (Virtual Filtering Platform, VFP), um Richtlinien für den Lastenausgleich, ACLs und Kapselung zu erstellen.
Firewallinteraktion
Je nach Containerkonfiguration und Netzwerktreibertyp werden Port-ACLs durch eine Kombination aus der Windows-Firewall und der virtuellen Azure-Filterplattform (VFP) erzwungen. Die folgenden Werte verwenden die Firewall der Windows-Hosts (optimiert mit Netzwerknamespaces) und VFP:
- Standardausgang: ALLOW ALL (ALLE ZULASSEN).
- Standardeingang: ERLAUBE SÄMTLICHEN (TCP, UDP, ICMP, IGMP) nicht angeforderter Netzwerkdatenverkehr. VERWEIGERE JEGLICHE anderen Netzwerkdatenverkehre, die nicht von diesen Protokollen stammen.
Netzwerktreiber
Windows unterstützt fünf verschiedene Netzwerktreiber oder Modi für Docker-Container: NAT, Transparent, Overlay, L2Bridge und L2Tunnel. Zusätzlich zum standardmäßigen NAT-Netzwerk, das von Docker unter Windows erstellt wurde, können Sie auch benutzerdefinierte Containernetzwerke mithilfe des Befehls docker network create
über die Docker CLI definieren.
In der folgenden Tabelle sind die Netzwerktreibertypen zusammengefasst, die für Docker-Container unter Windows verfügbar sind. Wählen Sie den Netzwerktreiber aus, der den Anforderungen Ihrer physischen Netzwerkinfrastruktur und der Hostkonfiguration (einzelner oder mehrerer Knoten) entspricht.
Netzwerktreiber | Typische Verwendung | Container-zu-Container (einzelner Knoten) | Container-zu-Extern (einzelner Knoten und mehrere Knoten) | Container-zu-Container (mehrere Knoten) |
---|---|---|---|---|
NAT (Standard) | Gut für Entwickler*innen | Gleiches Subnetz: Überbrückte Verbindung über den virtuellen Hyper-V-Switch Subnetzübergreifend: Nicht unterstützt (nur ein internes NAT-Präfix) |
Routing über den virtuellen Netzwerkadapter für die Verwaltung (an WinNAT gebunden) | Nicht direkt unterstützt: Erfordert das Verfügbarmachen von Ports über den Host |
Transparent | Gut für Entwickler*innen oder kleine Bereitstellungen | Gleiches Subnetz: Überbrückte Verbindung über den virtuellen Hyper-V-Switch Subnetzübergreifend: Weitergeleitet durch Containerhost. |
Weitergeleitet über den Containerhost mit direktem Zugriff auf den (physischen) Netzwerkadapter | Weitergeleitet über den Containerhost mit direktem Zugriff auf den (physischen) Netzwerkadapter |
Überlagerung | Gut für mehrere Knoten; erforderlich für Docker Swarm, verfügbar in Kubernetes | Gleiches Subnetz: Überbrückte Verbindung über den virtuellen Hyper-V-Switch Subnetzübergreifend: Der Netzwerkdatenverkehr wird gekapselt und über den virtuellen Netzwerkadapter der Verwaltung weitergeleitet. |
Nicht direkt unterstützt: Erfordert einen zweiten Containerendpunkt, der an das NAT-Netzwerk auf Windows Server 2016 oder an die VFP-NAT-Regel unter Windows Server 2019 angefügt ist | Gleiches Subnetz/Subnetzübergreifend: Der Netzwerkdatenverkehr wird mithilfe von VXLAN gekapselt und über den virtuellen Netzwerkadapter der Verwaltung weitergeleitet |
L2Bridge | Wird für Kubernetes und Microsoft Software Designed Network (SDN) verwendet | Gleiches Subnetz: Überbrückte Verbindung über den virtuellen Hyper-V-Switch Subnetzübergreifend: Container-MAC-Adresse, die beim Eingang, Ausgang und Routing umgeschrieben wurde. |
Container-MAC-Adresse | |
Neugeschrieben am Eingang und Ausgang | Gleiches Subnetz: Überbrückte Verbindung Subnetzübergreifendes Routing über den virtuellen Netzwerkadapter der Verwaltung auf WSv1809 und höher |
|||
L2Tunnel | Nur Azure | Gleiches Subnetz/Subnetzübergreifend: An den virtuellen Hyper-V-Switch des physischen Hosts angeheftet, auf den die Richtlinie angewendet wird. | Der Datenverkehr muss über das Gateway für virtuelle Azure-Netzwerke erfolgen. | Gleiches/übergreifendes Subnetz: An den virtuellen Hyper-V-Switch des physischen Hosts angeheftet, auf den die Richtlinie angewendet wird. |
Erweiterte Netzwerkoptionen
Sie können mehrere Netzwerktreiberoptionen für Windows-spezifische Funktionen und Features nutzen. Im Folgenden finden Sie einige Beispiele:
- Greifen Sie auf eingebettetes Teaming für Containerhostnetzwerke zu, indem Sie mehrere Netzwerkadapter für Ihren Windows-Container angeben.
- Legen Sie die VLAN-ID für ein Netzwerk fest, um die VLAN-Isolation für alle Containerendpunkte zu konfigurieren, die an das Netzwerk angefügt sind.
- Geben Sie die OutboundNAT-Richtlinie für ein Netzwerk an, damit Ihr Container auf die Außenwelt zugreifen kann.
Weitere Informationen finden Sie unter Erweiterte Netzwerkoptionen in Windows.