Konfigurieren von Azure CNI-Netzwerken für die dynamische Zuordnung von IP-Adressen und der erweiterten Subnetzunterstützung in Azure Kubernetes Service (AKS).

Ein Nachteil des herkömmlichen CNI liegt darin, dass die IP-Adressen für Pods mit zunehmender AKS-Clustergröße erschöpfen und Ihr gesamte Cluster in diesem Fall in einem größeren Subnetz neu erstellt werden muss. Die neue Azure CNI-Funktion zum dynamischen Zuordnen von IP-Adressen löst dieses Problem, indem IP-Adressen für Pods aus einem Subnetz zugeordnet werden, das von dem Subnetz getrennt ist, in dem der AKS-Cluster gehostet wird.

Dies hat folgende Vorteile:

  • Bessere Auslastung von IP-Adressen: IP-Adressen werden Clusterpods dynamisch aus dem Podsubnetz zugeordnet. Dies führt zu einer besseren Auslastung der IP-Adressen im Cluster im Vergleich zur herkömmlichen CNI-Lösung, bei der die IP-Adressen für jeden Knoten statisch zugeordnet werden.
  • Skalierbar und flexibel: Knoten- und Podsubnetze können unabhängig voneinander skaliert werden. Ein einzelnes Podsubnetz kann für mehrere Knotenpools eines Clusters oder mehrere AKS-Cluster im selben VNET freigegeben werden. Sie können auch ein separates Podsubnetz für einen Knotenpool konfigurieren.
  • Höchstleistung: Da Pods VNet-IP-Adressen zugewiesen sind, besteht eine direkte Verbindung zu anderen Clusterpods und -ressourcen im VNet. Die Lösung unterstützt selbst größte Cluster ohne Leistungseinbußen.
  • Separate VNET-Richtlinien für Pods: Da für Pods ein separates Subnetz besteht, können Sie auch separate VNET-Richtlinien konfigurieren, die von den Knotenrichtlinien abweichen. Das ermöglicht viele nützliche Anwendungsfälle wie die Beschränkung der Internetkonnektivität auf Pods statt auf Knoten, das Korrigieren der Quell-IP für Pods in einem Knotenpool mithilfe einer Azure NAT Gateway-Instanz und den Einsatz von Netzwerksicherheitsgruppen, um Datenverkehr zwischen Knotenpools zu filtern.
  • Netzwerkrichtlinien für Kubernetes: Sowohl die Azure-Netzwerkrichtlinien als auch Calico sind mit dieser neuen Lösung kompatibel.

Dieser Artikel demonstriert, wie Sie Azure CNI-Netzwerke für die dynamische Zuteilung von IP-Adressen und erweiterte Subnetzunterstützung in AKS verwenden.

Voraussetzungen

Hinweis

Wenn Sie dynamische Zuordnung von IP-Adressen verwenden, wird das Verfügbarmachen einer Anwendung als Private Link-Dienst mithilfe eines Kubernetes Load Balancer-Diensts nicht unterstützt.

  • Überprüfen Sie die Voraussetzungen für die Konfiguration grundlegender Azure CNI-Netzwerke in AKS, da die gleichen Voraussetzungen für diesen Artikel gelten.

  • Überprüfen Sie die Bereitstellungsparameter zum Konfigurieren grundlegender Azure CNI-Netzwerke in AKS, da dieselben Parameter gelten.

  • AKS-Engine-Cluster und selbst erstellte Cluster werden nicht unterstützt.

  • Azure CLI-Version 2.37.0 oder höher.

  • Wenn Sie über einen vorhandenen Cluster verfügen, müssen Sie Container Insights für die Überwachung der IP-Subnetznutzung aktivieren. Sie können Container Insights mithilfe des Befehls az aks enable-addons aktivieren, wie im folgenden Beispiel zu sehen:

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

Planen der IP-Adressierung

Die Planung Ihrer IP-Adressierung gestaltet sich mit diesem Feature viel einfacher. Da die Knoten und Pods unabhängig voneinander skaliert werden, können auch ihre Adressräume separat geplant werden. Da Podsubnetze auf die Granularität eines Knotenpools konfiguriert werden können, können Sie immer ein neues Subnetz hinzufügen, wenn Sie einen Knotenpool hinzufügen. Die Systempods in einem Cluster- bzw. Knotenpool erhalten die IP-Adressen ebenfalls aus dem Podsubnetz, sodass dieses Verhalten berücksichtigt werden muss.

IP-Adressen werden den Knoten in Batches von 16 zugewiesen. Die IP-Zuordnung für das Subnetz eines Pods sollte so geplant werden, dass mindestens 16 IP-Adressen pro Knoten im Cluster zur Verfügung stehen. Die Knoten fordern beim Start 16 IP-Adressen an und fordern jedes Mal, wenn in ihrem Kontingent noch <8 IP-Adressen frei sind, eine weitere Menge von 16 IP-Adressen an.

Die IP-Adressenplanung für Kubernetes-Dienste und Docker-Bridges bleibt unverändert.

Maximale Pods pro Knoten in einem Cluster mit dynamischer IP-Adressenzuordnung und erweiterter Subnetzunterstützung

