將容器端點連線至租用戶虛擬網路

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI 21H2 和 20H2 版本

在本主題中,我們會示範如何將容器端點連線到透過 SDN 建立的現有租用戶虛擬網路。 您可使用適用於 Docker 的 Windows libnetwork 外掛程式提供的 l2bridge (及選擇性 l2tunnel) 網路驅動程式,在租用戶 VM 上建立容器網路。

容器網路驅動程式主題中,我們已討論多個網路驅動程式可透過 Windows 上的 Docker 取得。 針對 SDN,使用 l2bridgel2tunnel 驅動程式。 對於這兩個驅動程式,每個容器端點都位於與容器主機 (租用戶) 虛擬機器相同的虛擬子網路中。

主機網路服務 (HNS) 可透過私人雲端外掛程式動態指派容器端點的 IP 位址。 容器端點具有唯一的 IP 位址,但由於第 2 層位址轉譯,因而共用容器主機 (租用戶) 虛擬機器的相同 MAC 位址。

這些容器端點的網路原則 (ACL、封裝和 QoS) 會由網路控制站接收並定義於上層管理系統,而且在實體 Hyper-V 主機中強制執行。

l2bridgel2tunnel 驅動程式之間的差異如下:

l2bridge l2tunnel
容器端點位於:
  • 相同容器主機虛擬機器和相同的子網路上,其所有網路流量都會在 Hyper-V 虛擬交換器內進行橋接。
  • 不同的容器主機 VM 或不同子網路上,其流量會轉送至實體 Hyper-V 主機。
網路原則不會強制執行,因為相同主機上與相同子網路中的容器之間的網路流量不會流向實體主機。 網路原則僅適用於跨主機或跨子網路的容器網路流量。
不論主機或子網路為何,兩個容器端點之間的「所有」網路流量都會轉送至實體 Hyper-V 主機。 網路原則同時適用於跨子網路和跨主機的網路流量。

注意

這些網路模式不適用於將 Windows 容器端點連線至 Azure 公用雲端中的租用戶虛擬網路。

必要條件

  • 具有網路控制站的已部署 SDN 基礎結構。

  • 已建立租用戶虛擬網路。

  • 已啟用 Windows 容器功能、已安裝 Docker 以及已啟用 Hyper-V 功能的已部署租用戶虛擬機器。 需有 Hyper-V 功能,才能為 l2bridge 和 l2tunnel 網路安裝數個二進位檔。

    # To install HyperV feature without checks for nested virtualization
    dism /Online /Enable-Feature /FeatureName:Microsoft-Hyper-V /All
    

注意

除非使用 Hyper-V 容器,否則不需要巢狀虛擬化和公開虛擬化延伸模組。

工作流程

1.透過網路控制站 (Hyper-V 主機) 將多個 IP 組態新增至現有的 VM NIC 資源2.在主機上啟用網路 Proxy,為容器端點 (Hyper-V 主機) 配置 CA IP 位址3.安裝私人雲端外掛程式,將 CA IP 位址指派給容器端點 (容器主機 VM)4.使用 docker (容器主機 VM) 建立 l2bridgel2tunnel 網路

注意

透過 System Center Virtual Machine Manager 建立的 VM NIC 資源不支援多個 IP 組態。 對於這些部署類型,建議您使用網路控制站 PowerShell 建立頻外 VM NIC 資源。

1.新增多重 IP 組態

在此步驟中,我們假設租用戶虛擬機器的 VM NIC 有一個 IP 組態,其 IP 位址為 192.168.1.9 且已連結至 192.168.1.0/24 IP 子網路中 'VNet1' 的 VNet 資源識別碼和 'Subnet1' 的 VM 子網路資源。 我們為容器新增從 192.168.1.101 至 192.168.1.110 的 10 個 IP 位址。

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.啟用網路 Proxy

在此步驟中,您會讓網路 Proxy 為容器主機虛擬機器配置多個 IP 位址。

若要啟用網路 Proxy,請在裝載容器主機 (租用戶) 虛擬機器的 Hyper-V 主機上執行 ConfigureMCNP.ps1 指令碼。

PS C:\> ConfigureMCNP.ps1

3.安裝私人雲端外掛程式

在此步驟中,您會安裝外掛程式,以允許 HNS 與 Hyper-V 主機上的網路 Proxy 通訊。

若要安裝外掛程式,請在 容器主機 (租用戶) 虛擬機器內執行 InstallPrivateCloudPlugin.ps1 指令碼。

PS C:\> InstallPrivateCloudPlugin.ps1

4.建立 l2bridge 容器網路

在此步驟中,您會在 容器主機 (租用戶) 虛擬機器上使用 docker network create 命令,以建立 l2bridge 網路。

# 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>

注意

搭配 Microsoft SDN 堆疊使用時,l2bridgel2tunnel 容器網路不支援靜態 IP 指派。

其他相關資訊

如需部署 SDN 基礎結構的詳細資訊,請參閱部署軟體定義網路基礎結構