Usare del indirizzi IP pubblici a livello di istanza nel servizio Azure Kubernetes

I nodi del servizio Azure Kubernetes non richiedono i propri indirizzi IP pubblici per la comunicazione. Tuttavia, gli scenari possono richiedere che i nodi in un pool ricevano i propri indirizzi IP pubblici dedicati. Uno scenario comune riguarda i carichi di lavoro di gioco, in cui una console deve stabilire una connessione diretta a una macchina virtuale cloud per ridurre al minimo gli hop. Questo scenario può essere ottenuto nel servizio Azure Kubernetes usando l'indirizzo IP pubblico del nodo.

Fare clic su Crea un nuovo gruppo di risorse.

az group create --name <resourceGroup> --location <region>

Creare un nuovo cluster del servizio Azure Kubernetes e collegare un indirizzo IP pubblico per i nodi. Ogni nodo nel pool riceve un indirizzo IP pubblico univoco. È possibile eseguire una verifica esaminando le istanze del set di scalabilità di macchine virtuali.

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --location <region> \
    --enable-node-public-ip \
    --generate-ssh-keys

Per i cluster del servizio Azure Kubernetes esistenti, è possibile anche aggiungere un nuovo pool di nodi e collegare un indirizzo IP pubblico per i nodi.

az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip

Usare un prefisso di indirizzo IP pubblico

I vantaggi dell'uso di un prefisso di indirizzo IP pubblico sono numerosi. Il servizio Azure Kubernetes supporta l'uso di indirizzi da un prefisso di indirizzo IP pubblico esistente per i nodi passando l'ID risorsa con il flag --node-public-ip-prefix-id quando si crea un nuovo cluster o si aggiunge un pool di nodi.

Innanzitutto, creare un prefisso di indirizzo IP pubblico con il comando az network public-ip prefix create:

az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>

Visualizzare l'output e prendere nota dell'elemento id per il prefisso:

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
  ...
}

Infine, quando si crea un nuovo cluster o si aggiunge un nuovo pool di nodi, usare il flag --node-public-ip-prefix-id e passare l'ID risorsa del prefisso:

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --location <region> \
    --enable-node-public-ip \
    --node-public-ip-prefix-id /subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName> \
    --generate-ssh-keys

Usa un prefisso IP pubblico a doppio stack (anteprima)

È possibile assegnare indirizzi IP pubblici IPv4 e IPv6 a ogni nodo di un pool di nodi usando prefissi IP pubblici in un cluster dual stack. Questa funzionalità è utile per i carichi di lavoro che richiedono connettività in ingresso o in uscita diretta su IPv4 e IPv6 o per le applicazioni che operano in ambienti che richiedono la conformità IPv6.

Esistono due configurazioni supportate:

  • Usa i tuoi prefissi IPv4 e IPv6. Ogni nodo riceve un indirizzo IPv4 dal prefisso IPv4 e un indirizzo IPv6 dal prefisso IPv6. Utilizza questa configurazione quando entrambi gli indirizzi devono provenire da intervalli di indirizzi sotto il tuo controllo, ad esempio quando un firewall o un servizio di un partner consente il traffico solo dai tuoi prefissi.
  • Utilizza solo il tuo prefisso IPv6. Ogni nodo riceve un indirizzo IPv6 dal prefisso IPv6 e Azure assegna automaticamente l'indirizzo IPv4. Usare questa configurazione quando solo l'indirizzo IPv6 deve provenire da un intervallo controllato. Poiché il pool di nodi non utilizza gli indirizzi da un prefisso IPv4, le dimensioni di un prefisso IPv4 non limitano il numero di nodi fino a cui il pool di nodi può scalare.

Importante

La funzionalità di anteprima AKS sono disponibili in modalità self-service, sulla base dell'attivazione facoltativa. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime di AKS sono parzialmente coperte dal supporto clienti secondo il principio del massimo sforzo. Di conseguenza, queste funzionalità non sono destinate all'uso in ambienti di produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Requisiti

