Драйверы сети контейнеров WindowsWindows container network drivers

Помимо использования сети "nat" по умолчанию, созданной подсистемой Docker в Windows, пользователи могут определять собственные сети контейнеров.In addition to leveraging the default 'nat' network created by Docker on Windows, users can define custom container networks. Определяемые пользователем сети можно создавать с помощью команды DOCKER CLI docker network create -d <NETWORK DRIVER TYPE> <NAME> .User-defined networks can be created using the Docker CLI docker network create -d <NETWORK DRIVER TYPE> <NAME> command. В Windows доступны следующие типы сетевых драйверов.On Windows, the following network driver types are available:

Сетевой драйвер NATNAT network driver

Контейнеры, подключенные к сети, созданной с помощью драйвера NAT, будут подключены к внутреннему коммутатору Hyper-V и получают IP-адрес из префикса IP-адреса, указанного пользователем ( --subnet ).Containers attached to a network created with the 'nat' driver will be connected to an internal Hyper-V switch and receive an IP address from the user-specified (--subnet) IP prefix. Перенаправление и сопоставление портов из узла контейнера в конечные точки контейнера поддерживается.Port forwarding / mapping from the container host to container endpoints is supported.

Совет

Можно настроить подсеть, используемую сетью NAT по умолчанию, с помощью fixed-cidr параметра в файле конфигурации управляющей программы DOCKER.It is possible to customize the subnet used by the default 'nat' network via the fixed-cidr setting in the Docker daemon configuration file.

Примечание

Сети NAT, созданные в Windows Server 2019 (или более поздней версии), больше не сохраняются после перезагрузки.NAT networks created on Windows Server 2019 (or above) are no longer persisted after reboot.

Создание сети NATCreating a NAT network

Чтобы создать сеть NAT с подсетью, 10.244.0.0/24 выполните следующие действия.To create a new NAT network with subnet 10.244.0.0/24:

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

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

Контейнеры, подключенные к сети, созданной с помощью драйвера "прозрачный", будут напрямую подключены к физической сети с помощью внешнего коммутатора Hyper-V.Containers attached to a network created with the 'transparent' driver will be directly connected to the physical network through an external Hyper-V switch. IP-адреса из физической сети могут назначаться статически (необходим заданный пользователем параметр --subnet) или динамически с помощью внешнего DHCP-сервера.IPs from the physical network can be assigned statically (requires user-specified --subnet option) or dynamically using an external DHCP server.

Примечание

Из-за следующих требований подключение узлов контейнера к прозрачной сети не поддерживается на виртуальных машинах Azure.Due to the following requirement, connecting your container hosts over a transparent network is not supported on Azure VMs.

Требуется: Если этот режим используется в сценарии виртуализации (узел контейнера является виртуальной машиной) , требуется подмена Mac-адреса.Requires: When this mode is used in a virtualization scenario (container host is a VM) MAC address spoofing is required.

Создание прозрачной сетиCreating a transparent network

Чтобы создать новую прозрачную сеть с подсетью 10.244.0.0/24 , шлюзом 10.244.0.1 , DNS-сервером 10.244.0.7 и идентификатором виртуальной ЛС, 7 выполните следующие действия.To create a new transparent network with subnet 10.244.0.0/24, gateway 10.244.0.1, DNS server 10.244.0.7 and VLAN ID 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

Перекрытие сетевого драйвераOverlay network driver

Контейнеры, подключенные к сети наложения, часто используются такими контейнерами, как DOCKER Swarm и Kubernetes, которые могут взаимодействовать с другими контейнерами, подключенными к той же сети на нескольких узлах контейнера.Popularly used by containers orchestrators such as Docker Swarm and Kubernetes, containers attached to an overlay network can communicate with other containers attached to the same network across multiple container hosts. Каждая сеть наложения создается с собственной IP-подсетью, определяемой префиксом частного IP-адреса.Each overlay network is created with its own IP subnet, defined by a private IP prefix. Сетевой драйвер наложения использует инкапсуляцию ВКСЛАН для обеспечения изоляции сетевого трафика между сетями контейнеров клиентов и позволяет повторно использовать IP-адреса в сетях наложения.The overlay network driver uses VXLAN encapsulation to achieve network traffic isolation between tenant container networks and enables re-using IP addresses across overlay networks.

