Configurare la rete Azure CNI per l'allocazione statica dei blocchi CIDR e il supporto avanzato della subnet nel servizio Azure Kubernetes - (anteprima)

Una limitazione dell'allocazione IP dinamica di Azure CNI è la scalabilità delle dimensioni della subnet del pod oltre a una subnet /16. Anche con una subnet di grandi dimensioni, i cluster di grandi dimensioni possono comunque essere limitati a 65.000 pod, a causa di un limite di mapping degli indirizzi di Azure. La nuova funzionalità di allocazione statica dei blocchi in Azure CNI risolve questo problema assegnando blocchi CIDR ai nodi, anziché ai singoli indirizzi IP.

I vantaggi offerti sono i seguenti:

  • Migliore scalabilità IP: i blocchi CIDR vengono allocati staticamente ai nodi del cluster e sono presenti per la durata del nodo, a differenza della tradizionale allocazione dinamica dei singoli IP con CNI tradizionale. Ciò consente il routing basato su blocchi CIDR e permette di aumentare il limite del cluster fino a 1 milione di pod, rispetto ai tradizionali pod da 65.000 per cluster. La rete virtuale di Azure deve essere sufficientemente grande per supportare la scalabilità del cluster.
  • Flessibilità: le subnet nodo e pod possono essere dimensionate in modo indipendente. Una singola subnet pod può essere condivisa tra più pool di nodi di un cluster o tra più cluster del servizio Azure Kubernetes distribuiti nella stessa rete virtuale. È anche possibile configurare una subnet pod separata per un pool di nodi.
  • Prestazioni elevate: poiché ai pod vengono assegnati indirizzi IP di rete virtuale, hanno connettività diretta ad altri pod e risorse del cluster nella rete virtuale.
  • Criteri di rete virtuale separati per i pod: poiché i pod hanno una subnet separata, è possibile configurare criteri di rete virtuale separati per essi diversi dai criteri dei nodi. Ciò consente molti scenari utili, ad esempio consentire la connettività Internet solo per i pod e non per i nodi, correggere l'indirizzo IP di origine per il pod in un pool di nodi usando un gateway NAT di Azure e usare gruppi di sicurezza di rete per filtrare il traffico tra pool di nodi.
  • Criteri di rete Kubernetes: Cilium, NPM di Azure e Calico funzionano con questa nuova soluzione.

Questo articolo illustra come usare la rete Azure CNI per l'allocazione statica di CIDR e il supporto avanzato delle subnet nel servizio Azure Kubernetes.

Prerequisiti

Nota

Quando si usa l'allocazione statica blocchi di CIDR, non è supportata l'esposizione di un'applicazione come servizio di collegamento privato tramite un servizio di bilanciamento del carico Kubernetes.

  • Esaminare i prerequisiti per la configurazione della rete CNI di Azure di base nel servizio Azure Kubernetes, perché gli stessi prerequisiti si applicano a questo articolo.

  • Esaminare i parametri di distribuzione per configurare la rete CNI di Azure di base nel servizio Azure Kubernetes, come si applicano gli stessi parametri.

  • Il motore del servizio Azure Kubernetes e i cluster DIY non sono supportati.

  • Versione 2.37.0 dell'interfaccia della riga di comando di Azure o successiva con estensione aks-preview della versione '2.0.0b2' o successiva

  • Se si dispone di un cluster esistente, è necessario abilitare Container Insights per il monitoraggio dell'utilizzo della subnet IP. È possibile abilitare Container Insights usando il comando az aks enable-addons, come illustrato nell'esempio seguente:

  • Registrare il flag di funzionalità a livello di sottoscrizione per la sottoscrizione: 'Microsoft.ContainerService/AzureVnetScalePreview'

    az aks enable-addons --addons monitoring --name <cluster-name> --resource-group <resource-group-name>
    

Limiti

