Azure CNI-netwerken configureren voor dynamische toewijzing van IP-adressen en verbeterde subnetondersteuning in Azure Kubernetes Service (AKS)

Een nadeel van de traditionele CNI is de uitputting van IP-adressen van pods naarmate het AKS-cluster groeit, wat ertoe leidt dat het hele cluster opnieuw moet worden opgebouwd in een groter subnet. Met de nieuwe dynamische IP-toewijzingsmogelijkheid in Azure CNI wordt dit probleem opgelost door pod-IP-adressen toe te wijzen vanuit een subnet dat gescheiden is van het subnet dat als host fungeert voor het AKS-cluster.

Het biedt de volgende voordelen:

  • Beter IP-gebruik: IP-adressen worden dynamisch toegewezen aan clusterpods vanuit het subnet Pods. Dit leidt tot een beter gebruik van IP-adressen in het cluster in vergelijking met de traditionele CNI-oplossing, die statische toewijzing van IP-adressen voor elk knooppunt uitvoert.
  • Schaalbaar en flexibel: subnetten van knooppunten en pods kunnen onafhankelijk worden geschaald. Eén podsubnet kan worden gedeeld over meerdere knooppuntgroepen van een cluster of over meerdere AKS-clusters die in hetzelfde VNet zijn geïmplementeerd. U kunt ook een afzonderlijk podsubnet configureren voor een knooppuntgroep.
  • Hoge prestaties: omdat pod IP's van virtuele netwerken worden toegewezen, hebben ze directe connectiviteit met andere clusterpods en resources in het VNet. De oplossing ondersteunt zeer grote clusters zonder dat de prestaties afnemen.
  • Afzonderlijk VNet-beleid voor pods: aangezien pods een afzonderlijk subnet hebben, kunt u afzonderlijke VNet-beleidsregels configureren die afwijken van knooppuntbeleid. Dit maakt veel nuttige scenario's mogelijk, zoals het toestaan van internetverbinding alleen voor pods en niet voor knooppunten, het herstellen van het bron-IP-adres voor pods in een knooppuntgroep met behulp van een Azure NAT-gateway en het gebruik van NSG's om verkeer tussen knooppuntgroepen te filteren.
  • Kubernetes-netwerkbeleid: Zowel het Azure-netwerkbeleid als Calico werken met deze nieuwe oplossing.

In dit artikel leest u hoe u Azure CNI-netwerken gebruikt voor dynamische toewijzing van IP-adressen en verbeterde subnetondersteuning in AKS.

Vereisten

Notitie

Wanneer u dynamische toewijzing van IP-adressen gebruikt, wordt het beschikbaar maken van een toepassing als een Private Link-service met behulp van een Kubernetes Load Balancer-service niet ondersteund.

  • Bekijk de vereisten voor het configureren van eenvoudige Azure CNI-netwerken in AKS, aangezien dezelfde vereisten van toepassing zijn op dit artikel.

  • Controleer de implementatieparameters voor het configureren van eenvoudige Azure CNI-netwerken in AKS, omdat dezelfde parameters van toepassing zijn.

  • AKS Engine- en DIY-clusters worden niet ondersteund.

  • Azure CLI-versie 2.37.0 of hoger.

  • Als u een bestaand cluster hebt, moet u Container Insights inschakelen voor het bewaken van het IP-subnetgebruik. U kunt Container Insights inschakelen met behulp van de az aks enable-addons opdracht, zoals wordt weergegeven in het volgende voorbeeld:

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

IP-adressering plannen

Het plannen van uw IP-adressering is veel eenvoudiger met deze functie. Omdat de knooppunten en pods onafhankelijk van elkaar worden geschaald, kunnen hun adresruimten ook afzonderlijk worden gepland. Aangezien podsubnetten kunnen worden geconfigureerd voor de granulariteit van een knooppuntgroep, kunt u altijd een nieuw subnet toevoegen wanneer u een knooppuntgroep toevoegt. De systeempods in een cluster-/knooppuntgroep ontvangen ook IP-adressen van het subnet van de pod, dus dit gedrag moet worden verwerkt.

IP-adressen worden toegewezen aan knooppunten in batches van 16. Ip-toewijzing van podsubnet moet worden gepland met minimaal 16 IP-adressen per knooppunt in het cluster; knooppunten vragen 16 IP-adressen aan bij het opstarten en vragen een andere batch van 16 keer wanneer er <8 IP-adressen niet zijn toegewezen in hun toewijzing.

De planning van IP-adressen voor Kubernetes-services en Docker-brug blijft ongewijzigd.

Maximum aantal pods per knooppunt in een cluster met dynamische toewijzing van IP-adressen en verbeterde subnetondersteuning

