Conexión de puntos de conexión de contenedor a una red virtual de inquilino
En este tema, se muestra cómo conectar puntos de conexión de contenedor a una red virtual de inquilino existente creada con redes definidas por software (SDN). Use el controlador de red l2bridge (y, opcionalmente, l2tunnel) disponible con el complemento libnetwork de Windows para Docker para crear una red de contenedor en la máquina virtual de inquilino.
En el tema Controladores de red de contenedor, hemos analizado que hay varios controladores de red disponibles a través de Docker en Windows. Para SDN, use los controladores l2bridge y l2tunnel. En ambos controladores, cada punto de conexión de contenedor se encuentra en la misma subred virtual que la máquina virtual de host de contenedor (inquilino).
El servicio de redes de host (HNS), a través del complemento de nube privada, asigna dinámicamente las direcciones IP para los puntos de conexión de contenedor. Los puntos de conexión de contenedor tienen direcciones IP únicas, pero comparten la misma dirección MAC que la máquina virtual de host de contenedor (inquilino) debido a la traducción de direcciones de segundo nivel.
La directiva de red (ACL, encapsulación y QoS) para estos puntos de conexión de contenedor se aplica en el host físico de Hyper-V tal y como la recibe la controladora de red y como se define en los sistemas de administración de nivel superior.
Las diferencias entre los controladores l2bridge y l2tunnel son las siguientes:
l2bridge | l2tunnel |
---|---|
Puntos de conexión de contenedor que residen en:
|
Todo el tráfico de red entre dos puntos de conexión de contenedor se reenvía al host físico de Hyper-V independientemente del host o la subred. La directiva de red se aplica al tráfico de red entre subredes y hosts. |
Nota
Estos modos de red no funcionan para conectar puntos de conexión de contenedor de Windows a una red virtual de inquilino en la nube pública de Azure.
Requisitos previos
Una infraestructura de SDN implementada con la controladora de red.
Una red virtual de inquilino creada.
Una máquina virtual de inquilino implementada con la característica Contenedor de Windows habilitada, Docker instalado y la característica Hyper-V activada. La característica Hyper-V es necesaria para instalar varios archivos binarios para las redes l2bridge y l2tunnel.
# To install HyperV feature without checks for nested virtualization dism /Online /Enable-Feature /FeatureName:Microsoft-Hyper-V /All
Nota
La virtualización anidada y la exposición de extensiones de virtualización no son necesarias a menos que se usen contenedores de Hyper-V.
Flujo de trabajo
1. Agregue varias configuraciones IP a un recurso de NIC de máquina virtual existente a través de la controladora de red (host de Hyper-V).2. Habilite el proxy de red en el host para asignar direcciones IP de CA para puntos de conexión de contenedor (host de Hyper-V).3. Instale el complemento de nube privada para asignar direcciones IP de CA a puntos de conexión de contenedor (VM de host de contenedor).4. Cree una red l2bridge o l2tunnel mediante Docker (VM de host de contenedor).
Nota
No se admiten varias configuraciones de IP en los recursos de NIC de máquina virtual creados con System Center Virtual Machine Manager. Para estos tipos de implementaciones, se recomienda crear el recurso de NIC de máquina virtual fuera de banda mediante el módulo de PowerShell de controladora de red.
1. Adición de varias configuraciones IP
En este paso, damos por hecho que la NIC de VM de la máquina virtual de inquilino tiene una configuración IP con la dirección IP 192.168.1.9 y que está asociada a un identificador de recurso de red virtual "VNet1" y a un recurso de subred de máquina virtual "Subnet1" en la subred IP 192.168.1.0/24. Agregamos 10 direcciones IP para contenedores, 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. Habilitación del proxy de red
En este paso, habilitará el proxy de red para asignar varias direcciones IP para la máquina virtual de host de contenedor.
Para habilitar el proxy de red, ejecute el script ConfigureMCNP.ps1 en el host de Hyper-V que hospeda la máquina virtual de host de contenedor (inquilino).
PS C:\> ConfigureMCNP.ps1
3. Instalación del complemento de nube privada
En este paso, instalará un complemento para permitir que el HNS se comunique con el proxy de red en el host de Hyper-V.
Para instalar el complemento, ejecute el script InstallPrivateCloudPlugin.ps1 dentro de la máquina virtual de host de contenedor (inquilino).
PS C:\> InstallPrivateCloudPlugin.ps1
4. Creación de una red de contenedor l2bridge
En este paso, usará el comando docker network create
en la máquina virtual de host de contenedor (inquilino) para crear una red 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>
Nota
La asignación de IP estáticas no se admite con redes de contenedor l2bridge o l2tunnel cuando se usan con la pila de redes definidas por software (SDN) de Microsoft.
Más información
Para obtener más información sobre la implementación de una infraestructura de SDN, consulte Implementación de una infraestructura de redes definidas por software.