Di seguito sono riportate alcune delle limitazioni dell'uso dell'allocazione statica dei blocchi di Azure CNI:

  • La versione minima di Kubernetes necessaria è la 1.28
  • Le dimensioni massime supportate della subnet sono x.x.x.x/12 ~ 1 milione di indirizzi IP
  • È possibile utilizzare una sola modalità di funzionamento per subnet. Se una subnet usa la modalità di allocazione statica dei blocchi, non può essere utilizzata la modalità di allocazione IP dinamica in un cluster o un pool di nodi diverso con la stessa subnet e viceversa.
  • Ciò è supportato solo nei nuovi cluster o quando si aggiungono pool di nodi con una subnet diversa ai cluster esistenti. Non si supporta la migrazione o l'aggiornamento di cluster o pool di nodi esistenti.
  • In tutti i blocchi CIDR assegnati a un nodo nel pool di nodi, un IP verrà selezionato come indirizzo IP primario del nodo. Pertanto, per gli amministratori di rete che selezionano il valore --max-pods, provare a usare il calcolo seguente per soddisfare al meglio le esigenze e ottenere un utilizzo ottimale degli indirizzi IP nella subnet:
    max_pods = (N * 16) - 1' dove N è un numero intero positivo e N > 0

Aree di disponibilità

Questa funzionalità non è disponibile nelle aree seguenti:

  • Stati Uniti meridionali
  • Stati Uniti orientali 2
  • Stati Uniti occidentali
  • West US 2

pianificare l'indirizzamento IP

La pianificazione dell'indirizzamento IP è più flessibile e granulare. Poiché i nodi e i pod vengono ridimensionati in modo indipendente, gli spazi indirizzi possono anche essere pianificati separatamente. Poiché le subnet dei pod possono essere configurate in base alla granularità di un pool di nodi, è sempre possibile aggiungere una nuova subnet quando si aggiunge un pool di nodi. I pod di sistema in un pool di cluster/nodi ricevono anche indirizzi IP dalla subnet del pod, quindi questo comportamento deve essere tenuto in considerazione.

In questo scenario, i blocchi CIDR di /28 (16 IP) vengono allocati ai nodi in base alla configurazione '--max-pod' per il pool di nodi, che definisce il numero massimo di pod per nodo. 1 IP è riservato in ogni nodo da tutti gli indirizzi IP disponibili in tale nodo per scopi interni.

Pertanto, durante la determinazione e la pianificazione degli indirizzi IP, è essenziale definire la configurazione '--max-pods' e può essere calcolata meglio come indicato di seguito: max_pods_per_node = (16 * N) - 1 dove N è un numero intero positivo maggiore di 0

I valori ideali, senza sprechi di IP, prevedono che il valore massimo dei pod sia conforme all'espressione sopra riportata.

  • Esempio 1: max_pods = 30, blocchi CIDR allocati per nodo = 2, IP totali disponibili per i pod = (16 * 2) - 1 = 32 - 1 = 31, spreco IP per nodo = 31 - 30 = 1 [spreco basso - caso accettabile]
  • Esempio 2: max_pods = 31, blocchi CIDR allocati per nodo = 2, IP totali disponibili per i pod = (16 * 2) - 1 = 32 - 1 = 31, spreco IP per nodo = 31 - 31 = 0 [caso ideale]
  • Esempio 3: max_pods = 32, blocchi CIDR allocati per nodo = 3, IP totali disponibili per i pod = (16 * 3) - 1 = 48 - 1 = 47, spreco IP per nodo = 47 - 32 = 15 [spreco elevato - non consigliato]

La pianificazione degli indirizzi IP per i servizi Kubernetes rimane invariata.

Nota

Verificare che la rete virtuale disponga di uno spazio indirizzi sufficientemente grande e contiguo per supportare la scalabilità del cluster.

Parametri di distribuzione

I parametri di distribuzione per la configurazione della rete CNI di Azure di base nel servizio Azure Kubernetes sono tutti validi, con due eccezioni:

  • Il parametro vnet subnet id fa ora riferimento alla subnet correlata ai nodi del cluster.
  • Il parametro pod subnet id viene usato per specificare la subnet i cui indirizzi IP verranno allocati in modo statico o dinamico ai pod nel pool di nodi.
  • Il parametro della modalità di allocazione IP pod specifica se usare l'allocazione dinamica individuale o l'allocazione statica dei blocchi.