Per usare prefissi IP pubblici dual stack con indirizzi IP pubblici del nodo, assicurarsi che siano soddisfatti i prerequisiti seguenti:

  • Il cluster è configurato come cluster dual stack con famiglie IP IPv4 e IPv6. Per entrambe le configurazioni è necessario un cluster dual stack, inclusa la configurazione del prefisso solo IPv6.
  • Il cluster usa Azure CNI con rete overlay.
  • Sono stati creati i prefissi IP pubblici che si prevede di usare nella stessa sottoscrizione e nella stessa area del cluster del servizio Azure Kubernetes. A seconda della configurazione scelta, è necessario un prefisso IPv4 e un prefisso IPv6 o un singolo prefisso IPv6.
  • Ogni prefisso IP pubblico usa lo SKU Standard e non è collegato a un servizio di bilanciamento del carico.
  • L'identità del cluster AKS ha l'autorizzazione per gestire i prefissi IP pubblici. Se i prefissi sono in un gruppo di risorse diverso, assegnare all'identità del cluster il ruolo Collaboratore di rete per quel gruppo di risorse.

Registrare le funzionalità di anteprima

Il supporto per i prefissi IP pubblici (IPv4 e IPv6) dual-stack per gli IP pubblici dei nodi è attualmente disponibile in anteprima. Prima di poter usare questa funzionalità, è necessario installare o aggiornare l'estensione interfaccia della riga di comando di Azure e registrare i NodePublicIPv6PrefixPreview flag di funzionalità nella sottoscrizione.

Installare o aggiornare l'estensione aks-preview:

az extension add --name aks-preview --upgrade

Registrare le funzionalità di anteprima necessarie:

az feature register --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview

Il completamento delle registrazioni delle funzionalità può richiedere alcuni minuti. Per controllare lo stato della registrazione, eseguire:

az feature show --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview --query "properties.state"

Attendere fino a quando la funzionalità segnala lo stato Registrato prima di procedere.

Dopo aver registrato i flag di funzionalità, aggiornare il provider di risorse per assicurarsi che vengano applicate le modifiche:

az provider register --namespace Microsoft.ContainerService

Una volta completata la registrazione, è possibile creare o aggiornare un cluster per utilizzare prefissi IP pubblici dual-stack per gli indirizzi IP pubblici dei nodi.

Creare prefissi IP pubblici

Creare un prefisso IP pubblico per IPv4 e IPv6 usando il interfaccia della riga di comando di Azure. Se si prevede di usare la configurazione del prefisso solo IPv6, creare solo il prefisso IPv6.

Per IPv4:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv4PrefixName> \
  --location <region> \
  --length 28 \
  --sku Standard \
  --version IPv4

Per IPv6:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv6PrefixName> \
  --location <region> \
  --length 124 \
  --sku Standard \
  --version IPv6

Dopo aver creato i prefissi, prendere nota dell'ID risorsa di ogni prefisso.

Creare un nuovo cluster con prefissi IP pubblici dei nodi dual-stack

Quando si crea un nuovo cluster AKS, usare il parametro --node-public-ip-prefix-ids per specificare sia i prefissi IP pubblici IPv4 sia quelli IPv6.

az aks create \
  --resource-group <resourceGroup> \
  --name <aksClusterName> \
  --location <region> \
  --enable-node-public-ip \
  --ip-families IPv4,IPv6 \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>" \
  --generate-ssh-keys

Il parametro --node-public-ip-prefix-ids accetta un elenco di ID risorsa dei prefissi IP pubblici separati da virgole. L'elenco può contenere al massimo un prefisso IPv4 e un prefisso IPv6. L'ordine non è importante, perché AKS determina la versione IP da ogni prefisso a cui si fa riferimento.

Aggiungere un pool di nodi con prefissi IP pubblici del nodo dual-stack

È anche possibile aggiungere a un cluster dual-stack esistente un pool di nodi con prefissi IP pubblici dei nodi dual-stack.

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --enable-node-public-ip \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>"

Usare un prefisso IP pubblico solo IPv6

Se è necessario che l'indirizzo IPv6 provenga esclusivamente da un prefisso di cui si ha il controllo, specifica un unico prefisso IPv6. Ogni nodo riceve un indirizzo IPv6 dal prefisso e Azure assegna automaticamente l'indirizzo IPv4. Il pool di nodi richiede comunque un cluster a doppio stack.

