Сетевое взаимодействие контейнеров Windows
Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016
Важно!
Общие команды, параметры и синтаксис docker networking см. в статье Сеть контейнеров Docker . За исключением случаев, описанных в неподдерживаемых функциях и параметрах сети, все сетевые команды Docker поддерживаются в Windows с тем же синтаксисом, что и в Linux. Однако сетевые стеки Windows и Linux отличаются, поэтому некоторые сетевые команды Linux (например, ifconfig
) не поддерживаются в Windows.
Базовая сетевая архитектура
В этом разделе приведено описание того, каким образом Docker создает и администрирует сети узлов в Windows. В отношении сетевых подключений контейнеры Windows функционируют аналогично виртуальным машинам. У каждого контейнера есть виртуальный сетевой адаптер (vNIC), который подключен к виртуальному коммутатору Hyper-V (vSwitch). Операционная система Windows поддерживает пять различных сетевых драйверов (или по-другому "режимов"), которые можно создать через Docker: nat, overlay, transparent, l2bridge и l2tunnel. В зависимости от особенностей физической сетевой инфраструктуры и от того, должна ли сеть быть одно- или многоузловой, необходимо выбрать сетевой драйвер, который наилучшим образом соответствует вашим потребностям.
При первом запуске обработчика Docker будет создана сеть NAT по умолчанию nat, которая использует внутренний виртуальный коммутатор и компонент Windows с именем WinNAT
. При наличии на узле других внешних виртуальных коммутаторов, созданных с помощью оболочки командной строки PowerShell или диспетчера Hyper-V, они также будут доступны подсистеме Docker посредством сетевого драйвера transparent и будут отображаться при запуске команды docker network ls
.
- Внутренний виртуальный коммутатор не подключен напрямую к сетевому адаптеру на узле контейнера.
- Внешний виртуальный коммутатор — это виртуальный коммутатор, который напрямую подключен к сетевому адаптеру на узле контейнера.
Сеть "nat" — это сеть по умолчанию для контейнеров под управлением Windows. Все контейнеры, которые работают под управлением Windows без каких-либо флагов или аргументов, использующихся для реализации конкретной сетевой конфигурации, будут подключены к сети "nat" по умолчанию и им будет автоматически присвоен IP-адрес из диапазона IP-адресов внутреннего префикса сети "nat". Для "nat" по умолчанию используется следующий внутренний префикс IP-адреса: 172.16.0.0/16.
Управление сетью контейнера с помощью сетевой службы узлов
Сетевая служба узлов (HNS) и вычислительная служба узлов (HCS) совместно используются для создания контейнеров и подключения конечных точек к сети. Вы можете взаимодействовать с HNS с помощью вспомогательного модуля PowerShell для HNS.
Создание сети
- Служба HNS создает виртуальный коммутатор Hyper-V для каждой сети
- Служба HNS создает преобразование сетевых адресов (NAT) и пулы IP-адресов по мере необходимости
Создание конечных точек
- Служба HNS создает пространство имен сети для каждой конечной точки контейнера
- Служба HNS/HCS размещает сетевой адаптер виртуальной машины в пространстве имен сети
- Служба HNS создает порты виртуального коммутатора
- Служба HNS назначает конечной точке IP-адрес, сведения DNS, маршруты и т. д. (в зависимости от сетевого режима)
Создание политики
- Для сети преобразования сетевых адресов (NAT) по умолчанию HNS создает правила перенаправления портов WinNAT и сопоставления с соответствующими правилами разрешения брандмауэра Windows.
- Для всех остальных сетей HNS использует платформу виртуальной фильтрации (VFP) для создания политик, включая балансировку нагрузки, списки управления доступом и инкапсуляцию. Дополнительные сведения об API HNS и схеме см. в статье API службы HCN для виртуальных машин и контейнеров.
Неподдерживаемые функции и сетевые параметры
В настоящее время в Windows не поддерживаются следующие параметры сети:
- Начиная с Windows Server 2022 контейнеры Windows, подключенные к сетям l2bridge, поддерживают стек IPv6. Однако контейнеры Windows, подключенные к сети NAT и наложения, не поддерживают обмен данными по стеку IPv6.
- Обмен данными между зашифрованными контейнерами по протоколу IPsec.
- Сеть в режиме узла .
- Сеть в виртуализированной инфраструктуре Azure с помощью прозрачного сетевого драйвера.
Get-Help | Неподдерживаемый параметр |
---|---|
docker run |
--ip6 , --dns-option |
docker network create |
--aux-address , --internal , --ip-range , --ipam-driver , --ipam-opt , --ipv6 , --opt encrypted |