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

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

Внимание

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

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

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

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

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

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

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

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

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

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

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

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

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

Создание конечной точки

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

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

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

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

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

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

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