Usare questa configurazione quando le dimensioni di un prefisso IPv4 limiterebbero altrimenti la capacità di scalare del pool di nodi. Poiché il pool di nodi non assegna gli indirizzi IPv4 da un prefisso, solo la capacità del prefisso IPv6 limita il numero di nodi.

Creare un nuovo cluster con un prefisso IP pubblico solo IPv6:

az aks create \
  --resource-group <resourceGroup> \
  --name <aksClusterName> \
  --location <region> \
  --enable-node-public-ip \
  --ip-families IPv4,IPv6 \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --node-public-ip-prefix-ids "<ipv6PrefixResourceId>" \
  --generate-ssh-keys

Aggiungere un pool di nodi con un prefisso IP pubblico solo IPv6 a un cluster dual stack esistente:

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --enable-node-public-ip \
  --node-public-ip-prefix-ids "<ipv6PrefixResourceId>"

Poiché Azure assegna automaticamente l'indirizzo IPv4, l'indirizzo IPv4 di ogni nodo non è prevedibile e non è possibile aggiungerlo a un elenco elementi consentiti in anticipo. Di conseguenza, non è possibile usare un prefisso IP pubblico solo IPv6 in un cluster che usa intervalli IP autorizzati del server API. Usare invece API Server VNet Integration o un cluster privato oppure includere un prefisso IPv4 nell'elenco.

Verificare la configurazione del prefisso IP pubblico del nodo

Verificare i prefissi usati da un pool di nodi con il comando az aks nodepool show :

az aks nodepool show \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --query "networkProfile.nodePublicIPPrefixIDs"

Elencare gli indirizzi IP pubblici ricevuti dai nodi con il comando az vmss list-instance-public-ips . Usare il gruppo di risorse del nodo:

az vmss list-instance-public-ips \
  --resource-group <MC_resourceGroup_aksClusterName_region> \
  --name <virtualMachineScaleSetName> \
  --query "[].{name:name, ipAddress:ipAddress, version:publicIPAddressVersion}" \
  --output table

Per un prefisso solo IPv6, ogni nodo ha un indirizzo IPv6 dal prefisso e un indirizzo IPv4 dal pool di indirizzi gestiti Azure.

Limitazioni

Le limitazioni seguenti si applicano ai prefissi IP pubblici per gli IP pubblici dei nodi.

Elenco di prefissi:

  • L'elenco di prefissi può contenere al massimo un prefisso IPv4 e un prefisso IPv6. Vengono rifiutati due prefissi della stessa versione IP.
  • Quando si specificano prefissi, è necessario abilitare gli INDIRIZZI IP pubblici del nodo nel pool di nodi.
  • Non è possibile usare i parametri --node-public-ip-prefix-ids e --node-public-ip-prefix-id nello stesso comando.
  • La configurazione ip pubblico del nodo non è modificabile. Per modificare i prefissi IP pubblici, è necessario creare un nuovo pool di nodi ed eseguire la migrazione dei carichi di lavoro.

Risorse del prefisso:

  • Ogni prefisso deve usare lo SKU Standard. I prefissi Basic e Standard V2 non sono supportati.
  • Ogni prefisso deve trovarsi nella stessa sottoscrizione e nella stessa area del cluster AKS.
  • Non è possibile usare un prefisso già collegato a un servizio di bilanciamento del carico.
  • Se il pool di nodi usa zone di disponibilità, le zone di ogni prefisso devono coprire le zone del pool di nodi. Un prefisso con ridondanza della zona, che non ha zone assegnate, funziona con qualsiasi pool di nodi.

Capacità e scalabilità:

  • Ogni prefisso deve avere indirizzi sufficienti per il numero di nodi del pool di nodi, perché ogni nodo utilizza un indirizzo da ogni prefisso specificato.
  • Cluster Autoscaler è supportato, ma assicurarsi che il numero massimo di nodi configurato non superi il numero di indirizzi IP disponibili in ogni prefisso specificato. Se si usa un prefisso solo IPv6, solo il prefisso IPv6 limita il numero di nodi, perché Azure assegna automaticamente gli indirizzi IPv4.

