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


Сетевые драйверы контейнеров Windows

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

Помимо использования сети NAT по умолчанию, созданной Docker в Windows, пользователи могут определять пользовательские сети контейнеров. Определяемые пользователем сети можно создать с помощью команды Docker CLI docker network create -d <NETWORK DRIVER TYPE> <NAME>. В Windows доступны следующие типы сетевых драйверов:

Сетевой драйвер NAT

Контейнеры, подключенные к сети, созданной с драйвером NAT, будут подключены к внутреннему коммутатору Hyper-V и получают IP-адрес из префикса IP-адреса, указанного пользователем (--subnet). Поддерживается перенаправление и сопоставление портов с узла контейнера на конечные точки контейнеров.

Кончик

Можно настроить подсеть, используемую сетью NAT по умолчанию, с помощью параметра fixed-cidrв файле конфигурации управляющей программы Docker.

Заметка

Сети NAT, созданные в Windows Server 2019 (или более поздней версии), больше не сохраняются после перезагрузки.

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

Чтобы создать новую сеть NAT с подсетью 10.244.0.0/24:

docker network create -d "nat" --subnet "10.244.0.0/24" my_nat

Прозрачный сетевой драйвер

Контейнеры, подключенные к сети, созданной с помощью драйвера "прозрачный", будут напрямую подключены к физической сети через внешний коммутатор Hyper-V. IP-адреса из физической сети можно назначать статически (требуется параметр --subnet пользователя) или динамически использовать внешний DHCP-сервер.

Заметка

Из-за следующего требования подключение узлов контейнеров через прозрачную сеть не поддерживается на виртуальных машинах Azure.

Требуется: если этот режим используется в сценарии виртуализации (узел контейнера является виртуальной машиной), спуфингом MAC-адреса требуется.

Создание прозрачной сети

Чтобы создать новую прозрачную сеть с подсетью 10.244.0.0/24, шлюзом 10.244.0.1, DNS-сервером 10.244.0.7 и идентификатором VLAN 7:

docker network create -d "transparent" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent

Сетевой драйвер наложения

Популярные среди оркестраторов контейнеров, таких как Docker Swarm и Kubernetes, контейнеры, подключенные к оверлейной сети, могут взаимодействовать с другими контейнерами на той же сети между несколькими хостами контейнеров. Каждая сеть наложения создается с собственной IP-подсетью, определенной частным IP-префиксом. Сетевой драйвер наложения использует инкапсуляцию VXLAN для обеспечения изоляции сетевого трафика между сетями контейнеров клиента и позволяет повторно использовать IP-адреса в сетях наложения.

Требуется. Убедитесь, что среда удовлетворяет этим необходимым требованиям предварительным требованиям для создания сетей наложения.

Требуется: в Windows Server 2019 это требует KB4489899.

Требуется: в Windows Server 2016 это требует KB4015217.

Заметка

В Windows Server 2019 и выше наложенные сети, созданные Docker Swarm, используют правила VFP NAT для исходящего трафика. Это означает, что данный контейнер получает 1 IP-адрес. Это также означает, что средства на основе ICMP, такие как ping или Test-NetConnection, должны быть настроены с помощью параметров TCP/UDP в ситуациях отладки.

Создание сети наложения

Чтобы создать новую оверлейную сеть с подсетью 10.244.0.0/24, DNS-сервером 168.63.129.16и VSID 4096:

docker network create -d "overlay" --attachable --subnet "10.244.0.0/24" -o com.docker.network.windowsshim.dnsservers="168.63.129.16" -o com.docker.network.driver.overlay.vxlanid_list="4096" my_overlay

Сетевой драйвер L2bridge

Контейнеры, подключенные к сети, созданной с драйвером l2bridge, будут подключены к физической сети через внешний коммутатор Hyper-V. В l2bridge сетевой трафик контейнера будет иметь тот же MAC-адрес, что и хост из-за операции преобразования адресов уровня 2 (перезаписи MAC) на входе и выходе. В центрах обработки данных это помогает облегчить нагрузку на коммутаторы, чтобы узнать MAC-адреса иногда кратковременных контейнеров. Сети L2bridge можно настроить 2 разными способами:

  1. Сеть L2bridge настроена так, чтобы использовать ту же IP-подсеть, что и хост контейнера.
  2. Сеть L2bridge настроена с помощью новой настраиваемой подсети IP-адресов

В конфигурации 2 пользователям потребуется добавить конечную точку в сетевом отсеке узла, который выступает в качестве шлюза и настроить возможности маршрутизации для указанного префикса.

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

Чтобы создать новую сеть l2bridge с подсетью 10.244.0.0/24, шлюзом 10.244.0.1, DNS-сервером 10.244.0.7 и идентификатором виртуальной локальной сети 7:

docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_l2bridge

Совет

Сети L2bridge являются высокопрограммируемыми; Дополнительные сведения о настройке l2bridge можно найти здесь.

Сетевой драйвер L2tunnel

Создание идентично l2bridge, однако этот драйвер должен использоваться только вMicrosoft Cloud Stack (Azure). Единственное отличие от l2bridge заключается в том, что весь трафик контейнера отправляется в узел виртуализации, где применяется политика SDN, тем самым обеспечивая такие функции, как группы безопасности сети Azure для контейнеров.

Топологии сети и IPAM

В таблице ниже показано, как обеспечивается сетевое подключение для внутренних (контейнеров и контейнеров) и внешних подключений для каждого сетевого драйвера.

Сетевые режимы и драйверы Docker

Сетевой драйвер Docker Для Windows Типичные варианты использования Контейнер — контейнер (один узел) Контейнер —внешний (один узел и несколько узлов) Контейнер — контейнер (многоузловая версия)
NAT (по умолчанию) Хорошо для разработчиков
  • Та же подсеть: мостовое подключение через виртуальный коммутатор Hyper-V
  • Перекрестная подсеть: не поддерживается (только один внутренний префикс NAT)
Перенаправлено через виртуальную карту управления (привязанную к WinNAT) Не поддерживается напрямую: требуется прозрачное предоставление портов через хост
прозрачный Хорошо подходит для разработчиков или небольших развертываний
  • Та же подсеть: мостовое подключение через виртуальный коммутатор Hyper-V
  • Перекрестная подсеть: маршрутизация через хост контейнера
Перенаправлено через узел контейнера с прямым доступом к сетевому адаптеру (физическому) Перенаправлено через узел контейнера с прямым доступом к сетевому адаптеру (физическому)
наложение Хорошо подходит для нескольких узлов; требуется для Docker Swarm, доступной в Kubernetes
  • Та же подсеть: мостовое подключение через виртуальный коммутатор Hyper-V
  • Перекрестная подсеть: сетевой трафик инкапсулируется и направляется через виртуальную сетевую карту Mgmt
Не поддерживается напрямую. Требуется вторая конечная точка контейнера, подключенная к сети NAT в Windows Server 2016 или правиле VFP NAT в Windows Server 2019. Та же или перекрестная подсеть: сетевой трафик инкапсулируется с помощью VXLAN и направляется через виртуальную сетевую карту Mgmt
L2Bridge Используется для Kubernetes и Microsoft SDN
  • Та же подсеть: мостовое подключение через виртуальный коммутатор Hyper-V
  • Перекрестная подсеть: MAC-адрес контейнера перезаписывается при входе и выходе и маршрутизируется.
MAC-адрес контейнера перезаписывается на входе и на выходе.
  • Та же подсеть: мостовое подключение
  • Смежная подсеть: маршрутизация через виртуальную сетевую карту управления (Mgmt vNIC) в WSv1809 и более поздние версии.
L2Tunnel Только Azure Та же или разная подсеть: замыкание на виртуальный коммутатор Hyper-V физического хоста, где применяется политика Трафик должен проходить через шлюз виртуальной сети Azure В одной или пересекательной подсети: трафик перенаправляется к виртуальному коммутатору Hyper-V на физическом хосте, где применяется политика

IPAM

IP-адреса выделяются и назначаются по-разному для каждого сетевого драйвера. Windows использует сетевую службу узла (HNS) для предоставления IPAM для драйвера NAT и работы с режимом Docker Swarm (внутренний KVS) для предоставления IPAM для наложения. Все остальные сетевые драйверы используют внешний IPAM.

Сетевой режим или драйвер IPAM
NAT Динамическое выделение и назначение IP-адресов сетевой службой узла (HNS) из префикса внутренней подсети NAT
Прозрачный Статическое или динамическое (с помощью внешнего DHCP-сервера) выделение и назначение IP-адресов из IP-адресов в префиксе сети узла контейнера
Наложение Динамическое выделение IP-адресов из управляемых префиксов в режиме Swarm Docker Engine и их назначение с помощью HNS.
L2Bridge Динамическое выделение и назначение IP-адресов службой сетевого узла (HNS) из предоставленного префикса подсети
L2Tunnel Только Azure — динамическое выделение IP-адресов и назначение из плагина

Обнаружение служб

Обнаружение служб поддерживается только для определенных сетевых драйверов Windows.

Имя драйвера Обнаружение локальных служб Обнаружение глобальных служб
нат ДА ДА с Docker EE
наложение ДА ДА с Docker EE или kube-dns
прозрачный НЕТ НЕТ
l2bridge ДА с kube-dns ДА с kube-dns