Требуется: Убедитесь, что среда удовлетворяет необходимым требованиям для создания наложения сетей.Requires: Make sure your environment satisfies these required prerequisites for creating overlay networks.

Требуется: в Windows Server 2019 для этого требуется KB4489899.Requires: On Windows Server 2019, this requires KB4489899.

Требуется: в Windows Server 2016 для этого требуется KB4015217.Requires: On Windows Server 2016, this requires KB4015217.

Примечание

В Windows Server 2019 и более поздних версиях наложение сетей, созданных DOCKER Swarm, использует правила NAT VFP для исходящего подключения.On Windows Server 2019 and above, overlay networks created by Docker Swarm leverage VFP NAT rules for outbound connectivity. Это означает, что заданный контейнер получает 1 IP-адрес.This means that a given container receives 1 IP address. Это также означает, что средства на основе протокола ICMP, такие как ping или, Test-NetConnection должны быть настроены с использованием параметров TCP/UDP в ситуациях отладки.It also means that ICMP-based tools such as ping or Test-NetConnection should be configured using their TCP/UDP options in debugging situations.

Создание наложения сетиCreating a overlay network

Чтобы создать новую наложение сети с подсетью 10.244.0.0/24 , DNS-сервером 168.63.129.16 и VSID 4096 :To create a new overlay network with subnet 10.244.0.0/24, DNS server 168.63.129.16, and 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 NetworkL2bridge network driver

Контейнеры, подключенные к сети, созданной с помощью драйвера "l2bridge", будут подключены к физической сети с помощью внешнего коммутатора Hyper-V.Containers attached to a network created with the 'l2bridge' driver will be connected to the physical network through an external Hyper-V switch. В l2bridge сетевой трафик контейнера будет иметь тот же MAC-адрес, что и узел, из-за операции преобразования адресов уровня 2 (MAC) для входящего и исходящего трафика.In l2bridge, container network traffic will have the same MAC address as the host due to Layer-2 address translation (MAC re-write) operation on ingress and egress. В центрах обработки данных это позволяет уменьшить нагрузку на коммутаторы, для которых необходимо изучить MAC-адреса, которые иногда находятся в кратковременных контейнерах.In datacenters, this helps alleviate the stress on switches having to learn MAC addresses of sometimes short-lived containers. L2bridge сети можно настроить двумя разными способами:L2bridge networks can be configured in 2 different ways:

  1. L2bridge сеть настроена с той же IP-подсетью, что и узел контейнераL2bridge network is configured with the same IP subnet as the container host
  2. L2bridge сеть настроена с новой настраиваемой IP-подсетьюL2bridge network is configured with a new custom IP subnet

В конфигурации 2 пользователям потребуется добавить конечную точку в сегмент сети узла, который выступает в качестве шлюза, и настроить возможности маршрутизации для назначенного префикса.In configuration 2 users will need to add a endpoint on the host network compartment that acts as a gateway and configure routing capabilities for the designated prefix.

Создание l2bridge сетиCreating a l2bridge network

Чтобы создать сеть l2bridge с подсетью 10.244.0.0/24 , шлюзом 10.244.0.1 , DNS-сервером 10.244.0.7 и ВИРТУАЛЬНОЙ ЛС с идентификатором 7, сделайте следующее:To create a new l2bridge network with subnet 10.244.0.0/24, gateway 10.244.0.1, DNS server 10.244.0.7 and VLAN ID 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_transparent

Совет