Compatibilità delle funzionalità:

  • Non è possibile usare un prefisso IP pubblico solo IPv6 in un cluster che usa intervalli IP autorizzati del server API, perché Azure assegna automaticamente l'indirizzo IPv4 del nodo e non è possibile aggiungerlo in anticipo a un elenco di indirizzi consentiti. Usare invece l'Integrazione VNet del server API o un cluster privato oppure includere un prefisso IPv4 nell'elenco.
  • A ogni nodo viene assegnato un singolo indirizzo IP pubblico IPv6.
  • Questa funzionalità non è supportata con AKS Automatic o con il provisioning automatico dei nodi.
  • I pool di nodi con più schede di interfaccia di rete non sono supportati.

Individuare indirizzi IP pubblici per i nodi

Per individuare gli IP pubblici per i nodi, sono disponibili diverse procedure:

Importante

Il gruppo di risorse del nodo contiene i nodi e i relativi indirizzi IP pubblici. Usare il gruppo di risorse del nodo durante l'esecuzione dei comandi per individuare gli indirizzi IP pubblici per i nodi.

az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>

Usare tag di indirizzi IP pubblici negli indirizzi IP pubblici del nodo

I tag IP pubblici possono essere usati negli INDIRIZZI IP pubblici del nodo per usare la funzionalità Preferenza di routing di Azure , disponibile nelle aree specificate.

Requisiti

  • È richiesto il servizio Azure Kubernetes versione 1.29 o successiva.

Creare un nuovo cluster usando la preferenza di routing Internet

az aks create \
    --name <aksClusterName> \
    --location <region> \
    --resource-group <resourceGroup> \
    --enable-node-public-ip \
    --node-public-ip-tags RoutingPreference=Internet \
    --generate-ssh-keys

Aggiungere un pool di nodi con la preferenza di routing Internet

az aks nodepool add --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --location <region> \
  --resource-group <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

Consentire le connessioni alle porte host e aggiungere pool di nodi ai gruppi di sicurezza delle applicazioni

I nodi del servizio Azure Kubernetes che usano indirizzi IP pubblici dei nodi che ospitano i servizi sul proprio indirizzo host devono avere una regola del gruppo di sicurezza di rete aggiunta per consentire il traffico. L'aggiunta delle porte desiderate nella configurazione del pool di nodi determina la creazione delle regole di autorizzazione appropriate nel gruppo di sicurezza di rete del cluster.

Se nella subnet è presente un gruppo di sicurezza di rete con un cluster che usa una rete virtuale di tipo Bring Your Own, è necessario aggiungere una regola di autorizzazione a tale gruppo. Ciò può essere limitato ai nodi di un determinato pool aggiungendo il pool di nodi a un gruppo di sicurezza delle applicazioni. Un gruppo di sicurezza delle viene creato per impostazione predefinita nel gruppo di risorse gestite se sono specificate le porte host consentite. I nodi possono anche essere aggiunti a uno o più gruppi di sicurezza delle applicazioni personalizzati specificando l'ID risorsa dei gruppi di sicurezza di rete nei parametri del pool di nodi.

Formato della specifica della porta host

Quando si specifica l'elenco di porte da consentire, usare un elenco separato da virgole con voci nel formato port/protocol o startPort-endPort/protocol.

Esempi:

  • 80/tcp
  • 80/tcp,443/tcp
  • 53/udp,80/tcp
  • 50000-60000/tcp

Requisiti

  • È richiesto il servizio Azure Kubernetes versione 1.29 o successiva.

Creare un nuovo cluster con porte consentite e gruppi di sicurezza delle applicazioni

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --nodepool-name <nodePoolName> \
    --nodepool-allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp\
    --nodepool-asg-ids "<asgId>,<asgId>" \
    --generate-ssh-keys

Aggiungere un nuovo pool con porte consentite e gruppi di sicurezza delle applicazioni

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
  --asg-ids "<asgId>,<asgId>"

Aggiornare le porte consentite e i gruppi di sicurezza delle applicazioni per un pool di nodi

az aks nodepool update \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
  --asg-ids "<asgId>,<asgId>"

Assegnare automaticamente le porte host per i carichi di lavoro dei pod (ANTEPRIMA)

