Compartilhar via


Conectar pontos de extremidade do contêiner a uma rede virtual do locatário

Aplica-se a: Windows Server 2022, Windows Server 2019, Windows Server 2016, Azure Stack HCI, versões 21H2 e 20H2

Neste tópico, mostramos como conectar pontos de extremidade de contêiner a uma rede virtual de locatário existente criada por meio do SDN. Use o driver de rede l2bridge (e, opcionalmente, l2tunnel) disponível com o plug-in libnetwork do Windows para o Docker para criar uma rede de contêineres na VM do locatário.

No tópico Drivers de rede de contêiner, discutimos que os vários drivers de rede estão disponíveis por meio do Docker no Windows. Para SDN, use os drivers l2bridge e l2tunnel. Para ambos os drivers, cada ponto de extremidade de contêiner está na mesma sub-rede virtual que a máquina virtual do host do contêiner (locatário).

O HNS (Serviço de Rede de Host), por meio do plug-in de nuvem privada, atribui dinamicamente os endereços IP para pontos de extremidade de contêiner. Os pontos de extremidade de contêiner têm endereços IP exclusivos, mas compartilham o mesmo endereço MAC da máquina virtual do host do contêiner (locatário) devido à conversão de endereços da Camada 2.

A política de rede (ACLs, encapsulamento e QoS) para esses pontos de extremidade de contêiner é imposta no host físico do Hyper-V, conforme recebida pelo Controlador de Rede e definida em sistemas de gerenciamento de camada superior.

As diferenças entre os drivers l2bridge e l2tunnel são:

l2bridge l2tunnel
Pontos de extremidade de contêiner que residem:
  • Na mesma máquina virtual de host de contêiner e na mesma sub-rede têm todo o tráfego de rede em ponte dentro do comutador virtual do Hyper-V.
  • Em diferentes VMs de host de contêiner ou em sub-redes diferentes têm seu tráfego encaminhado para o host físico do Hyper-V.
A política de rede não é imposta, pois o tráfego de rede entre contêineres no mesmo host e na mesma sub-rede não flui para o host físico. A política de rede se aplica somente ao tráfego de rede de contêiner entre hosts ou sub-redes.
TODO o tráfego de rede entre dois pontos de extremidade de contêiner é encaminhado para o host físico do Hyper-V, independentemente do host ou da sub-rede. A política de rede se aplica ao tráfego de rede entre sub-redes e entre hosts.

Observação

Esses modos de rede não funcionam para conectar pontos de extremidade de contêiner do Windows a uma rede virtual de locatário na nuvem pública do Azure.

Pré-requisitos

  • Uma infraestrutura de SDN implantada com o Controlador de Rede.

  • Uma rede virtual de locatário foi criada.

  • Uma máquina virtual de locatário implantada com o recurso de Contêiner do Windows habilitado, o Docker instalado e o recurso Hyper-V habilitado. O recurso Hyper-V é necessário para instalar vários binários em redes l2bridge e l2tunnel.

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

Observação

A virtualização aninhada e a exposição de extensões de virtualização não são necessárias, a menos que contêineres do Hyper-V sejam usados.

Fluxo de trabalho

1. Adicionar várias configurações de IP a um recurso NIC de VM existente por meio do Controlador de Rede (Host Hyper-V)2. Habilitar o proxy de rede no host para alocar endereços IP de AC para pontos de extremidade de contêiner (Host Hyper-V)3. Instalar o plug-in de nuvem privada para atribuir endereços IP de AC a pontos de extremidade de contêiner (VM do Host do Contêiner)4. Criar uma rede l2bridge ou l2tunnel usando o docker (VM do Host do Contêiner)

Observação

Não há suporte para várias configurações de IP em recursos NIC de VM criados por meio do System Center Virtual Machine Manager. É recomendável para esses tipos de implantações que você crie o recurso NIC da VM fora de banda usando o PowerShell do Controlador de Rede.

1. Adicionar várias configurações de IP

Nesta etapa, presumimos que o NIC da VM da máquina virtual do locatário tenha uma configuração de IP com o endereço IP 192.168.1.9 e esteja anexado a uma ID de recurso de VNet de 'VNet1' e um recurso de sub-rede de VM de 'Subnet1' na sub-rede IP 192.168.1.0/24. Adicionamos 10 endereços IP para contêineres de 192.168.1.101 a 192.168.1.110.

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. Habilitar o proxy de rede

Nesta etapa, você permite que o proxy de rede aloque vários endereços IP para a máquina virtual do host do contêiner.

Para habilitar o proxy de rede, execute o script ConfigureMCNP.ps1 no Host Hyper-V que hospeda a máquina virtual do host do contêiner (locatário).

PS C:\> ConfigureMCNP.ps1

3. Instalar o plug-in de nuvem privada

Nesta etapa, você instala um plug-in para permitir que o HNS se comunique com o proxy de rede no Host Hyper-V.

Para instalar o plug-in, execute o script InstallPrivateCloudPlugin.ps1 dentro da máquina virtual do host do contêiner (locatário).

PS C:\> InstallPrivateCloudPlugin.ps1

4. Criar uma rede de contêiner l2bridge

Nesta etapa, você usa o comando docker network create na máquina virtual do host do contêiner (locatário) para criar uma rede 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>

Observação

Não há suporte para a atribuição de IP estático com redes de contêiner l2bridge ou l2tunnel quando usada com o Microsoft SDN Stack.

Mais informações

Para obter mais detalhes sobre como implantar uma infraestrutura de SDN, consulte Implantar uma infraestrutura de rede definida pelo software.