Partilhar via


Suporte a várias sub-redes no Serviço de Rede Host

Aplica-se a: Windows Server 2025, Windows Server 2022

O uso de várias sub-redes por rede agora é suportado no Host Networking Service (HNS) para contêineres do Windows. Anteriormente, o HNS restringia as configurações dos endpoints dos contentores em Kubernetes para utilizar apenas o comprimento do prefixo da sub-rede subjacente. O HNS foi aprimorado para que você possa usar sub-redes mais restritivas, como sub-redes com um comprimento de prefixo maior, bem como várias sub-redes por nó de trabalho do Windows. O primeiro Container Networking Interface (CNI) que pode essa funcionalidade é o Calico para Windows. Calico Network Policies é uma solução de segurança de rede e rede de código aberto fundada por Tigera.

Você pode utilizar várias sub-redes no HNS apenas para drivers de rede de l2bridge, l2tunnele overlay. Esses drivers de rede podem expor várias sub-redes e, em seguida, permitir que cada ponto de extremidade se associe a uma dessas sub-redes.

HNS e o Host Compute Service (HCS) trabalham juntos para criar contentores e anexar endpoints a uma rede. Você pode interagir com o HNS usando o módulo auxiliar do HNS Powershell.

Requisitos do Calico

O suporte a várias sub-redes para o Calico CNI requer a subdivisão da sub-rede em blocos IP menores. Todos os blocos IP devem compartilhar o mesmo gateway, mas cada bloco IP pode ter seu próprio domínio de difusão separado. Para maximizar a alocação de IPV4 para ser o mais eficiente possível, o Calico requer a criação de blocos IP muito pequenos (tão pequenos quanto um bloco = quatro endereços IP), além de definir prefixos muito pequenos em pontos finais de contêiner (tão pequenos quanto /32).

Uma implementação completa do Calico IP Address Management (IPAM) funciona da seguinte forma:

A função IPAM do Calico foi projetada para alocar endereços IP para cargas de trabalho sob demanda. O Calico também suporta vários pools IP para agrupamento administrativo. Ao configurar uma alocação para uma carga de trabalho específica, o conjunto de pools permitidos pode ser limitado pela configuração, que permite vários casos de uso. Siga as diretrizes abaixo para diferentes casos de uso:

  • Use várias piscinas separadas para aumentar a capacidade.
  • Para redes l2bridge dentro de um rack, configure um pool IP por rack onde os hosts no rack só podem alocar de um pool específico.
  • Use um pool de endereços IP por nível de stack em que os pods de front-end obtêm IPs de um pool de front-end (que pode ser público), mas os pods de back-end (potencialmente no mesmo host) recebem IPs de um intervalo diferente. Isso permite que o Calico se adapte aos requisitos agressivos de particionamento de rede (como pode ser necessário para trabalhar com firewalls legados).
  • Utilize micropoços muito pequenos, um para cada camada de uma pilha. Como esses pools são tão pequenos, eles exigem que cada host ofereça suporte a cargas de trabalho de vários pools.

IPs são sempre alocados a partir de blocos, e esses blocos podem ser afins a um host específico. Um host sempre tentará atribuir IPs de um de seus próprios blocos afins se houver espaço (e somente se o bloco for de um pool permitido para a carga de trabalho dada). Se nenhum dos blocos existentes do host tiver espaço, o host tentará obter um novo bloco de um pool permitido. Se nenhum bloco vazio estiver disponível, o host usará um IP de qualquer bloco em um pool autorizado que tenha espaço livre disponível, mesmo que esse bloco esteja associado a outro host.

O Calico conta com o de roteamento de correspondência de prefixo mais longo para suportar a agregação. Cada host anuncia rotas para todos os seus blocos afins e anuncia rotas /32 para quaisquer IPs que tenha emprestado. Como uma rota /32 é mais específica, os hosts remotos que precisam encaminhar para o /32 usarão a rota /32 em vez da rota /26 mais ampla para o host com o bloco afim.

Como o Calico é uma rede L3 roteada, vale a pena notar que as rotas /26 não se destinam a ser sub-redes. Por exemplo, não há rede ou endereço de transmissão; e os endereços "0" e "255" de um bloco são usados como IPs normais.

Requisitos do plano de dados Calico HNS

Há vários requisitos de conectividade e política do Calico para habilitar várias sub-redes no HNS:

  • Todas as cargas de trabalho no mesmo host devem ter conectividade entre si e com pods remotos.
  • Todos os caminhos de pacotes entre pods devem ter o seguinte, independentemente de o remetente e o recetor estarem ou não colocalizados no mesmo host e se eles se acessarem diretamente ou pelo IP do cluster de serviços:
    • As políticas de saída e entrada da lista de controle de acesso (ACL) devem ser aplicadas.
    • Tanto a política de saída do pod de envio quanto a política de entrada do pod de recebimento devem permitir o tráfego.
    • Todas as regras de ACL programadas pelo Calico devem conseguir aceder aos IPs de pod.
  • Hosts e pods devem ser capazes de alcançar uns aos outros e alcançar pods em outros hosts em rotas aprendidas através do Border Gateway Protocol (BGP).