L2bridge сети являются строго программируемыми; Дополнительные сведения о настройке l2bridge можно найти здесь.L2bridge networks are highly programmable; More details on how to configure l2bridge can be found here.

Драйвер L2tunnel NetworkL2tunnel network driver

Создание идентично l2bridge, однако этот драйвер следует использовать только в стеке Microsoft Cloud (Azure).Creation is identical to l2bridge, however this driver should only be used in a Microsoft Cloud Stack (Azure). Единственное отличие от l2bridge заключается в том, что весь трафик контейнера отправляется на узел виртуализации, где применяется политика SDN, тем самым включая такие функции, как группы безопасности сети Azure для контейнеров.The only difference over l2bridge is that all container traffic is sent to the virtualization host where SDN policy is applied, thereby enabling features such as Azure Network Security Groups for containers.

Сетевые топологии и IPAMNetwork topologies and IPAM

В следующей таблице показано, как сетевое подключение предоставляется для внутренних (контейнер-контейнер) и внешних подключений каждого сетевого драйвера.The table below shows how network connectivity is provided for internal (container-to-container) and external connections for each network driver.

Сетевые режимы и драйверы DOCKERNetworking modes/Docker drivers

Сетевой драйвер Windows для DockerDocker Windows Network Driver Распространенные способы примененияTypical uses Контейнер в контейнер (один узел)Container-to-container (Single node) Между контейнерами и внешними узлами (один узел и несколько узлов)Container-to-external (single node + multi-node) Контейнер в контейнер (с несколькими узлами)Container-to-container (multi-node)
NAT (по умолчанию)NAT (Default) Удобно для разработчиковGood for Developers
  • Одна подсеть: подключение с мостом через виртуальный коммутатор Hyper-VSame Subnet: Bridged connection through Hyper-V virtual switch
  • Перекрестная подсеть: не поддерживается (только один внутренний префикс NAT)Cross subnet: Not supported (only one NAT internal prefix)
Маршрутизация через виртуальный сетевой адаптер управления (привязка к WinNAT)Routed through Management vNIC (bound to WinNAT) Не поддерживается напрямую: требуется предоставление доступа к портам через узелNot directly supported: requires exposing ports through host
ПрозрачныйTransparent Удобно для разработчиков и небольших развертыванийGood for Developers or small deployments
  • Одна подсеть: подключение с мостом через виртуальный коммутатор Hyper-VSame Subnet: Bridged connection through Hyper-V virtual switch
  • Подключение между подсетями: маршрутизация через узел контейнеровCross Subnet: Routed through container host
Маршрутизация через узел контейнеров с прямым доступом к (физическому) сетевому адаптеруRouted through container host with direct access to (physical) network adapter Маршрутизация через узел контейнеров с прямым доступом к (физическому) сетевому адаптеруRouted through container host with direct access to (physical) network adapter
ОбъединенияOverlay Подходит для нескольких узлов; требуется для DOCKER Swarm, доступно в KubernetesGood for multi-node; required for Docker Swarm, available in Kubernetes
  • Одна подсеть: подключение с мостом через виртуальный коммутатор Hyper-VSame Subnet: Bridged connection through Hyper-V virtual switch
  • Подключение между подсетями: сетевой трафик инкапсулируется и маршрутизируется через виртуальный сетевой адаптер управленияCross Subnet: Network traffic is encapsulated and routed through Mgmt vNIC
Не поддерживается напрямую. требуется Вторая конечная точка контейнера, подключенная к сети NAT в правиле NAT Windows Server 2016 или VFP в Windows Server 2019.Not directly supported - requires second container endpoint attached to NAT network on Windows Server 2016 or VFP NAT rule on Windows Server 2019. Одна подсеть/подключение между подсетями: сетевой трафик инкапсулируется с помощью VXLAN и маршрутизируется через виртуальный сетевой адаптер управленияSame/Cross Subnet: Network traffic is encapsulated using VXLAN and routed through Mgmt vNIC
L2BridgeL2Bridge Используется для Kubernetes и Microsoft SDNUsed for Kubernetes and Microsoft SDN
  • Одна подсеть: подключение с мостом через виртуальный коммутатор Hyper-VSame Subnet: Bridged connection through Hyper-V virtual switch
  • Подключение между подсетями: MAC-адрес контейнера повторно записывается при входе и выходе и маршрутизируетсяCross Subnet: Container MAC address re-written on ingress and egress and routed
