Conectar pontos de extremidade do contêiner a uma rede virtual do locatário
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:
|
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.