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

Область применения: 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 и идентификатором 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, используют правила NAT VFP для исходящего подключения. Это означает, что данный контейнер получает 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

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

IPAM

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

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

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

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

Имя драйвера Локальное обнаружение служб Глобальное обнаружение служб
NAT YES ДА, с помощью Docker EE
overlay YES ДА с Docker EE или kube-dns
transparent NO NO
l2bridge ДА с kube-dns ДА с kube-dns