Verbinden von Containerendpunkten mit einem virtuellen Mandantennetzwerk
In diesem Thema erfahren Sie, wie Sie Containerendpunkte mit einem vorhandenen virtuellen Mandantennetzwerk verbinden, das über SDN erstellt wurde. Sie verwenden den Netzwerktreiber l2bridge (und optional l2tunnel), der mit dem Windows-Plug-In „libnetwork“ für Docker verfügbar ist, um ein Containernetzwerk auf der Mandanten-VM zu erstellen.
Im Thema Containernetzwerktreiber wurden mehrere Netzwerktreiber beschrieben, die über Docker unter Windows verfügbar sind. Verwenden Sie für SDN die Treiber l2bridge und l2tunnel. Bei beiden Treibern befinden sich die Containerendpunkte im selben virtuellen Subnetz wie die Containerhost-VM (Mandanten-VM).
Der Hostnetzwerkdienst (Host Networking Service, HNS) weist über das Plug-In für die private Cloud die IP-Adressen für Containerendpunkte dynamisch zu. Die Containerendpunkte verfügen über eindeutige IP-Adressen, verwenden jedoch aufgrund der Layer-2-Adressübersetzung dieselbe MAC-Adresse der Containerhost-VM (Mandanten-VM).
Netzwerkrichtlinien (ACLs, Kapselung und QoS) für diese Containerendpunkte, die vom Netzwerkcontroller empfangen und in Verwaltungssystemen der oberen Ebene definiert werden, werden auf dem physischen Hyper-V-Host erzwungen.
Die Treiber l2bridge und l2tunnel weisen folgende Unterschiede auf:
l2bridge | l2tunnel |
---|---|
Befinden sich die Containerendpunkte auf
|
Der gesamte Netzwerkdatenverkehr zwischen zwei Containerendpunkten wird unabhängig vom Host oder Subnetz an den physischen Hyper-V-Host weitergeleitet. Die Netzwerkrichtlinien gelten sowohl für den subnetz- als auch für den hostübergreifenden Netzwerkdatenverkehr. |
Hinweis
Diese Netzwerkmodi können nicht für das Herstellen einer Verbindung von Windows-Containerendpunkten mit einem virtuellen Mandantennetzwerk in der öffentlichen Azure-Cloud verwendet werden.
Voraussetzungen
Bereitgestellte SDN-Infrastruktur mit Netzwerkcontroller
Bereits erstelltes virtuelles Mandantennetzwerk
Bereitgestellte Mandanten-VM mit aktiviertem Windows-Containerfeature, installiertem Docker und aktiviertem Hyper-V-Feature. Das Hyper-V-Feature ist erforderlich, um mehrere Binärdateien für die l2bridge- und l2tunnel-Netzwerke zu installieren.
# To install HyperV feature without checks for nested virtualization dism /Online /Enable-Feature /FeatureName:Microsoft-Hyper-V /All
Hinweis
Die geschachtelte Virtualisierung und das Verfügbarmachen von Virtualisierungserweiterungen sind nur erforderlich, wenn Hyper-V-Container verwendet werden.
Workflow
1. Hinzufügen mehrerer IP-Konfigurationen zu einer vorhandenen VM-NIC-Ressource mithilfe des Netzwerkcontrollers (Hyper-V-Host)2. Aktivieren des Netzwerkproxys auf dem Host, um IP-Adressen der Zertifizierungsstelle für Containerendpunkte (Hyper-V-Host) zuzuweisen3. Installieren des Plug-Ins für die private Cloud, um Containerendpunkten (Containerhost-VM) IP-Adressen der Zertifizierungsstelle zuzuweisen4. Erstellen eines l2bridge- oder l2tunnel-Netzwerks mithilfe von Docker (Containerhost-VM)
Hinweis
Mehrere IP-Konfigurationen werden für VM-NIC-Ressourcen, die mithilfe von System Center Virtual Machine Manager erstellt wurden, nicht unterstützt. Für diese Bereitstellungstypen wird empfohlen, die VM-NIC-Ressource mithilfe des Netzwerkcontrollers außer der Reihe in PowerShell zu erstellen.
1. Hinzufügen mehrerer IP-Konfigurationen
In diesem Schritt wird davon ausgegangen, dass die VM-NIC der Mandanten-VM über eine IP-Konfiguration mit der IP-Adresse 192.168.1.9 verfügt und an die VNet-Ressourcen-ID „VNet1“ und die VM-Subnetzressource „Subnet1“ im IP-Subnetz 192.168.1.0/24 angefügt ist. Sie fügen zehn IP-Adressen für Container von 192.168.1.101 bis 192.168.1.110 hinzu.
Import-Module NetworkController
# Specify Network Controller REST IP or FQDN
$uri = "<NC REST IP or FQDN>"
$vnetResourceId = "VNet1"
$vsubnetResourceId = "Subnet1"
$vmnic= Get-NetworkControllerNetworkInterface -ConnectionUri $uri | where {$_.properties.IpConfigurations.Properties.PrivateIPAddress -eq "192.168.1.9" }
$vmsubnet = Get-NetworkControllerVirtualSubnet -VirtualNetworkId $vnetResourceId -ResourceId $vsubnetResourceId -ConnectionUri $uri
# For this demo, we will assume an ACL has already been defined; any ACL can be applied here
$allowallacl = Get-NetworkControllerAccessControlList -ConnectionUri $uri -ResourceId "AllowAll"
foreach ($i in 1..10)
{
$newipconfig = new-object Microsoft.Windows.NetworkController.NetworkInterfaceIpConfiguration
$props = new-object Microsoft.Windows.NetworkController.NetworkInterfaceIpConfigurationProperties
$resourceid = "IP_192_168_1_1"
if ($i -eq 10)
{
$resourceid += "10"
$ipstr = "192.168.1.110"
}
else
{
$resourceid += "0$i"
$ipstr = "192.168.1.10$i"
}
$newipconfig.ResourceId = $resourceid
$props.PrivateIPAddress = $ipstr
$props.PrivateIPAllocationMethod = "Static"
$props.Subnet = new-object Microsoft.Windows.NetworkController.Subnet
$props.Subnet.ResourceRef = $vmsubnet.ResourceRef
$props.AccessControlList = new-object Microsoft.Windows.NetworkController.AccessControlList
$props.AccessControlList.ResourceRef = $allowallacl.ResourceRef
$newipconfig.Properties = $props
$vmnic.Properties.IpConfigurations += $newipconfig
}
New-NetworkControllerNetworkInterface -ResourceId $vmnic.ResourceId -Properties $vmnic.Properties -ConnectionUri $uri
2. Aktivieren des Netzwerkproxys
In diesem Schritt aktivieren Sie den Netzwerkproxy, um der Containerhost-VM mehrere IP-Adressen zuzuweisen.
Führen Sie das Skript ConfigureMCNP.ps1 auf dem Hyper-V-Host aus, auf dem die Containerhost-VM (Mandanten-VM) gehostet wird, um den Netzwerkproxy zu aktivieren.
PS C:\> ConfigureMCNP.ps1
3. Installieren des Plug-Ins für die private Cloud
In diesem Schritt installieren Sie ein Plug-In, damit der Hostnetzwerkdienst mit dem Netzwerkproxy auf dem Hyper-V-Host kommunizieren kann.
Führen Sie zum Installieren des Plug-Ins das Skript InstallPrivateCloudPlugin.ps1 auf der Containerhost-VM (Mandanten-VM) aus.
PS C:\> InstallPrivateCloudPlugin.ps1
4. Erstellen eines l2bridge-Containernetzwerks
In diesem Schritt erstellen Sie mithilfe des Befehls docker network create
auf der Containerhost-VM (Mandanten-VM) ein l2bridge-Netzwerk.
# Create the container network
C:\> docker network create -d l2bridge --subnet="192.168.1.0/24" --gateway="192.168.1.1" MyContainerOverlayNetwork
# Attach a container to the MyContainerOverlayNetwork
C:\> docker run -it --network=MyContainerOverlayNetwork <image> <cmd>
Hinweis
Die Zuweisung statischer IP-Adressen wird bei Verwendung mit dem SDN-Stapel von Microsoft nicht für l2bridge- oder l2tunnel-Containernetzwerke unterstützt.
Weitere Informationen
Weitere Informationen zum Bereitstellen einer SDN-Infrastruktur finden Sie unter Bereitstellen einer softwaredefinierten Netzwerkinfrastruktur.