Подключение конечных точек контейнера к виртуальной сети клиента
В этом разделе показано, как подключить конечные точки контейнеров к существующей виртуальной сети клиента, созданной с помощью 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 независимо от узла или подсети. Политика сети применяется как к межсети, так и к сетевому трафику между узлами. |
Примечание.
Эти сетевые режимы не работают для подключения конечных точек контейнеров 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 см. в статье "Развертывание программно-определяемой сетевой инфраструктуры".