Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile distribuire i cluster AKS in modalità dual-stack quando si utilizza una rete virtuale di Azure dual-stack. In questa configurazione, i nodi ricevono sia un indirizzo IPv4 che IPv6 dalla subnet della rete virtuale di Azure. I pod ricevono un indirizzo IPv4 e IPv6 da uno spazio di indirizzi logicamente diverso dalla subnet della rete virtuale Azure dei nodi. Nat (Network Address Translation) viene quindi configurato in modo che i pod possano raggiungere le risorse nella rete virtuale di Azure. L'indirizzo IP di origine del traffico è NAT verso l'indirizzo IP primario del nodo della stessa famiglia (da IPv4 a IPv4 e IPv6 a IPv6).
Questo articolo illustra come usare la rete dual-stack con un cluster AKS. Per altre informazioni sulle opzioni di rete e le relative considerazioni, vedere Concetti relativi alla rete per le applicazioni nel servizio Azure Kubernetes.
Importante
A partire dal 30 novembre 2025, il servizio Azure Kubernetes non supporta più o fornisce aggiornamenti della sicurezza per Azure Linux 2.0. L'immagine del nodo Linux 2.0 di Azure è bloccata alla versione 202512.06.0. A partire dal 31 marzo 2026, le immagini dei nodi verranno rimosse e non sarà possibile ridimensionare i pool di nodi. Eseguire la migrazione a una versione di Linux di Azure supportata aggiornando i pool di nodi a una versione di Kubernetes supportata o eseguendo la migrazione ad osSku AzureLinux3. Per altre informazioni, vedere il problema di ritiro di GitHub e l'annuncio di ritiro degli aggiornamenti di Azure. Per rimanere informati sugli annunci e sugli aggiornamenti, seguire le note di rilascio di AKS.
Limitazioni
- Nei pool di nodi Linux di Azure gli oggetti servizio sono supportati solo con
externalTrafficPolicy: Local. - La rete dual-stack è necessaria per la rete virtuale di Azure e il CIDR del pod.
- Solo IPv6 a stack singolo non è supportato per gli indirizzi IP del nodo o del pod. È possibile effettuare il provisioning dei servizi in IPv4 o IPv6.
- È necessario Azure CNI Overlay
Prerequisiti
- I cluster AKS a doppio stack richiedono la versione 1.21.2 o successiva di Kubernetes. È consigliabile usare v1.22.2 o versione successiva.
- Se si usano i modelli di Azure Resource Manager, è necessaria la versione dello schema 2021-10-01.
Panoramica della rete dual stack in Kubernetes
Kubernetes v1.23 offre un supporto stabile a monte per i cluster dual stack IPv4/IPv6, inclusa la rete di pod e servizi. I nodi e i pod vengono sempre assegnati sia un indirizzo IPv4 che un indirizzo IPv6, mentre i servizi possono essere a doppio stack o a uno stack singolo in una delle due famiglie di indirizzi.
AKS configura i servizi di supporto necessari per il networking dual-stack. Questa configurazione include:
- Se si usa una rete virtuale gestita, una configurazione di rete virtuale dual-stack.
- Indirizzi di nodi e pod IPv4 e IPv6.
- Regole in uscita per il traffico IPv4 e IPv6.
- Configurazione del servizio di bilanciamento del carico per i servizi IPv4 e IPv6.
Annotazioni
Quando si usa Dualstack con un tipo in uscita di routing definito dall'utente, è possibile scegliere di avere una route predefinita per IPv6 a seconda che sia necessario il traffico IPv6 per raggiungere o meno Internet. Se non si ha una route predefinita per IPv6, viene visualizzato un avviso quando si crea un cluster, ma non si impedisce la creazione del cluster.
Implementazione di un cluster a doppio stack
Per supportare cluster dual stack, vengono forniti gli attributi seguenti:
-
--ip-families: accetta un elenco delimitato da virgole di famiglie IP da abilitare nel cluster.- Sono supportati solo
ipv4oipv4,ipv6.
- Sono supportati solo
-
--pod-cidrs: accetta un elenco delimitato da virgole di intervalli IP di notazione CIDR da cui assegnare indirizzi IP pod.- Il conteggio e l'ordine degli intervalli in questo elenco devono corrispondere al valore fornito a
--ip-families. - Se non viene specificato alcun valore, viene utilizzato il valore predefinito
10.244.0.0/16,fd12:3456:789a::/64.
- Il conteggio e l'ordine degli intervalli in questo elenco devono corrispondere al valore fornito a
-
--service-cidrs: accetta un elenco delimitato da virgole di intervalli IP di notazione CIDR da cui assegnare gli INDIRIZZI IP del servizio.- Il conteggio e l'ordine degli intervalli in questo elenco devono corrispondere al valore fornito a
--ip-families. - Se non viene specificato alcun valore, viene utilizzato il valore predefinito
10.0.0.0/16,fd12:3456:789a:1::/108. - La subnet IPv6 assegnata a
--service-cidrsnon può essere maggiore di /108.
- Il conteggio e l'ordine degli intervalli in questo elenco devono corrispondere al valore fornito a
Distribuire un cluster servizio Azure Kubernetes dual-stack
- Interfaccia della riga di comando di Azure
- Gestore Risorse di Azure
- Bicipite
Creare un gruppo di risorse di Azure per il cluster usando il
az group createcomando .az group create --location <region> --name <resourceGroupName>Creare un cluster servizio Azure Kubernetes dual-stack usando il comando
az aks createcon il parametro--ip-familiesimpostato suipv4,ipv6.az aks create \ --location <region> \ --resource-group <resourceGroupName> \ --name <clusterName> \ --ip-families ipv4,ipv6 \ --generate-ssh-keysDopo aver creato il cluster, ottenere le credenziali di amministratore del cluster usando il
az aks get-credentialscomando .az aks get-credentials --resource-group <resourceGroupName> --name <clusterName>
Esaminare i nodi per visualizzare entrambe le famiglie IP
Dopo aver eseguito il provisioning del cluster, verificare che i nodi siano provvisti di rete dual-stack usando il comando
kubectl get nodes.kubectl get nodes -o=custom-columns="NAME:.metadata.name,ADDRESSES:.status.addresses[?(@.type=='InternalIP')].address,PODCIDRS:.spec.podCIDRs[*]"L'output del comando
kubectl get nodesmostra che i nodi hanno indirizzi e spazio di assegnazione IP per i pod sia per IPv4 che per IPv6.NAME ADDRESSES PODCIDRS aks-nodepool1-14508455-vmss000000 10.240.0.4,2001:1234:5678:9abc::4 10.244.0.0/24,fd12:3456:789a::/80 aks-nodepool1-14508455-vmss000001 10.240.0.5,2001:1234:5678:9abc::5 10.244.1.0/24,fd12:3456:789a:0:1::/80 aks-nodepool1-14508455-vmss000002 10.240.0.6,2001:1234:5678:9abc::6 10.244.2.0/24,fd12:3456:789a:0:2::/80
Creare un carico di lavoro di esempio
Dopo aver creato il cluster, è possibile distribuire i carichi di lavoro. Questo articolo illustra la distribuzione di un carico di lavoro di esempio di un server Web NGINX.
Distribuire un server Web NGINX
- kubectl
- YAML
Creare un server Web NGINX usando il
kubectl create deployment nginxcomando .kubectl create deployment nginx --image=nginx:latest --replicas=3Visualizzare le risorse del pod usando il
kubectl get podscomando .kubectl get pods -o custom-columns="NAME:.metadata.name,IPs:.status.podIPs[*].ip,NODE:.spec.nodeName,READY:.status.conditions[?(@.type=='Ready')].status"L'output mostra che i pod hanno indirizzi IPv4 e IPv6. I pod non mostrano gli indirizzi IP finché non sono pronti.
NAME IPs NODE READY nginx-55649fd747-9cr7h 10.244.2.2,fd12:3456:789a:0:2::2 aks-nodepool1-14508455-vmss000002 True nginx-55649fd747-p5lr9 10.244.0.7,fd12:3456:789a::7 aks-nodepool1-14508455-vmss000000 True nginx-55649fd747-r2rqh 10.244.1.2,fd12:3456:789a:0:1::2 aks-nodepool1-14508455-vmss000001 True
Esporre il carico di lavoro tramite un servizio di tipo LoadBalancer
Importante
A partire dalla versione AKS v1.27, è possibile creare un servizio LoadBalancer dual-stack che verrà fornito con 1 indirizzo IP pubblico IPv4 e 1 indirizzo IP pubblico IPv6. Tuttavia, nelle versioni precedenti, al bilanciatore di carico viene assegnato solo il primo indirizzo IP per un servizio, quindi un servizio dual-stack riceve solo l'indirizzo IP pubblico relativo alla prima famiglia IP elencata. Per fornire un servizio dual stack per una singola distribuzione, creare due servizi destinati allo stesso selettore, uno per IPv4 e uno per IPv6.
- kubectl
- YAML
AKS a partire dalla versione 1.27
Esporre la distribuzione NGINX usando il comando
kubectl expose deployment nginx.kubectl expose deployment nginx --name=nginx --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilyPolicy": "PreferDualStack", "ipFamilies": ["IPv4", "IPv6"]}}'Si riceve un output che mostra che i servizi sono stati esposti.
service/nginx exposedUna volta che la distribuzione è stata esposta e i
LoadBalancerservizi sono stati completamente forniti, ottenere gli indirizzi IP dei servizi usando il comandokubectl get services.kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.0.223.73 2603:1030:20c:9::22d,4.156.88.133 80:30664/TCP 2m11skubectl get services nginx -ojsonpath='{.spec.clusterIPs}'["10.0.223.73","fd17:d93e:db1f:f771::54e"]Verificare la funzionalità tramite una richiesta Web da riga di comando da un host che supporta IPv6. Azure Cloud Shell non è in grado di supportare IPv6.
SERVICE_IP=$(kubectl get services nginx -o jsonpath='{.status.loadBalancer.ingress[1].ip}') curl -s "http://[${SERVICE_IP}]" | head -n5<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>
Azure Kubernetes Service (AKS) precedente alla versione 1.27
Esporre la distribuzione NGINX usando il comando
kubectl expose deployment nginx.kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer' kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilies": ["IPv6"]}}'Si riceve un output che mostra che i servizi sono stati esposti.
service/nginx-ipv4 exposed service/nginx-ipv6 exposedUna volta che la distribuzione è stata esposta e i
LoadBalancerservizi sono stati completamente forniti, ottenere gli indirizzi IP dei servizi usando il comandokubectl get services.kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ipv4 LoadBalancer 10.0.88.78 20.46.24.24 80:30652/TCP 97s nginx-ipv6 LoadBalancer fd12:3456:789a:1::981a 2603:1030:8:5::2d 80:32002/TCP 63sVerificare la funzionalità tramite una richiesta Web da riga di comando da un host che supporta IPv6. Azure Cloud Shell non è in grado di supportare IPv6.
SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}') curl -s "http://[${SERVICE_IP}]" | head -n5<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>