Сетевые драйверы контейнеров 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 разными способами:
- Сеть L2bridge настроена так, чтобы использовать ту же IP-подсеть, что и хост контейнера.
- Сеть 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 (по умолчанию) | Хорошо для разработчиков |
|
Перенаправлено через виртуальную карту управления (привязанную к WinNAT) | Не поддерживается напрямую: требуется прозрачное предоставление портов через хост |
прозрачный | Хорошо подходит для разработчиков или небольших развертываний |
|
Перенаправлено через узел контейнера с прямым доступом к сетевому адаптеру (физическому) | Перенаправлено через узел контейнера с прямым доступом к сетевому адаптеру (физическому) |
наложение | Хорошо подходит для нескольких узлов; требуется для Docker Swarm, доступной в Kubernetes |
|
Не поддерживается напрямую. Требуется вторая конечная точка контейнера, подключенная к сети NAT в Windows Server 2016 или правиле VFP NAT в Windows Server 2019. | Та же или перекрестная подсеть: сетевой трафик инкапсулируется с помощью VXLAN и направляется через виртуальную сетевую карту Mgmt |
L2Bridge | Используется для Kubernetes и Microsoft SDN |
|
MAC-адрес контейнера перезаписывается на входе и на выходе. |
|
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 |