Quando gli indirizzi IP pubblici sono configurati nei nodi, è possibile usare le porte host per consentire ai pod di ricevere direttamente il traffico senza la necessità di configurare un servizio di bilanciamento del carico. Ciò è particolarmente utile in scenari come il gioco, in cui la natura temporanea dell'indirizzo IP del nodo e della porta non è un problema perché un servizio matchmaker in un nome host noto può fornire l'host e la porta corretti da usare in fase di connessione. Tuttavia, poiché un solo processo in un host può essere in ascolto su una stessa porta, l'uso di applicazioni con porte host può causare problemi di pianificazione. Per evitare questo problema, il servizio Azure Kubernetes consente al sistema di assegnare dinamicamente una porta disponibile in fase di pianificazione, impedendo i conflitti.

Avviso

Il traffico della porta host del pod viene bloccato dalle regole predefinite del gruppo di sicurezza di rete sul cluster. Questa funzione deve essere combinata assegnando alle porte host sul pool di nodi l'autorizzazione per consentire il flusso del traffico.

Importante

La funzionalità di anteprima AKS sono disponibili in modalità self-service, sulla base dell'attivazione facoltativa. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime di AKS sono parzialmente coperte dal supporto clienti secondo il principio del massimo sforzo. Di conseguenza, queste funzionalità non sono destinate all'uso in ambienti di produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Requisiti

  • È richiesto il servizio Azure Kubernetes versione 1.29 o successiva.

Registrare il flag di funzionalità "PodHostPortAutoAssignPreview"

Per registrare il flag di funzionalità PodHostPortAutoAssignPreview, usare il comando az feature register come illustrato nell'esempio seguente:

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

Sono necessari alcuni minuti per visualizzare lo stato Registered. Verificare lo stato della registrazione usando il comando az feature show:

az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Quando lo stato passa a Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register:

az provider register --namespace Microsoft.ContainerService

Assegnare automaticamente una porta host a un pod

L'attivazione dell'assegnazione automatica delle porte host viene eseguita distribuendo un carico di lavoro senza porte host e applicando l'annotazione kubernetes.azure.com/assign-hostports-for-containerports con l'elenco di porte che richiedono assegnazioni di porte host. Il valore dell'annotazione deve essere specificato come elenco delimitato da virgole di voci come port/protocol, dove la porta è un singolo numero di porta definito nella specifica Pod e il protocollo è tcp o udp.

Le porte vengono assegnate nell'intervallo 40000-59999 e sono univoche nel cluster. Le porte assegnate vengono aggiunte anche alle variabili di ambiente nel pod, in modo che l'applicazione possa determinare quali porte siano state assegnate. Il nome della variabile di ambiente è formato seguente (più in basso): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT, quindi un esempio potrebbe essere mydeployment_PORT_8080_TCP_HOSTPORT: 41932.

Di seguito è riportato un esempio di distribuzione echoserver, che mostra il mapping delle porte host per le porte 8080 e 8443:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echoserver-hostport
  labels:
    app: echoserver-hostport
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echoserver-hostport
  template:
    metadata:
      annotations:
        kubernetes.azure.com/assign-hostports-for-containerports: 8080/tcp,8443/tcp
      labels:
        app: echoserver-hostport
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
        - name: echoserver-hostport
          image: k8s.gcr.io/echoserver:1.10
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
            - name: https
              containerPort: 8443
              protocol: TCP

Quando viene applicata la distribuzione, le voci hostPort sono incluse nel file YAML dei singoli pod:

$ kubectl describe pod echoserver-hostport-75dc8d8855-4gjfc
<cut for brevity>
Containers:
  echoserver-hostport:
    Container ID:   containerd://d0b75198afe0612091f412ee7cf7473f26c80660143a96b459b3e699ebaee54c
    Image:          k8s.gcr.io/echoserver:1.10
    Image ID:       k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229                                                                                                      Ports:          8080/TCP, 8443/TCP
    Host Ports:     46645/TCP, 49482/TCP
    State:          Running
      Started:      Thu, 12 Jan 2023 18:02:50 +0000
    Ready:          True
    Restart Count:  0
    Environment:
      echoserver-hostport_PORT_8443_TCP_HOSTPORT:  49482
      echoserver-hostport_PORT_8080_TCP_HOSTPORT:  46645

Passaggi successivi