Drivers de rede de contêiner do Windows
Aplica-se a: Windows Server 2022, Windows Server 2019 e Windows Server 2016
Além de aproveitar a rede 'nat' padrão' criada pelo Docker no Windows, os usuários podem definir redes de contêineres personalizados. As redes definidas pelo usuário podem ser criadas usando o comando da CLI docker network create -d <NETWORK DRIVER TYPE> <NAME>
do Docker. No Windows, os seguintes tipos de driver de rede estão disponíveis:
Driver de rede NAT
Os contêineres anexados a uma rede criada com o driver 'nat' serão conectados a um comutador interno do Hyper-V e receberão um endereço IP do prefixo IP especificado pelo usuário (--subnet
). Há suporte para o mapeamento/encaminhamento de porta do host de contêiner para os pontos de extremidade do contêiner.
Dica
É possível personalizar a sub-rede usada pela rede 'nat' padrão por meio da fixed-cidr
configuração no arquivo de configuração do daemon do Docker.
Observação
As redes NAT criadas no Windows Server 2019 (ou superior) não são mais persistidas após a reinicialização.
Criando uma rede NAT
Para criar uma nova rede NAT com a sub-rede 10.244.0.0/24
:
docker network create -d "nat" --subnet "10.244.0.0/24" my_nat
Driver de rede transparente
Os contêineres anexados a uma rede criada com o driver "transparente" serão conectados diretamente à rede física por meio de um comutador externo do Hyper-V. Os IPs da rede física podem ser atribuídos de forma estática (requer a opção --subnet
especificada pelo usuário) ou dinâmica usando um servidor DHCP.
Observação
Devido ao requisito a seguir, não há suporte para a conexão de hosts de contêiner em uma rede transparente em VMs do Azure.
Requer: quando esse modo é usado em um cenário de virtualização (o host do contêiner é uma VM), a falsificação de endereço MAC é necessária.
Criando uma rede transparente
Para criar uma nova rede transparente com sub-rede 10.244.0.0/24
, gateway 10.244.0.1
, servidor 10.244.0.7
DNS e ID 7
de VLAN:
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
Sobrepor driver de rede
Popularmente usados por orquestradores de contêineres, como Docker Swarm e Kubernetes, os contêineres anexados a uma rede de sobreposição podem se comunicar com outros contêineres anexados à mesma rede em vários hosts de contêiner. Cada rede de sobreposição é criada com sua própria sub-rede IP, definida por um prefixo de IP privado. O driver de rede de sobreposição usa o encapsulamento VXLAN para obter isolamento de tráfego de rede entre redes de contêiner de locatário e permite o reutilização de endereços IP em redes de sobreposição.
Requer: verifique se o ambiente atende a esses pré-requisitos necessários para criar redes de sobreposição.
Requer: no Windows Server 2019, isso requer KB4489899.
Requer: em Windows Server 2016, isso requer KB4015217.
Observação
No Windows Server 2019 e superior, as redes de sobreposição criadas pelo Docker Swarm aproveitam as regras NAT do VFP para conectividade de saída. Isso significa que um determinado contêiner recebe um endereço IP. Isso também significa que as ferramentas baseadas em ICMP, como ping
ou Test-NetConnection
, devem ser configuradas usando suas opções TCP/UDP em situações de depuração.
Criando uma rede de sobreposição
Para criar uma nova rede de sobreposição com sub-rede 10.244.0.0/24
, servidor 168.63.129.16
DNS e 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
Driver de rede L2bridge
Os contêineres anexados a uma rede criada com o driver 'l2bridge' serão conectados à rede física por meio de um comutador externo do Hyper-V. No l2bridge, o tráfego de rede de contêiner terá o mesmo endereço MAC que o host devido à operação de conversão de endereços de camada 2 (reespejagem mac) na entrada e saída. Em datacenters, isso ajuda a aliviar o estresse em comutadores que precisam aprender endereços MAC de contêineres de curta duração. As redes L2bridge podem ser configuradas de duas maneiras diferentes:
- A rede L2bridge é configurada com a mesma sub-rede IP que o host do contêiner
- A rede L2bridge está configurada com uma nova sub-rede IP personalizada
Na configuração 2, os usuários precisarão adicionar um ponto de extremidade no compartimento de rede do host que atua como um gateway e configurar recursos de roteamento para o prefixo designado.
Criando uma rede l2bridge
Para criar uma nova rede l2bridge com sub-rede 10.244.0.0/24
, gateway 10.244.0.1
, servidor 10.244.0.7
DNS e ID de VLAN 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
Dica
As redes L2bridge são altamente programáveis; Mais detalhes sobre como configurar o l2bridge podem ser encontrados aqui.
Driver de rede L2tunnel
A criação é idêntica à l2bridge, no entanto, esse driver só deve ser usado em um Microsoft Cloud Stack (Azure). A única diferença em relação ao l2bridge é que todo o tráfego de contêiner é enviado para o host de virtualização em que a política de SDN é aplicada, permitindo assim recursos como Grupos de Segurança de Rede do Azure para contêineres.
Topologias de rede e IPAM
A tabela a seguir mostra como a conectividade de rede é fornecida para conexões internas (contêiner para contêiner) e externas para cada driver de rede.
Modos de rede/drivers do Docker
Driver de rede do Docker para Windows | Usos típicos | Contêiner para contêiner (Nó único) | Contêiner para externo (nó único + diversos nós) | Contêiner para contêiner (diversos nós) |
---|---|---|---|---|
NAT (Padrão) | Bom para Desenvolvedores |
|
Roteada por meio de vNIC de Gerenciamento (associado a WinNAT) | Não tem suporte direto: requer a exposição de portas por meio do host |
Transparente | Bom para Desenvolvedores ou implantações pequenas |
|
Roteada por meio do host de contêiner com acesso direto ao adaptador de rede (físico) | Roteada por meio do host de contêiner com acesso direto ao adaptador de rede (físico) |
Sobreposição | Adequado para diversos nós, necessário para o Docker Swarm e disponível no Kubernetes |
|
Sem suporte direto: requer um segundo ponto de extremidade de contêiner anexado à rede NAT no Windows Server 2016 ou a regra de NAT VFP no Windows Server 2019. | Mesma/Sub-rede cruzada: o tráfego de rede é encapsulado usando VXLAN e roteado por meio da vNIC de Gerenciamento |
L2Bridge | Usado para Kubernetes e SDN Microsoft |
|
Contêiner do endereço MAC reescrito na entrada e na saída |
|
L2Tunnel | Somente no Azure | Mesma/Sub-rede cruzada: fixada a comutador virtual do Hyper-V do host físico a onde a política é aplicada | O tráfego deve passar pelo gateway de rede virtual do Azure | Mesma/Sub-rede cruzada: fixada a comutador virtual do Hyper-V do host físico a onde a política é aplicada |
IPAM
Endereços IP são alocados e atribuídos de modo diferente para cada driver de rede. O Windows usa o HNS (Serviço de Rede Host) para fornecer o IPAM ao driver nat e funciona com o modo de Swarm do Docker (KVS interno) para fornecer o IPAM para sobreposição. Todos os outros drivers de rede usam um IPAM externo.
Modo de rede/Driver | IPAM |
---|---|
NAT | Alocação e atribuição de IP dinâmico pelo HNS (Serviço de Rede de Host) do prefixo de sub-rede NAT interno |
Transparente | Alocação de IP estático ou dinâmico (usando o servidor DHCP externo) e atribuição de endereços IP no prefixo de rede do host do contêiner |
Sobreposição | Alocação dinâmica de IP do prefixos gerenciados do Docker Engine Swarm e atribuição por meio do HNS |
L2Bridge | Alocação e atribuição de IP dinâmico pelo HNS (Serviço de Rede de Host) do prefixo de sub-rede fornecido |
L2Tunnel | Somente o Azure - alocação de IP dinâmico e a atribuição de plug-in |
Descoberta de Serviços
A Descoberta de Serviços é compatível somente com determinados drivers de rede do Windows.
Nome do driver | Descoberta de Serviços local | Descoberta de Serviços global |
---|---|---|
nat | YES | SIM com Docker EE |
overlay | YES | SIM com Docker EE ou kube-dns |
transparent | Não | Não |
l2bridge | SIM com kube-dns | SIM com kube-dns |