MAC-адрес контейнера повторно записывается при входе и выходеContainer MAC address re-written on ingress and egress
  • Одна подсеть: подключение с мостомSame Subnet: Bridged connection
  • Перекрестная подсеть: направляется через vNIC для WSv1809 и более поздних версийCross Subnet: routed through Mgmt vNIC on WSv1809 and above
L2TunnelL2Tunnel Только в AzureAzure only Одна подсеть/подключение между подсетями: разворот пакетов на виртуальный коммутатор Hyper-V физического узла, к которому применяется политикаSame/Cross Subnet: Hair-pinned to physical host's Hyper-V virtual switch to where policy is applied Трафик должен проходить через виртуальный сетевой шлюз AzureTraffic must go through Azure virtual network gateway Одна подсеть/подключение между подсетями: разворот пакетов на виртуальный коммутатор Hyper-V физического узла, к которому применяется политикаSame/Cross Subnet: Hair-pinned to physical host's Hyper-V virtual switch to where policy is applied

IPAMIPAM

IP-адреса распределяются и назначаются каждому сетевому драйверу по-разному.IP Addresses are allocated and assigned differently for each networking driver. Windows использует сетевую службу узлов (HNS) для передачи IPAM драйверу "nat" и работает в режиме мелких объектов Docker (внутренняя служба KVS) для передачи IPAM драйверу "overlay".Windows uses the Host Networking Service (HNS) to provide IPAM for the nat driver and works with Docker Swarm Mode (internal KVS) to provide IPAM for overlay. Все остальные сетевые драйверы используют внешнюю платформу IPAM.All other network drivers use an external IPAM.

Сетевой режим/драйверNetworking Mode / Driver IPAMIPAM
NATNAT Динамическое выделение и назначение IP-адресов службой Networking Service (HNS) от префикса внутренней подсети NATDynamic IP allocation and assignment by Host Networking Service (HNS) from internal NAT subnet prefix
ПрозрачныйTransparent Статическое или динамическое (с помощью внешнего DHCP-сервера) выделение и назначение IP-адресов из числа адресов в префиксе сети узла контейнеровStatic or dynamic (using external DHCP server) IP allocation and assignment from IP addresses within container host's network prefix
НаложениеOverlay Динамическое выделение IP-адресов из префиксов под управлением подсистемы Docker в режиме мелких объектов и их назначение через службу HNSDynamic IP allocation from Docker Engine Swarm Mode managed prefixes and assignment through HNS
L2BridgeL2Bridge Динамическое выделение и назначение IP-адресов службой Networking Service (HNS) из предоставленного префикса подсетиDynamic IP allocation and assignment by Host Networking Service (HNS) from provided subnet prefix
L2TunnelL2Tunnel Только в Azure: динамическое выделение IP-адресов и их назначение через подключаемый модульAzure only - Dynamic IP allocation and assignment from plugin

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

Обнаружение служб поддерживают только определенные сетевые драйверы Windows.Service Discovery is only supported for certain Windows network drivers.

Имя драйвераDriver name Локальное обнаружение службLocal Service Discovery Глобальное обнаружение службGlobal Service Discovery
NATnat YESYES ДА, с помощью Docker EEYES with Docker EE
overlayoverlay YESYES Да, с DOCKER EE или KUBE-DNSYES with Docker EE or kube-dns
transparenttransparent NONO NONO
l2bridgel2bridge Да, с KUBE-DNSYES with kube-dns Да, с KUBE-DNSYES with kube-dns