Connettere gli endpoint del contenitore a una rete virtuale del tenant

In questo argomento viene illustrato come connettere gli endpoint del contenitore a una rete virtuale tenant esistente creata tramite SDN. Usare il driver di rete l2bridge (e facoltativamente l2tunnel) disponibile con il plug-in Windows libnetwork per Docker per creare una rete contenitore nella macchina virtuale tenant.

Nell'argomento Driver di rete contenitore sono stati illustrati i diversi driver di rete disponibili tramite Docker in Windows. Per SDN, usare i driver l2bridge e l2tunnel. Per entrambi i driver, ogni endpoint contenitore si trova nella stessa subnet virtuale della macchina virtuale host contenitore (tenant).

Il servizio di rete host (HNS), tramite il plug-in cloud privato, assegna in modo dinamico gli indirizzi IP per gli endpoint del contenitore. Gli endpoint contenitore hanno indirizzi IP univoci, ma condividono lo stesso indirizzo MAC della macchina virtuale host contenitore (tenant) a causa della conversione degli indirizzi di livello 2.

I criteri di rete (ACL, incapsulamento e QoS) per questi endpoint contenitore vengono applicati nell'host Hyper-V fisico come ricevuto dal controller di rete e definiti nei sistemi di gestione di livello superiore.

Le differenze tra i driver l2bridge e l2tunnel sono:

l2bridge l2tunnel
Endpoint del contenitore che risiedono:
  • Nella stessa macchina virtuale host contenitore e nella stessa subnet hanno tutto il traffico di rete connesso all'interno del commutatore virtuale Hyper-V.
  • In macchine virtuali host contenitore diverse o in subnet diverse hanno il traffico inoltrato all'host Hyper-V fisico.
I criteri di rete non vengono applicati perché il traffico di rete tra contenitori nello stesso host e nella stessa subnet non passa all'host fisico. I criteri di rete si applicano solo al traffico di rete contenitori tra host o tra subnet.
TUTTO il traffico di rete tra due endpoint contenitore viene inoltrato all'host Hyper-V fisico indipendentemente dall'host o dalla subnet. I criteri di rete si applicano sia alla subnet che al traffico di rete tra host.

Nota

Queste modalità di rete non funzionano per connettere gli endpoint contenitore di Windows a una rete virtuale tenant nel cloud pubblico di Azure.

Prerequisiti

  • Infrastruttura SDN distribuita con il controller di rete.

  • È stata creata una rete virtuale tenant.

  • Una macchina virtuale tenant distribuita con la funzionalità Contenitore Windows abilitata, Docker installata e la funzionalità Hyper-V abilitata. La funzionalità Hyper-V è necessaria per installare diversi file binari per le reti l2bridge e l2tunnel.

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

Nota

La virtualizzazione annidata e l'esposizione delle estensioni di virtualizzazione non è necessaria a meno che non si usino contenitori Hyper-V.

Workflow

1. Aggiungere più configurazioni IP a una risorsa NIC della macchina virtuale esistente tramite controller di rete (host Hyper-V)2. Abilitare il proxy di rete nell'host per allocare indirizzi IP CA per gli endpoint contenitore (host Hyper-V)3. Installare il plug-in cloud privato per assegnare indirizzi IP CA agli endpoint contenitore (VM host contenitore)4. Creare una rete l2bridge o l2tunnel usando docker (VM host contenitore)

Nota

Più configurazioni IP non sono supportate nelle risorse della scheda di interfaccia di rete della macchina virtuale create tramite System Center Virtual Machine Manager. È consigliabile per questi tipi di distribuzioni creare la risorsa scheda di interfaccia di rete della macchina virtuale fuori banda usando PowerShell per controller di rete.

1. Aggiungere più configurazioni IP

In questo passaggio si presuppone che la scheda di interfaccia di rete VM della macchina virtuale tenant abbia una configurazione IP con indirizzo IP 192.168.1.9 e sia collegata a un ID risorsa della rete virtuale "VNet1" e alla risorsa subnet della macchina virtuale "Subnet1" nella subnet IP 192.168.1.0/24. Aggiungere 10 indirizzi IP per i contenitori da 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. Abilitare il proxy di rete

In questo passaggio si abilita il proxy di rete per allocare più indirizzi IP per la macchina virtuale host contenitore.

Per abilitare il proxy di rete, eseguire lo script di ConfigureMCNP.ps1 nell'host Hyper-V che ospita la macchina virtuale host contenitore (tenant).

PS C:\> ConfigureMCNP.ps1

3. Installare il plug-in Cloud privato

In questo passaggio si installa un plug-in per consentire al servizio HNS di comunicare con il proxy di rete nell'host Hyper-V.

Per installare il plug-in, eseguire lo script InstallPrivateCloudPlugin.ps1 all'interno della macchina virtuale host contenitore (tenant).

PS C:\> InstallPrivateCloudPlugin.ps1

4. Creare una rete contenitore l2bridge

In questo passaggio si usa il comando docker network create nella macchina virtuale host contenitore (tenant) per creare una rete 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

L'assegnazione IP statica non è supportata con le reti contenitore l2bridge o l2tunnel quando vengono usate con lo stack SDN di Microsoft.

Altre informazioni

Per altre informazioni sulla distribuzione di un'infrastruttura SDN, vedere Distribuire un'infrastruttura di rete definita dal software.