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