Operazioni preliminari

Installare l'estensione aks-preview dell'interfaccia della riga di comando di Azure.

  1. Installare l'aks-previewestensione usando il comando az extension add.

    az extension add --name aks-preview
    
  2. Aggiornare alla versione più recente dell'estensione usando il comando az extension update. L'estensione deve avere una versione '2.0..0b2' o successiva

    az extension update --name aks-preview
    

Registrare il flag di funzionalità AzureVnetScalePreview

  1. Registrare il flag di funzionalità AzureVnetScalePreview usando il comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "AzureVnetScalePreview"
    

    Sono necessari alcuni minuti per visualizzare lo stato Registered.

  2. Verificare lo stato della registrazione usando il comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "AzureVnetScalePreview"
    
  3. Quando lo stato riflette Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Configurare la rete con allocazione statica dei blocchi CIDR e supporto avanzato della subnet - Interfaccia della riga di comando di Azure

L'uso dell'allocazione statica dei blocchi CIDR nel cluster è simile al metodo predefinito per la configurazione di un cluster CNI di Azure per l'allocazione IP dinamica. Nell'esempio seguente, viene illustrata la creazione di una nuova rete virtuale con una subnet per i nodi e una subnet per i pod, oltre alla creazione di un cluster che utilizza Azure CNI con allocazione statica dei blocchi CIDR. Assicurarsi di sostituire variabili come $subscription con i propri valori.

Creare la rete virtuale con due subnet.

resourceGroup="myResourceGroup"
vnet="myVirtualNetwork"
location="myRegion"

# Create the resource group
az group create --name $resourceGroup --location $location

# Create our two subnet network 
az network vnet create --resource-group $resourceGroup --location $location --name $vnet --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name nodesubnet --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name podsubnet --address-prefixes 10.40.0.0/13 -o none 

Creare il cluster, facendo riferimento alla subnet del nodo usando --vnet-subnet-id, la subnet del pod utilizzando --pod-subnet-ide --pod-ip-allocation-mode per definire la modalità di allocazione IP e abilitare il componente aggiuntivo di monitoraggio.

clusterName="myAKSCluster"
subscription="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --location $location \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --pod-ip-allocation-mode StaticBlock \
    --vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/nodesubnet \
    --pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/podsubnet \
    --enable-addons monitoring \
    --generate-ssh-keys

Aggiunta del pool di nodi

Quando si aggiunge un pool di nodi, fare riferimento alla subnet del nodo utilizzando --vnet-subnet-id, la subnet del pod usando --pod-subnet-id e la modalità di allocazione con '--pod-ip-allocation-mode'. Nell'esempio seguente vengono create due nuove subnet a cui viene quindi fatto riferimento nella creazione di un nuovo pool di nodi:

az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name node2subnet --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name pod2subnet --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $clusterName -g $resourceGroup  -n newnodepool \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/node2subnet \
    --pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/pod2subnet \
    --pod-ip-allocation-mode StaticBlock \
    --no-wait

Domande frequenti sull'allocazione statica dei blocchi CIDR e supporto migliorato delle subnet

  • È possibile assegnare più subnet pod a un cluster?

    È possibile assegnare più subnet a un cluster, ma solo una subnet può essere assegnata a ciascun pool di nodi. Pool di nodi diversi nello stesso cluster o in cluster differenti possono condividere la stessa subnet.

  • È possibile assegnare completamente subnet pod da una rete virtuale diversa?

    No, la subnet del pod deve trovarsi dalla stessa rete virtuale del cluster.

  • Alcuni pool di nodi in un cluster possono utilizzare l'allocazione IP dinamica, mentre altri usano la nuova allocazione statica dei blocchi?

    Sì, pool di nodi diversi possono usare modalità di allocazione differenti. Tuttavia, una volta usata una subnet in una modalità di allocazione, può essere utilizzata solo nella stessa modalità di allocazione in tutti i pool di nodi a cui è associata.

Passaggi successivi

Per altre informazioni sulla rete in servizio Azure Kubernetes, vedere gli articoli seguenti: