Ondersteuning voor meerdere subnetten in Host Networking Service
Van toepassing op: Windows Server 2025, Windows Server 2022
Het gebruik van meerdere subnetten per netwerk wordt nu ondersteund in HNS (Host Networking Service) voor Windows-containers. Voorheen beperkte HNS de Kubernetes-containereindpuntconfiguraties tot het gebruik van alleen de voorvoegsellengte van het onderliggende subnet. HNS is verbeterd, zodat u meer beperkende subnetten kunt gebruiken, zoals subnetten met een langere lengte voorvoegsel, evenals meerdere subnetten per Windows-werkknooppunt. De eerste CNI (Container Networking Interface) die deze functionaliteit kan gebruiken, is Calico voor Windows. Calico-netwerkbeleid is een opensource-netwerk- en netwerkbeveiligingsoplossing die is opgericht door Tigera.
U kunt meerdere subnetten in HNS alleen gebruiken voor l2bridge, l2tunnelen overlay netwerkdrivers. Deze netwerkstuurprogramma's kunnen meerdere subnetten beschikbaar maken en vervolgens toestaan dat elk eindpunt verbinding kan maken met een van deze subnetten.
HNS en de Host Compute Service (HCS) werken samen om containers te maken en eindpunten aan een netwerk te koppelen. U kunt met HNS communiceren met behulp van de HNS Powershell Helper-module.
Calico-vereisten
Voor ondersteuning voor meerdere subnetten voor de Calico CNI moet het subnet worden onderverdeeld in kleinere IP-blokken. Alle IP-blokken moeten dezelfde gateway delen, maar elk IP-blok kan een eigen afzonderlijk broadcastdomein hebben. Om de IPV4-toewijzing zo efficiënt mogelijk te maximaliseren, vereist Calico het maken van zeer kleine IP-blokken (zo klein als één blok = vier IP-adressen), naast het instellen van zeer kleine voorvoegsels op containereindpunten (zo klein als /32).
Een volledige implementatie van Calico IP Address Management (IPAM) werkt als volgt:
De IPAM-functie van Calico is ontworpen om IP-adressen toe te wijzen aan workloads op aanvraag. Calico ondersteunt ook meerdere IP-adresgroepen voor beheergroepering. Bij het configureren van een toewijzing voor een bepaalde workload kan de set toegestane pools worden beperkt door de configuratie, waardoor verschillende gebruiksvoorbeelden mogelijk zijn. Volg de onderstaande richtlijnen voor verschillende gebruiksvoorbeelden:
- Gebruik meerdere niet-aaneengesloten pools om de capaciteit te verhogen.
- Voor l2bridge netwerken binnen een rek configureert u een IP-adresgroep per rek waar de hosts binnen een rek alleen vanuit een bepaalde pool kunnen toewijzen.
- Gebruik een IP-adresgroep per stacklaag waarbij front-endpods IP-adressen krijgen van een front-endpool (die openbaar kan zijn), maar back-endpods (mogelijk op dezelfde host) IP-adressen ontvangen uit een ander bereik. Hierdoor kan Calico aansluiten op agressieve vereisten voor netwerkpartitionering (zoals mogelijk nodig is om te werken met verouderde firewalls).
- Gebruik zeer kleine micropools, één voor elke laag van een stack. Omdat deze pools zo klein zijn, moeten ze voor elke host workloads van meerdere pools ondersteunen.
IP-adressen worden altijd toegewezen vanuit blokken en deze blokken kunnen affine zijn voor een bepaalde host. Een host probeert altijd IP-adressen toe te wijzen vanuit een van de eigen affineblokken als er ruimte is (en alleen als het blok afkomstig is van een toegestane pool voor de opgegeven workload). Als geen van de bestaande blokken van de host ruimte heeft, probeert de host een nieuw blok van een toegestane pool te claimen. Als er geen lege blokken beschikbaar zijn, zal de host een IP lenen van een blok in een toegestane groep met beschikbare vrije ruimte, zelfs als dat blok affine is voor een andere host.
Calico is afhankelijk van de langste voorvoegselroutering ter ondersteuning van aggregatie. Elke host maakt routes bekend voor alle affine blokken en maakt /32-routes bekend voor alle IP-adressen die het heeft overgenomen. Omdat een /32-route specifieker is, gebruiken externe hosts die moeten doorsturen naar de /32 de /32-route in plaats van de bredere /26-route naar de host met het affineblok.
Aangezien Calico een gerouteerd L3-netwerk is, is het de moeite waard om te vermelden dat de /26 routes niet bedoeld zijn om subnetten te zijn. Er is bijvoorbeeld geen netwerk- of broadcastadres; en de adressen '0' en '255' van een blok worden gebruikt als normale IP-adressen.
Vereisten voor Calico HNS-gegevensvlak
Er zijn verschillende Calico-connectiviteits- en beleidsvereisten voor het inschakelen van meerdere subnetten in HNS:
- Alle workloads op dezelfde host moeten verbinding met elkaar en externe pods hebben.
- Alle pakketpaden tussen pods moeten het volgende hebben, ongeacht of de afzender en ontvanger zich op dezelfde host bevinden en of ze rechtstreeks of via het IP-adres van het servicecluster toegang hebben tot elkaar:
- Er moeten uitgaande en binnenkomende toegangsbeheerlijst (ACL) en beleidsregels worden toegepast.
- Zowel het uitgaand beleid van de verzendende pod als het toegangsbeleid van de ontvangende pod moet het verkeer toestaan.
- Alle calico-geprogrammeerde ACL-regels moeten pod-IP's kunnen bekijken.
- Hosts en pods moeten elkaar kunnen bereiken en pods op andere hosts kunnen bereiken via routes die via het Border Gateway Protocol (BGP) zijn geleerd.
Meerdere IP-blokken per host, aan de hand van de vereisten
Raadpleeg de volgende vereisten om meerdere IP-blokken per host te ondersteunen:
- Voor een bepaalde ip-adresgroep moet het gegevensvlak toestaan dat pods worden toegevoegd met IP-adressen van verschillende, niet-aaneengesloten IP-blokken. De IP-groep kan bijvoorbeeld 10.0.0.0/16 zijn, maar een host kan een paar willekeurige blokken claimen: 10.0.123.0/26 en 10.0.200.0/26.
- De pool en de grootte van de blokken hoeven niet vooraf bekend te zijn bij de eerste toewijzing. Dit wordt ten zeerste aanbevolen.
- Andere blokken van dezelfde pool kunnen aanwezig zijn op andere hosts.
- Het algemene voorvoegsel van de verschillende blokken kan overlappen met het eigen IP-adres van de host.
Vereisten voor de ondersteuning van IP-leningen
Calico IPAM wijst IP-adressen toe om in blokken te hosten voor aggregatiedoeleinden. Als de IP-adresgroep vol is, kunnen knooppunten ook IP-adressen van een ander knooppuntblok lenen. In BGP-termen kondigt de kredietnemer vervolgens een specifiekere /32-route aan voor het geleende IP-adres en vervolgens verkeer voor dat IP-adres wordt doorgestuurd naar de lenende host.
Windows-knooppunten bieden geen ondersteuning voor dit mechanisme voor lenen. Ze lenen GEEN IP-adressen, zelfs niet als de IP-adresgroep vol is en ze markeren hun blokken, zodat Linux-knooppunten er ook niet van kunnen lenen.
Vereisten voor de ondersteuning van micropools
Als u micropools wilt gebruiken, wordt de vereiste voor het reserveren van vier IP-adressen per blok verwijderd. In het micropoolgebruik worden zeer kleine groepen en zeer kleine blokken gebruikt, dus vier IP-adressen per blok verspillen de meeste IP-adressen. U kunt een klein aantal gereserveerde IP-adressen per host of per pool kunnen vereisen. Een best practice is om alle laag 2 ondersteuningsbeperkingen te laten opheffen (er moet bijvoorbeeld geen ondersteuning zijn voor broadcast en geen gereserveerde IP-adressen).
Een subnet en een IP-subnet maken met behulp van PowerShell
Voordat u verdergaat, moet u ervoor zorgen dat de HNS.V2.psm1-module is geïnstalleerd vanuit de HNS PowerShell-galerie.
In de volgende stappen wordt uitgelegd hoe u een subnet en een IP-subnet maakt met behulp van voorbeelden.
Als u am l2bridge netwerk wilt maken met één subnet van 192.168.0.0/16 dat een 192.168.1.0/24 IP-subnet en een 192.168.2.0/24 IP-subnet bevat, voert u de volgende opdracht uit:
$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})
Voer de volgende opdracht uit om een nieuw subnet 172.16.0.0/16 toe te voegen dat een 172.16.1.0/16 IP-subnet bevat aan het l2bridge-netwerk:
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"})
Als u een nieuw 172.16.2.0/24 IP-subnet wilt toevoegen aan het subnet 172.16.0.0/16, voert u de volgende opdracht uit:
New-HnsIPSubnet -NetworkID $net1.ID -SubnetID $net2.Subnets[1].ID -IPSubnets @{"IpAddressPrefix"="172.16.2.0/24";"Flags"=0}
Gebruik de volgende stappen om de IP-subnetten te verwijderen:
Voer de volgende opdracht uit om het IP-subnet 172.16.2.0/24 te verwijderen:
$net2 = Get-HnsNetwork -ID $net1.ID Remove-HnsIpSubnet -NetworkID $net1.ID -SubnetID $net2.Subnets[1].ID -IPSubnets @{"ID"=$net2.Subnets[1].IPSubnets[1].ID}
Voer de volgende opdracht uit om het subnet 172.16.0.0/16 te verwijderen:
Remove-HnsSubnet -NetworkID $net1.ID -Subnets @{"ID"=$net2.Subnets[1].ID}