Compatibilidad con varias subredes en el servicio de redes de host

Se aplica a: Windows Server 2022

Ahora se admite el uso de varias subredes por red en el servicio de redes de host (HNS) para contenedores de Windows. Anteriormente, las configuraciones de punto de conexión de contenedor de Kubernetes restringidas de HNS solo usan la longitud del prefijo de la subred subyacente. HNS se ha mejorado para que pueda usar subredes más restrictivas, como subredes con una longitud de prefijo más larga, así como varias subredes por nodo de trabajo de Windows. La primera interfaz de red de contenedor (CNI) que puede esta funcionalidad es Calico para Windows. Calico Network Policies es una solución de seguridad de red y red de código abierto fundada por Tigera.

Puede usar varias subredes en HNS solo para los controladores de red l2bridge, l2tunnel y superposición . Estos controladores de red pueden exponer varias subredes y, a continuación, permitir que cada punto de conexión se enlace a una de estas subredes.

HNS y el servicio de proceso de host (HCS) funcionan conjuntamente para crear contenedores y adjuntar puntos de conexión a una red. Puede interactuar con HNS mediante el módulo auxiliar de PowerShell de HNS.

Requisitos de Calico

La compatibilidad con varias subredes para el CNI de Calico requiere la subdividir la subred en bloques IP más pequeños. Todos los bloques IP deben compartir la misma puerta de enlace, pero cada bloque IP puede tener su propio dominio de difusión independiente. Para maximizar la asignación de IPV4 para que sea lo más eficaz posible, Calico requiere crear bloques IP muy pequeños (tan pequeños como un bloque = cuatro direcciones IP), además de establecer prefijos muy pequeños en los puntos de conexión de contenedor (tan pequeños como /32).

Una implementación completa de Calico Administración de direcciones IP (IPAM) funciona de la siguiente manera:

La función IPAM de Calico está diseñada para asignar direcciones IP a cargas de trabajo a petición. Calico también admite varios grupos de direcciones IP para la agrupación administrativa. Al configurar una asignación para una carga de trabajo determinada, el conjunto de grupos permitidos puede estar limitado por la configuración, lo que permite varios casos de uso. Siga las instrucciones siguientes para diferentes casos de uso:

  • Use varios grupos separados para aumentar la capacidad.
  • Para las redes l2bridge dentro de un bastidor, configure un grupo de DIRECCIONES IP por bastidor donde los hosts de un bastidor solo pueden asignar desde un grupo determinado.
  • Use un grupo de DIRECCIONES IP por nivel de pila donde los pods front-end obtienen direcciones IP de un grupo de servidores front-end (que podría ser público), pero los pods back-end (potencialmente en el mismo host) reciben direcciones IP de un intervalo diferente. Esto permite que Calico se ajuste a los requisitos agresivos de creación de particiones de red (según sea necesario para trabajar con firewalls heredados).
  • Use micro grupos muy pequeños, uno para cada nivel de una pila. Dado que estos grupos son tan pequeños, requieren que cada host admita cargas de trabajo de varios grupos.

Las direcciones IP siempre se asignan desde bloques y esos bloques pueden ser afín a un host determinado. Un host siempre intentará asignar direcciones IP desde uno de sus propios bloques affine si hay espacio (y solo si el bloque procede de un grupo permitido para la carga de trabajo determinada). Si ninguno de los bloques existentes del host tiene espacio, el host intentará reclamar un nuevo bloque de un grupo permitido. Si no hay bloques vacíos disponibles, el host tomará prestado una dirección IP de cualquier bloque de un grupo permitido que tenga espacio libre disponible, incluso si ese bloque es afín a otro host.

Calico se basa en el enrutamiento de coincidencias de prefijo más largo para admitir la agregación. Cada host anuncia rutas para todos sus bloques affine y anuncia /32 rutas para las direcciones IP que ha prestado. Dado que una ruta /32 es más específica, los hosts remotos que necesitan reenviar a /32 usarán la ruta /32 en lugar de la ruta /26 más amplia al host con el bloque affine.

