다음을 통해 공유


테넌트 가상 네트워크에 컨테이너 엔드포인트 연결

이 토픽에서는 SDN을 통해 만든 기존 테넌트 가상 네트워크에 컨테이너 엔드포인트를 연결하는 방법을 보여 줍니다. Docker용 Windows libnetwork 플러그인과 함께 사용할 수 있는 l2bridge(및 필요에 따라 l2tunnel) 네트워크 드라이버를 사용하여 테넌트 VM에 컨테이너 네트워크를 만듭니다.

컨테이너 네트워크 드라이버 토픽에서는 Windows의 Docker를 통해 사용할 수 있는 여러 네트워크 드라이버에 대해 설명했습니다. SDN의 경우 l2bridgel2tunnel 드라이버를 사용합니다. 두 드라이버 각 컨테이너 엔드포인트는 컨테이너 (테넌트) 호스트 가상 머신과 동일한 가상 서브넷에 있습니다.

HNS(호스트 네트워킹 서비스)는 프라이빗 클라우드 플러그인을 통해 컨테이너 엔드포인트의 IP 주소를 동적으로 할당합니다. 컨테이너 엔드포인트를 고유 IP 주소가 있지만, 계층 2 주소 변환으로 인해 컨테이너 (테넌트) 호스트 가상 머신의 같은 MAC 주소를 공유합니다.

이러한 컨테이너 엔드포인트에 대한 네트워크 정책(ACL, 캡슐화 및 QoS)은 네트워크 컨트롤러에서 수신하고 상위 계층 관리 시스템에 정의된 물리적 Hyper-V 호스트에 적용됩니다.

l2bridgel2tunne 드라이버의 차이점은 다음과 같습니다.

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. 네트워크 컨트롤러를 통해 기존 VM NIC 리소스에 여러 IP 구성 추가(Hyper-V 호스트)2. 호스트에서 네트워크 프록시를 사용하도록 설정하여 컨테이너 엔드포인트에 대한 CA IP 주소 할당(Hyper-V 호스트)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 구성이 있고 192.168.1.0/24 IP 서브넷에 있는 'VNet1'의 VNet 리소스 ID 및 '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. 네트워크 프록시를 사용하도록 설정

이 단계에서는 네트워크 프록시가 컨테이너 호스트 가상 머신에 대해 여러 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>

참고 항목

고정 IP 할당은 지원 되지 않습니다 l2bridge 또는 l2tunnel 컨테이너 네트워크 Microsoft SDN 스택을 사용 하는 경우.

자세한 정보

SDN 인프라 배포에 대한 자세한 내용은 소프트웨어 정의 네트워크 인프라 배포를 참조하세요.