Compatibilidad con varias subredes en el servicio de redes de host
Se aplica a: Windows Server 2025, 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, HNS restringía las configuraciones de puntos de conexión de contenedores de Kubernetes para usar solo 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 utilizar varias subredes en HNS solo para los controladores de red l2bridge, l2tunnel y overlay. 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 computación del host (HCS) funcionan conjuntamente para crear contenedores y conectar puntos de conexión a una red. Puede interactuar con HNS mediante el módulo HNS PowerShell Helper.
Requisitos de Calico
La compatibilidad con varias subredes para el CNI de Calico requiere 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 la administración de direcciones IP (IPAM) de Calico 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:
- Utilice varios grupos disjuntos 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 realizar la asignación desde un grupo determinado.
- Use un grupo de IP por capa de pila donde los pods de front-end obtienen sus direcciones de un grupo de front-end (que podría ser público), pero los pods de back-end (potencialmente en el mismo host) reciben direcciones de otro intervalo. Esto permite que Calico se ajuste a los exigentes requisitos 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, este 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 de enrutamiento de coincidencias de prefijo más largo para admitir la agregación. Cada host anuncia rutas para todos sus bloques afines y anuncia rutas /32 para cualquier IP que haya tomado prestada. Como 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 afín.
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 con pods remotos.
- Todas las rutas de paquetes entre pods deben cumplir lo siguiente, ya sea que el remitente y el receptor estén ubicados en el mismo host o si se acceden mutuamente, ya sea de forma directa o a través de la 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 mediante rutas aprendidas por medio del Protocolo de puerta de enlace de borde (BGP).
Requisitos para varios bloques IP por host
Para admitir varios bloques ip por host, revise los siguientes requisitos:
- En el caso de un único grupo de IP determinado, el plano de datos debe permitir que los pods se agreguen con IP de diferentes bloques de IP disjuntos. 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 antes de la primera asignación. Esto es muy recomendable.
- Otros bloques del mismo conjunto pueden estar presentes en otros servidores.
- 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 propiedad intelectual.
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 prestadas direcciones IP del bloque de otro nodo. En términos de BGP, el prestatario anuncia entonces una ruta más específica /32 para la dirección IP prestada y, a continuación, el tráfico de esa dirección IP se enruta al host prestatario.
Los nodos de Windows no admiten este mecanismo de préstamo. No tomarán prestadas direcciones IP incluso si el grupo de direcciones IP está lleno, y marcan sus bloques para que los nodos de Linux tampoco los tomen prestados.
Requisitos para admitir microgrupos
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 eliminar todas las restricciones de compatibilidad de capa 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 de IP mediante PowerShell
Antes de continuar, asegúrese de tener instalado el módulo HNS.V2.psm1 desde la galería HNS de PowerShell.
En los pasos siguientes se explica cómo crear una subred y una subred IP mediante ejemplos.
Para crear una red l2bridge con una subred 192.168.0.0/16 que contiene 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})
Para agregar una nueva subred 172.16.0.0/16 que contenga 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"})
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:
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}
Para quitar la subred 172.16.0.0/16, ejecute el siguiente comando:
Remove-HnsSubnet -NetworkID $net1.ID -Subnets @{"ID"=$net2.Subnets[1].ID}