Поделиться через


Подключение конечных точек контейнера к виртуальной сети клиента

В этом разделе показано, как подключить конечные точки контейнеров к существующей виртуальной сети клиента, созданной с помощью SDN. Сетевой драйвер l2bridge (и при необходимости l2tunnel), доступный с подключаемым модулем Windows libnetwork для Docker, чтобы создать сеть контейнеров на виртуальной машине клиента.

В разделе "Сетевые драйверы контейнеров" мы обсудили, что несколько сетевых драйверов доступны через Docker в Windows. Для SDN используйте драйверы l2bridge и l2tunnel . Для обоих драйверов каждая конечная точка контейнера находится в той же виртуальной подсети, что и виртуальная машина узла контейнера (клиента).

Сетевая служба узла (HNS) через подключаемый модуль частного облака динамически назначает IP-адреса для конечных точек контейнеров. Конечные точки контейнера имеют уникальные IP-адреса, но используют один и тот же MAC-адрес виртуальной машины узла контейнера (клиента) из-за преобразования адресов уровня 2.

Политика сети (ACL, инкапсуляция и QoS) для этих конечных точек контейнера применяется в физическом узле Hyper-V, полученном сетевым контроллером и определенными в системах управления верхним уровнем.

Различия между драйверами l2bridge и l2tunnel :

l2bridge l2tunnel
Конечные точки контейнера, на которые находятся:
  • Одна и та же виртуальная машина узла контейнера и в одной подсети имеют все сетевые трафикы, мостовые связи между виртуальным коммутатором Hyper-V.
  • Разные виртуальные машины узла контейнера или в разных подсетях перенаправляли трафик на физический узел Hyper-V.
Политика сети не применяется, так как сетевой трафик между контейнерами на одном узле и в той же подсети не передается физическому узлу. Сетевая политика применяется только к сетевому трафику между узлами или контейнерами между подсетью.
Весь сетевой трафик между двумя конечными точками контейнера пересылается на физический узел Hyper-V независимо от узла или подсети. Политика сети применяется как к межсети, так и к сетевому трафику между узлами.

Примечание.

Эти сетевые режимы не работают для подключения конечных точек контейнеров Windows к виртуальной сети клиента в общедоступном облаке Azure.

Необходимые компоненты

  • Развернутая инфраструктура SDN с сетевым контроллером.

  • Была создана виртуальная сеть клиента.

  • Развернутая виртуальная машина клиента с включенной функцией контейнера Windows, установленной и включенной функцией Hyper-V. Компонент Hyper-V необходим для установки нескольких двоичных файлов для сетей l2bridge и l2tunnel.

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

Примечание.

Вложенная виртуализация и предоставление расширений виртуализации не требуется, если только не используется контейнеры Hyper-V.

Рабочий процесс

1. Добавьте несколько IP-конфигураций в существующий ресурс сетевой карты виртуальной машины через сетевой контроллер (узел Hyper-V)2. Включите сетевой прокси-сервер на узле, чтобы выделить IP-адреса ЦС для конечных точек контейнеров (узел Hyper-V)3. Установите подключаемый модуль частного облака, чтобы назначить IP-адреса ЦС конечным точкам контейнеров (виртуальная машина узла контейнера)4. Создание сети l2bridge или l2tunnel с помощью docker (виртуальная машина узла контейнеров)

Примечание.

Несколько IP-конфигураций не поддерживаются в ресурсах сетевого адаптера виртуальной машины, созданных с помощью System Center диспетчер виртуальных машин. Для этих типов развертываний рекомендуется создать ресурс сетевого адаптера виртуальной машины с помощью PowerShell сетевого адаптера виртуальной машины.

1. Добавление нескольких IP-конфигураций

На этом шаге предполагается, что сетевой адаптер виртуальной машины виртуальной машины клиента имеет одну IP-конфигурацию с IP-адресом 192.168.1.9 и подключен к идентификатору ресурса виртуальной сети "VNet1" и ресурсу подсети виртуальной машины "Подсеть1" в подсети IP-адресов 192.168.1.0/24. Мы добавим 10 IP-адресов для контейнеров с 192.168.1.101 – 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. Включение сетевого прокси-сервера

На этом шаге вы включите сетевой прокси-сервер для выделения нескольких IP-адресов для виртуальной машины узла контейнера.

Чтобы включить сетевой прокси-сервер, запустите скрипт ConfigureMCNP.ps1 на узле Hyper-V, на котором размещена виртуальная машина узла контейнера (клиента).

PS C:\> ConfigureMCNP.ps1

3. Установка подключаемого модуля частного облака

На этом шаге вы установите подключаемый модуль, чтобы разрешить HNS взаимодействовать с сетевым прокси-сервером на узле Hyper-V.

Чтобы установить подключаемый модуль, запустите скрипт InstallPrivateCloudPlugin.ps1 на виртуальной машине узла контейнера (клиента).

PS C:\> InstallPrivateCloudPlugin.ps1

4. Создание сети контейнеров l2bridge

На этом шаге вы используете docker network create команду на виртуальной машине узла контейнера (клиента) для создания сети 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>

Примечание.

Назначение статических IP-адресов не поддерживается с сетями контейнеров l2bridge или l2tunnel при использовании в Microsoft SDN Stack.

Дополнительные сведения

Дополнительные сведения о развертывании инфраструктуры SDN см. в статье "Развертывание программно-определяемой сетевой инфраструктуры".