Puesto que Calico es una red L3 enrutada, vale la pena señalar que las rutas /26 no están pensadas para ser subredes. Por ejemplo, no hay ninguna dirección de red o difusión; y las direcciones "0" y "255" de un bloque se usan como direcciones IP normales.

Requisitos del plano de datos HNS de Calico

Hay varios requisitos de conectividad y directivas de Calico para habilitar varias subredes en HNS:

  • Todas las cargas de trabajo del mismo host deben tener conectividad entre sí y para pods remotos.
  • Todas las rutas de acceso de paquetes entre pods deben tener lo siguiente tanto si el remitente como el receptor se encuentran en el mismo host y si acceden directamente o por la dirección IP del clúster de servicios:
    • Las directivas de salida y entrada de la lista de control de acceso (ACL) deben aplicarse.
    • Tanto la directiva de salida del pod de envío como la directiva de entrada del pod receptor deben permitir el tráfico.
    • Todas las reglas de ACL programadas por Calico deben poder ver las direcciones IP del pod.
  • Los hosts y pods deben poder comunicarse entre sí y llegar a pods en otros hosts a través de rutas aprendidas a través del Protocolo de puerta de enlace de borde (BGP).

Varios bloques ip por host

Para admitir varios bloques ip por host, revise los siguientes requisitos:

  • En el caso de un único grupo de DIRECCIONES IP determinado, el plano de datos debe permitir que los pods se agreguen con direcciones IP de diferentes bloques IP separados. Por ejemplo, el grupo de DIRECCIONES IP puede ser 10.0.0.0/16, pero un host puede reclamar un par de bloques aleatorios: 10.0.123.0/26 y 10.0.200.0/26.
  • No es necesario conocer el grupo y el tamaño de los bloques con antelación de la primera asignación. Esto es altamente recomendable.
  • Otros bloques del mismo grupo pueden estar presentes en otros hosts.
  • El prefijo común de los distintos bloques puede superponerse con la propia dirección IP del host.

Requisitos para apoyar los préstamos de P.I.

Calico IPAM asigna direcciones IP para hospedar en bloques con fines de agregación. Si el grupo de DIRECCIONES IP está lleno, los nodos también pueden tomar prestados direcciones IP del bloque de otro nodo. En términos BGP, el prestatario anuncia entonces una ruta más específica /32 para la DIRECCIÓN IP prestado y, a continuación, el tráfico de esa DIRECCIÓN IP se enruta al host de préstamo.

Los nodos de Windows no admiten este mecanismo de préstamo. No tomarán prestados direcciones IP incluso si el grupo de direcciones IP está lleno y marcan sus bloques para que los nodos de Linux tampoco los tome prestados.

Requisitos para admitir micropools

Para usar micropools, se quita el requisito de reservar cuatro direcciones IP por bloque. En el caso de uso de micropool, se usan grupos muy pequeños y bloques muy pequeños, por lo que cuatro direcciones IP por bloque desperdician la mayoría de las direcciones IP. Puede requerir un pequeño número de direcciones IP reservadas por host o por grupo. Un procedimiento recomendado consiste en que se levanten todas las restricciones de compatibilidad de nivel 2 (por ejemplo, no debe haber compatibilidad con la difusión y no hay direcciones IP reservadas).

Creación de una subred y una subred IP mediante PowerShell

Antes de continuar, asegúrese de que tiene instalado el módulo HNS.V2.psm1 desde la galería de PowerShell de HNS.

En los pasos siguientes se explica cómo crear una subred y una subred IP mediante ejemplos.

  1. Para crear una red am l2bridge con una subred IP 192.168.0.0/16 que contenga una subred IP 192.168.1.0/24 y una subred IP 192.168.2.0/24, ejecute el siguiente 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 agregar una nueva subred 172.16.0.0/16 que contiene una subred IP 172.16.1.0/16 a la red l2bridge , ejecute el siguiente 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 agregar una nueva subred IP 172.16.2.0/24 a la subred 172.16.0.0/16, ejecute el siguiente comando:

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

Para quitar las subredes IP, siga estos pasos:

  1. Para quitar la subred IP 172.16.2.0/24, ejecute el siguiente 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 quitar la subred 172.16.0.0/16, ejecute el siguiente comando:

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