Сетевое взаимодействие контейнеров Windows

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016

Важно!

Общие команды, параметры и синтаксис docker networking см. в статье Сеть контейнеров Docker . За исключением случаев, описанных в неподдерживаемых функциях и параметрах сети, все сетевые команды Docker поддерживаются в Windows с тем же синтаксисом, что и в Linux. Однако сетевые стеки Windows и Linux отличаются, поэтому некоторые сетевые команды Linux (например, ifconfig) не поддерживаются в Windows.

Базовая сетевая архитектура

В этом разделе приведено описание того, каким образом Docker создает и администрирует сети узлов в Windows. В отношении сетевых подключений контейнеры Windows функционируют аналогично виртуальным машинам. У каждого контейнера есть виртуальный сетевой адаптер (vNIC), который подключен к виртуальному коммутатору Hyper-V (vSwitch). Операционная система Windows поддерживает пять различных сетевых драйверов (или по-другому "режимов"), которые можно создать через Docker: nat, overlay, transparent, l2bridge и l2tunnel. В зависимости от особенностей физической сетевой инфраструктуры и от того, должна ли сеть быть одно- или многоузловой, необходимо выбрать сетевой драйвер, который наилучшим образом соответствует вашим потребностям.

Иллюстрирует сетевой стек Windows

При первом запуске обработчика Docker будет создана сеть NAT по умолчанию nat, которая использует внутренний виртуальный коммутатор и компонент Windows с именем WinNAT. При наличии на узле других внешних виртуальных коммутаторов, созданных с помощью оболочки командной строки PowerShell или диспетчера Hyper-V, они также будут доступны подсистеме Docker посредством сетевого драйвера transparent и будут отображаться при запуске команды docker network ls.

Иллюстрирует команду Docker network ls PowerShell

  • Внутренний виртуальный коммутатор не подключен напрямую к сетевому адаптеру на узле контейнера.
  • Внешний виртуальный коммутатор — это виртуальный коммутатор, который напрямую подключен к сетевому адаптеру на узле контейнера.

Иллюстрирует Get-VMSwitch команды PowerShell

Сеть "nat" — это сеть по умолчанию для контейнеров под управлением Windows. Все контейнеры, которые работают под управлением Windows без каких-либо флагов или аргументов, использующихся для реализации конкретной сетевой конфигурации, будут подключены к сети "nat" по умолчанию и им будет автоматически присвоен IP-адрес из диапазона IP-адресов внутреннего префикса сети "nat". Для "nat" по умолчанию используется следующий внутренний префикс IP-адреса: 172.16.0.0/16.

Управление сетью контейнера с помощью сетевой службы узлов

Сетевая служба узлов (HNS) и вычислительная служба узлов (HCS) совместно используются для создания контейнеров и подключения конечных точек к сети. Вы можете взаимодействовать с HNS с помощью вспомогательного модуля PowerShell для HNS.

Создание сети

  • Служба HNS создает виртуальный коммутатор Hyper-V для каждой сети
  • Служба HNS создает преобразование сетевых адресов (NAT) и пулы IP-адресов по мере необходимости

Создание конечных точек

  • Служба HNS создает пространство имен сети для каждой конечной точки контейнера
  • Служба HNS/HCS размещает сетевой адаптер виртуальной машины в пространстве имен сети
  • Служба HNS создает порты виртуального коммутатора
  • Служба HNS назначает конечной точке IP-адрес, сведения DNS, маршруты и т. д. (в зависимости от сетевого режима)

Создание политики

  • Для сети преобразования сетевых адресов (NAT) по умолчанию HNS создает правила перенаправления портов WinNAT и сопоставления с соответствующими правилами разрешения брандмауэра Windows.
  • Для всех остальных сетей HNS использует платформу виртуальной фильтрации (VFP) для создания политик, включая балансировку нагрузки, списки управления доступом и инкапсуляцию. Дополнительные сведения об API HNS и схеме см. в статье API службы HCN для виртуальных машин и контейнеров.

Иллюстрирует стек управления HNS

Неподдерживаемые функции и сетевые параметры

В настоящее время в Windows не поддерживаются следующие параметры сети:

  • Начиная с Windows Server 2022 контейнеры Windows, подключенные к сетям l2bridge, поддерживают стек IPv6. Однако контейнеры Windows, подключенные к сети NAT и наложения, не поддерживают обмен данными по стеку IPv6.
  • Обмен данными между зашифрованными контейнерами по протоколу IPsec.
  • Сеть в режиме узла .
  • Сеть в виртуализированной инфраструктуре Azure с помощью прозрачного сетевого драйвера.
Get-Help Неподдерживаемый параметр
docker run --ip6, --dns-option
docker network create --aux-address, --internal, --ip-range, --ipam-driver, --ipam-opt, --ipv6, --opt encrypted