Vários blocos IP por requisitos de cada anfitrião

Para oferecer suporte a vários blocos IP por host, revise os seguintes requisitos:

  • Para um determinado pool de IP único, o plano de dados deve permitir que pods sejam adicionados com IPs de blocos IP diferentes e separados. Por exemplo, o pool de IP pode ser 10.0.0.0/16, mas um host pode reivindicar um par de blocos aleatórios: 10.0.123.0/26 e 10.0.200.0/26.
  • A piscina e o tamanho dos blocos não precisam ser conhecidos antes da primeira alocação. Isto é altamente recomendado.
  • Outros blocos do mesmo conjunto podem estar presentes noutros servidores.
  • O prefixo comum dos vários blocos pode sobrepor-se ao próprio endereço IP do anfitrião.

Requisitos para apoiar o empréstimo de propriedade intelectual

O Calico IPAM aloca IPs para hospedar em blocos para fins de agregação. Se o pool de IP estiver cheio, os nós também poderão emprestar IPs do bloco de outro nó. Em termos de BGP, o mutuário então anuncia uma rota /32 mais específica para o IP emprestado e, em seguida, o tráfego para esse IP é roteado para o host mutuário.

Os nós do Windows não suportam esse mecanismo de empréstimo. Eles não cedem IPs, mesmo que o pool de IPs esteja cheio, e marcam os seus blocos para que os nós Linux também não cedam deles.

Requisitos para dar suporte a micropools

Para usar micropools, o requisito de reservar quatro IPs por bloco é removido. No caso de uso do micropool, utilizam-se piscinas muito pequenas e blocos muito pequenos, então quatro endereços IP por bloco desperdiçam a maioria dos endereços IP. Você pode exigir um pequeno número de IPs reservados por host ou por pool. Uma boa prática é remover todas as restrições de suporte de camada 2 (por exemplo, não deve haver suporte para broadcast e não devem existir IPs reservados).

Criar uma sub-rede e uma sub-rede IP usando o PowerShell

Antes de continuar, certifique-se de ter o módulo HNS.V2.psm1 instalado a partir da galeria HNS PowerShell.

As etapas a seguir explicam como criar uma sub-rede e uma sub-rede IP usando exemplos.

  1. Para criar uma rede l2bridge com uma sub-rede 192.168.0.0/16 que contenha uma sub-rede IP 192.168.1.0/24 e uma sub-rede IP 192.168.2.0/24, execute o seguinte comando:

    $net1 = New-HnsNetwork -Type L2Bridge -Name Test1 -AddressPrefix "192.168.0.0/16" -Gateway "192.168.0.1" -Verbose -IPSubnets @(@{"IpAddressPrefix"="192.168.1.0/24";"Flags"=0},@{"IpAddressPrefix"="192.168.2.0/24";"Flags"=[IPSubnetFlags]::EnableBroadcast})
    
  2. Para adicionar uma nova sub-rede 172.16.0.0/16 que contenha uma sub-rede IP 172.16.1.0/16 à rede l2bridge, execute o seguinte comando:

    New-HnsSubnet -NetworkID $net1.ID -Subnets @{
        "IpAddressPrefix"="172.16.0.0/16";
        "Routes"=@(@{"NextHop"="172.16.0.1";"DestinationPrefix"="0.0.0.0"});
        "IpSubnets"=@(@{"IpAddressPrefix"="172.16.1.0/24"})
    
  3. Para adicionar uma nova sub-rede IP 172.16.2.0/24 à sub-rede 172.16.0.0/16, execute o seguinte comando:

    New-HnsIPSubnet -NetworkID $net1.ID -SubnetID $net2.Subnets[1].ID -IPSubnets @{"IpAddressPrefix"="172.16.2.0/24";"Flags"=0}
    

Para remover as sub-redes IP, use as seguintes etapas:

  1. Para remover a sub-rede IP 172.16.2.0/24, execute o seguinte comando:

       $net2 = Get-HnsNetwork -ID $net1.ID
       Remove-HnsIpSubnet -NetworkID $net1.ID -SubnetID $net2.Subnets[1].ID -IPSubnets @{"ID"=$net2.Subnets[1].IPSubnets[1].ID}
    
  2. Para remover a sub-rede 172.16.0.0/16, execute o seguinte comando:

    Remove-HnsSubnet -NetworkID $net1.ID -Subnets @{"ID"=$net2.Subnets[1].ID}