De pods per knooppuntwaarde bij het gebruik van Azure CNI met dynamische toewijzing van IP-adressen verschillen enigszins van het traditionele CNI-gedrag:

CNI Standaardinstelling Configureerbaar bij implementatie
Traditionele Azure CNI 30 Ja (maximaal 250)
Azure CNI met dynamische toewijzing van IP-adressen 250 Ja (maximaal 250)

Alle andere richtlijnen met betrekking tot het configureren van de maximumpods per knooppunt blijven hetzelfde.

Implementatieparameters

De implementatieparametersvoor het configureren van eenvoudige Azure CNI-netwerken in AKS zijn allemaal geldig, met twee uitzonderingen:

  • De subnetparameter verwijst nu naar het subnet dat is gerelateerd aan de knooppunten van het cluster.
  • Er wordt een extra subnet voor parameterpods gebruikt om het subnet op te geven waarvan de IP-adressen dynamisch worden toegewezen aan pods.

Netwerken configureren met dynamische toewijzing van IP-adressen en verbeterde subnetondersteuning - Azure CLI

Het gebruik van dynamische toewijzing van IP-adressen en verbeterde subnetondersteuning in uw cluster is vergelijkbaar met de standaardmethode voor het configureren van een Azure CNI-cluster. In het volgende voorbeeld wordt uitgelegd hoe u een nieuw virtueel netwerk maakt met een subnet voor knooppunten en een subnet voor pods en het maken van een cluster dat gebruikmaakt van Azure CNI met dynamische toewijzing van IP-adressen en verbeterde subnetondersteuning. Zorg ervoor dat u variabelen, zoals $subscription uw eigen waarden, vervangt.

Maak het virtuele netwerk met twee subnetten.

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

Maak het cluster, verwijst naar het subnet van het knooppunt met behulp van --vnet-subnet-id het podsubnet en het inschakelen --pod-subnet-id van de bewakingsinvoegtoepassing.

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring

Knooppuntgroep toevoegen

Wanneer u een knooppuntgroep toevoegt, verwijst u naar het subnet van het knooppunt met behulp van --vnet-subnet-id het subnet van de pod en het subnet van de pod.--pod-subnet-id In het volgende voorbeeld worden twee nieuwe subnetten gemaakt waarnaar vervolgens wordt verwezen bij het maken van een nieuwe knooppuntgroep:

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

IP-subnetgebruik bewaken

Azure CNI biedt de mogelijkheid om het IP-subnetgebruik te bewaken. Volg de onderstaande stappen om bewaking van ip-subnetgebruik in te schakelen:

Het YAML-bestand ophalen

  1. Download of grep het bestand met de naam container-azm-ms-agentconfig.yaml van GitHub.

  2. Zoeken azure_subnet_ip_usage in integraties. Stel enabled in op true.

  3. Sla het bestand op.

De AKS-referenties ophalen

Stel de variabelen in voor abonnement, resourcegroep en cluster. Bekijk het volgende als voorbeelden:

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

De configuratie toepassen

  1. Open terminal in de map waarin het gedownloade bestand container-azm-ms-agentconfig.yaml is opgeslagen.

  2. Pas eerst de configuratie toe met behulp van de opdracht: kubectl apply -f container-azm-ms-agentconfig.yaml

  3. Hiermee wordt de pod opnieuw opgestart en na 5-10 minuten zijn de metrische gegevens zichtbaar.

  4. Als u de metrische gegevens op het cluster wilt weergeven, gaat u naar Werkmappen op de clusterpagina in Azure Portal en zoekt u de werkmap met de naam 'Ip-gebruik van subnet'. Uw weergave ziet er ongeveer als volgt uit:

    A diagram of the Azure portal's workbook blade is shown, and metrics for an AKS cluster's subnet IP usage are displayed.

Dynamische toewijzing van IP-adressen en uitgebreide subnetondersteuning veelgestelde vragen

  • Kan ik meerdere podsubnetten toewijzen aan een cluster/knooppuntgroep?

    Er kan slechts één subnet worden toegewezen aan een cluster of knooppuntgroep. Meerdere clusters of knooppuntgroepen kunnen echter één subnet delen.

  • Kan ik podsubnetten uit een ander VNet helemaal toewijzen?

    Nee, het podsubnet moet afkomstig zijn van hetzelfde VNet als het cluster.

  • Kunnen sommige knooppuntgroepen in een cluster gebruikmaken van de traditionele CNI, terwijl andere de nieuwe CNI gebruiken?

    Het hele cluster mag slechts één type CNI gebruiken.

Volgende stappen

Meer informatie over netwerken in AKS vindt u in de volgende artikelen: