Compartir a través de


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:
  • La misma máquina virtual de host de contenedor y la misma subred, con todo el tráfico de red conectado dentro del conmutador virtual de Hyper-V.
  • Diferentes máquinas virtuales de host de contenedor o diferentes subredes, con el tráfico reenviado al host físico de Hyper-V.
La directiva de red no se aplica porque el tráfico de red entre contenedores en el mismo host y en la misma subred no fluye al host físico. La directiva de red solo se aplica al tráfico de red de contenedores entre diferentes hosts o subredes.
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.