Die Pods pro Knotenwerte bei Verwendung der Azure CNI mit dynamischer IP-Adressenzuordnung unterscheiden sich geringfügig vom herkömmlichen Verhalten der CNI:

CNI Standard Bei der Bereitstellung konfigurierbar
Herkömmliches Azure CNI 30 Ja (bis zu 250)
Azure CNI mit dynamischer IP-Adressenzuordnung 250 Ja (bis zu 250)

Davon abgesehen bleiben die Anleitungen zum Konfigurieren der maximalen Knoten pro Pool unverändert.

Bereitstellungsparameter

Die Bereitstellungsparameter für die Konfiguration grundlegender Azure CNI-Netzwerke in AKS sind alle gültig, mit zwei Ausnahmen:

  • Der Parameter subnet verweist jetzt auf das Subnetz für die Knoten des Clusters.
  • Zusätzlich wird der Parameter pod subnet verwendet, um das Subnetz anzugeben, dessen IP-Adressen den Pods dynamisch zugeordnet werden.

Konfigurieren von Netzwerken mit dynamischer IP-Adressenzuordnung und erweiterter Subnetzunterstützung – Azure CLI

Die Verwendung der dynamischen IP-Adressenzuordnung und der erweiterten Subnetzunterstützung in Ihrem Cluster ähnelt der Standardmethode der Azure CNI-Konfiguration für Cluster. Das folgende Beispiel veranschaulicht die Erstellung eines neuen virtuellen Netzwerks mit einem Subnetz für Knoten und einem weiteren Subnetz für Pods und die Erstellung eines Clusters, der das Azure CNI mit dynamischer IP-Adressenzuordnung und erweiterter Subnetzunterstützung verwendet. Ersetzen Sie Variablen wie $subscription durch eigene Werte.

Erstellen Sie das virtuelle Netzwerk mit zwei Subnetzen.

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 

Erstellen Sie den Cluster, indem Sie mithilfe von --vnet-subnet-id auf das Knotensubnetz und mithilfe von --pod-subnet-id auf das Podsubnetz verweisen und das Überwachungs-Add-On aktivieren.

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

Hinzufügen des Knotenpools

Verweisen Sie beim Hinzufügen des Knotenpools mithilfe von --vnet-subnet-id auf das Knotensubnetz und mithilfe von --pod-subnet-id auf das Podsubnetz. Im folgenden Beispiel werden zwei neue Subnetze erstellt, auf die dann bei der Erstellung eines neuen Knotenpools verwiesen wird:

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

Überwachen der Subnetz-IP-Nutzung

Azure CNI bietet die Möglichkeit, die Subnetz-IP-Nutzung zu überwachen. Führen Sie zum Aktivieren der Überwachung der Subnetz-IP-Nutzung die folgenden Schritte aus:

Abrufen der YAML-Datei

  1. Laden Sie die Datei (ggf. per Grep) mit dem Namen „container-azm-ms-agentconfig.yaml“ von GitHub herunter.

  2. Suchen Sie in Integrationen nach azure_subnet_ip_usage. Legen Sie enabled auf true fest.

  3. Speichern Sie die Datei .

Abrufen der AKS-Anmeldeinformationen

Legen Sie die Variablen für Abonnement, Ressourcengruppe und Cluster fest. Betrachten Sie die folgenden Beispiele:

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

Anwenden der Konfiguration

  1. Öffnen Sie das Terminal im Ordner, in dem die heruntergeladene Datei container-azm-ms-agentconfig.yaml gespeichert wurde.

  2. Wenden Sie zunächst die Konfiguration mithilfe des Befehls kubectl apply -f container-azm-ms-agentconfig.yaml an.

  3. Dadurch wird der Pod neu gestartet, und nach 5 bis 10 Minuten sind die Metriken sichtbar.

  4. Um die Metriken zum Cluster anzuzeigen, wechseln Sie auf der Seite „Cluster“ im Azure-Portal zu „Arbeitsmappen“, und suchen Sie nach der Arbeitsmappe mit dem Namen „Subnetz-IP-Nutzung“. Ihre Ansicht sieht in etwa so aus wie die folgende:

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

FAQ zur dynamischen IP-Adressenzuordnung und zur erweiterten Subnetzunterstützung

  • Kann ich mehrere Podsubnetze zu einem Cluster- bzw. Knotenpool hinzufügen?

    Einem Cluster oder Knotenpool kann nur ein Subnetz zugewiesen werden. Mehrere Cluster- oder Knotenpools können jedoch ein einzelnes Subnetz gemeinsam nutzen.

  • Kann ich Podsubnetze auch aus unterschiedlichen VNETs zuweisen?

    Nein, das Podsubnetz muss demselben VNet angehören wie der Cluster.

  • Können einige Knotenpools in einem Cluster das herkömmliche CNI, andere jedoch das neue CNI nutzen?

    Für den gesamten Cluster sollte nur eine CNI-Variante verwendet werden.

Nächste Schritte

Weitere Informationen zu Netzwerken in AKS finden Sie in den folgenden Artikeln: