Conceitos de rede para contêineres do Windows

Concluído

O processador em um computador Windows padrão tem um modo kernel e um modo de usuário. Os componentes principais do sistema operacional e a maioria dos drivers de dispositivo são executados no modo kernel e os aplicativos são executados no modo de usuário. Quando você implementa contêineres em seu computador, cada contêiner cria um ambiente leve e isolado para executar aplicativos no sistema operacional host. O contêiner compartilha a maior parte do kernel do sistema operacional host para acesso ao sistema de arquivos e ao registro.

Os contêineres do Windows precisam de um sistema operacional de contêiner. O contêiner depende do kernel do sistema operacional para gerenciar serviços como sistema de arquivos, rede, agendamento de processos e gerenciamento de memória. O sistema operacional contêiner é o sistema operacional que faz parte do tempo de execução empacotado. Você pode usar diferentes versões do Windows com seus contêineres para habilitar o acesso a recursos específicos do sistema operacional ou outro software necessário.

Isolamento e segurança da rede

Os contêineres do Windows oferecem suporte a dois tipos de isolamento de tempo de execução: Process e Hyper-V. A principal diferença é a extensão do isolamento criado entre o contêiner, o sistema operacional do host e os outros contêineres no host.

O isolamento do processo é a abordagem mais comum. Várias instâncias de contêiner em execução no mesmo host obtêm isolamento por meio das configurações de namespace e controle de recursos, juntamente com outras funções de isolamento de processo.

  • Cada contêiner compartilha o mesmo kernel com o sistema operacional host e outros contêineres no host.
  • Cada contêiner tem um adaptador de rede virtual que se conecta a um comutador virtual.
  • Cada ponto de extremidade de contêiner é colocado em seu próprio namespace de rede. O namespace de rede padrão é o local do adaptador de rede virtual do host e da pilha de rede do host.

O isolamento do Hyper-V oferece segurança aprimorada e compatibilidade mais ampla entre o host e os contêineres. Várias instâncias de contêiner são executadas no mesmo host, mas cada contêiner é executado em uma máquina virtual otimizada. A máquina virtual fornece isolamento no nível de hardware entre cada contêiner e o host do contêiner.

  • Cada contêiner tem essencialmente seu próprio kernel.
  • Para impor o isolamento de rede entre os contêineres no host, um namespace de rede é criado para cada contêiner.
  • Os contêineres são executados sob isolamento Hyper-V no qual o adaptador de rede virtual para o contêiner está instalado. Os contêineres do Windows Server usam um adaptador de rede virtual de host para se conectar ao comutador virtual. O isolamento do Hyper-V usa um adaptador de rede de máquina virtual sintético (não exposto à máquina virtual do utilitário) para se conectar ao comutador virtual.

Diagram showing how the virtual machine provides hardware-level isolation between each container and the container host.

Gerenciamento de rede com o Serviço de Rede Host (HNS)

O Windows usa o Host Networking Service (HNS) e o Host Compute Service (HCS) para criar contêineres e anexar pontos de extremidade à rede.

  • Rede: o HNS cria um comutador virtual Hyper-V para cada rede e o HNS cria os pools NAT e IP necessários.
  • Pontos de extremidade: o HNS cria o namespace de rede para cada ponto de extremidade de contêiner e o HNS/HCS adiciona o adaptador de rede virtual ao namespace. O HNS cria portas de comutador virtual. O HNS atribui o endereço IP, as informações do Sistema de Nomes de Domínio (DNS), as rotas, etc., ao ponto de extremidade de acordo com o modo de driver de rede configurado.
  • Políticas: Para a rede NAT padrão, o HNS cria as regras e mapeamentos de encaminhamento de porta WinNAT com as regras ALLOW do Firewall do Windows correspondentes. Para todas as outras redes, o HNS usa a Plataforma de Filtragem Virtual (VFP) para criar políticas para balanceamento de carga, ACLs e encapsulamento.

Interação com o firewall

