次の方法で共有


コンテナーのエンドポイントをテナントの仮想ネットワークに接続する

Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI の 21H2 と 20H2 バージョンに適用します

このトピックでは、SDN を使用して作成された既存のテナント仮想ネットワークにコンテナー エンドポイントを接続する方法について説明します。 Docker 用の Windows libnetwork プラグインで利用できる l2bridge (およびオプションで l2tunnel) ネットワーク ドライバーを使用して、テナント VM にコンテナー ネットワークを作成します。

コンテナー ネットワーク ドライバーに関するトピックでは、Windows の Docker を通じて複数のネットワーク ドライバーを使用できることについて説明しました。 SDN の場合は、l2bridge ドライバーと l2tunnel ドライバーを使用します。 どちらのドライバーでも、各コンテナー エンドポイントは、コンテナー ホスト (テナント) 仮想マシンと同じ仮想サブネット内にあります。

ホスト ネットワーク サービス (HNS) は、プライベート クラウド プラグインを介して、コンテナー エンドポイントの IP アドレスを動的に割り当てます。 コンテナー エンドポイントには一意の IP アドレスがありますが、レイヤー 2 のアドレス変換によって、コンテナー ホスト (テナント) 仮想マシンと同じ MAC アドレスを共有します。

これらのコンテナー エンドポイントのネットワーク ポリシー (ACL、カプセル化、QoS) は、ネットワーク コントローラーによって受信され、上位層の管理システムで定義されている物理 Hyper-V ホストに適用されます。

l2bridge ドライバーと l2tunnel ドライバーの違いは次のとおりです。

l2bridge l2tunnel
次に存在するコンテナー エンドポイント:
  • 同じコンテナー ホスト仮想マシンと同じサブネット上のすべてのネットワーク トラフィックが、Hyper-V 仮想スイッチ内でブリッジされます。
  • 異なるコンテナー ホスト VM または異なるサブネット上のトラフィックは、物理的な Hyper-V ホストに転送されます。
同じホスト上のコンテナーと同じサブネット内のコンテナー間のネットワーク トラフィックが物理ホストにフローしないため、ネットワーク ポリシーは適用されません。 ネットワーク ポリシーは、クロスホスト コンテナーまたはクロスサブネット コンテナーのネットワーク トラフィックにのみ適用されます。
2 つのコンテナー エンドポイント間の "すべて" のネットワーク トラフィックは、ホストまたはサブネットに関係なく、物理的な 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 ホスト) を介して、既存の VM NIC リソースに複数の IP 構成を追加します。2. ホスト上のネットワーク プロキシで、コンテナー エンドポイント (Hyper-V ホスト) の CA IP アドレスを割り当てることができるようにします。3. プライベート クラウド プラグインをインストールして、CA IP アドレスをコンテナー エンドポイント (コンテナーホスト VM) に割り当てます。4. Docker を使用して l2bridge または l2tunnel ネットワークを作成します (コンテナー ホスト VM)

注意

System Center Virtual Machine Manager によって作成された VM NIC リソースでは、複数の IP 構成はサポートされていません。 これらの展開の種類では、ネットワーク コントローラー PowerShell を使用して、帯域外で VM NIC リソースを作成することをお勧めします。

1. 複数の IP 構成を追加する

この手順では、テナント仮想マシンの VM NIC に IP アドレス192.168.1.9 の IP 構成が 1 つあり、IP サブネット 192.168.1.0/24 で、VNet リソース ID 'VNet1' と VM サブネット リソース 'Subnet1' に接続されていることを前提としています。 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. ネットワーク プロキシを有効にする

この手順では、ネットワーク プロキシでコンテナー ホスト仮想マシン用に複数の IP アドレスを割り当てることができるようにします。

ネットワーク プロキシを有効にするには、コンテナー ホスト (テナント) 仮想マシンをホストする Hyper-V ホストConfigureMCNP.ps1 スクリプトを実行します。

PS C:\> ConfigureMCNP.ps1

3. プライベート クラウド プラグインをインストールする

この手順では、HNS が Hyper-V ホスト上のネットワーク プロキシと通信できるように、プラグインをインストールします。

プラグインをインストールするには、コンテナーホスト (テナント) 仮想マシン内で 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 スタックで使用される場合、l2bridge または l2tunnel コンテナー ネットワークでは、静的 IP の割り当てはサポートされていません。

詳細情報

SDN インフラストラクチャの展開の詳細については、「ソフトウェア定義ネットワーク インフラストラクチャを展開する」を参照してください。