Dependendo da configuração do contêiner e do tipo de driver de rede, as ACLs de porta são impostas por uma combinação do Firewall do Windows e da Plataforma de Filtragem Virtual (VFP) do Azure. Os valores a seguir usam o firewall dos hosts Windows (habilitado com namespaces de rede) e o VFP:

  • Saída padrão: PERMITIR TUDO.
  • Default Inbound: ALLOW ALL (TCP, UDP, ICMP, IGMP) tráfego de rede não solicitado. NEGAR TODO o outro tráfego de rede que não seja desses protocolos.

Drivers de rede

O Windows suporta cinco drivers ou modos de rede diferentes para contêineres do Docker: NAT, Transparent, Overlay, L2Bridge e L2Tunnel. Além da rede NAT padrão criada pelo Docker no Windows, você também pode definir redes de contêiner personalizadas usando o comando da CLI docker network create do Docker.

A tabela a seguir resume os tipos de driver de rede disponíveis para contêineres do Docker no Windows. Escolha o driver de rede que satisfaça os requisitos de sua infraestrutura de rede física e configuração de host (nó único ou múltiplo).

Controlador de rede Utilizações típicas Contêiner a contêiner (nó único) Contêiner para externo (nó único + vários nós) Contêiner a contêiner (vários nós)
NAT (padrão) Bom para desenvolvedores Mesma sub-rede: conexão em ponte através do comutador virtual Hyper-V

Sub-rede cruzada: Não suportado (apenas um prefixo interno NAT)
Roteado através do adaptador de rede virtual de gerenciamento (vinculado ao WinNAT) Não suportado diretamente: requer a exposição de portas através do host
Transparente Bom para desenvolvedores ou pequenas implantações Mesma sub-rede: conexão em ponte através do comutador virtual Hyper-V

Sub-rede cruzada: Roteada através do host de contêiner.
Roteado através do host de contêiner com acesso direto ao adaptador de rede (físico) Roteado através do host de contêiner com acesso direto ao adaptador de rede (físico)
Sobreposição Bom para multi-nós; necessário para o Docker Swarm, disponível no Kubernetes Mesma sub-rede: conexão em ponte através do comutador virtual Hyper-V

Sub-rede cruzada: O tráfego de rede é encapsulado e roteado através do adaptador de rede virtual de gerenciamento.
Sem suporte direto - requer o segundo ponto de extremidade de contêiner conectado à rede NAT no Windows Server 2016 ou a regra NAT VFP no Windows Server 2019. Sub-rede Same/Cross: O tráfego de rede é encapsulado usando VXLAN e roteado através do adaptador de rede virtual de gerenciamento
L2Bridge [en] Usado para Kubernetes e Microsoft Software Designed Network (SDN) Mesma sub-rede: conexão em ponte através do comutador virtual Hyper-V

Cross Subnet: Endereço MAC do contêiner reescrito na entrada e saída e roteado.
Endereço MAC do recipiente
reescrito em ingresso e saída Mesma sub-rede: conexão em ponte

Cross Subnet: roteado através do adaptador de rede virtual de gerenciamento no WSv1809 e superior
Túnel L2 Apenas Azure Sub-rede Same/Cross: Hair-fixned ao comutador virtual Hyper-V do host físico para onde a política é aplicada. O tráfego deve passar pelo gateway de rede virtual do Azure Sub-rede Same/Cross: Hair-fixned ao comutador virtual Hyper-V do host físico para onde a política é aplicada

Opções avançadas de rede

Pode tirar partido de várias opções de controladores de rede para capacidades e funcionalidades específicas do Windows. Seguem-se alguns exemplos:

  • Acesse o Switch Embedded Teaming para redes de host de contêiner especificando vários adaptadores de rede para seu contêiner do Windows.
  • Defina o ID de VLAN de uma rede para configurar o isolamento de VLAN para quaisquer pontos de extremidade de contêiner que se conectem à rede.
  • Especifique a política OutboundNAT para uma rede para permitir o acesso do contêiner ao mundo exterior.

Para obter mais informações, consulte Opções avançadas de rede no Windows.