Configurare il gateway in uscita statico nel servizio Azure Kubernetes

Gateway in uscita statico in Servizio Azure Kubernetes (AKS) instrada il traffico in uscita dei pod attraverso un pool di nodi del gateway dedicato con indirizzi IP di origine fissi. Questo articolo illustra come abilitare la funzionalità, configurare un gateway, instradare il traffico dei pod e monitorare o rimuovere la configurazione.

Limitazioni e considerazioni

  • Il gateway in uscita statico non è supportato nei cluster con la subnet dei pod di Azure CNI.
  • Il gateway in uscita statico supporta cluster solo IPv4 e non è supportato nei cluster dual stack.
  • I criteri di rete Kubernetes non si applicano al traffico che i pod annotati instradano attraverso il pool di nodi del gateway. Il traffico di altri cluster non è interessato.
  • Usare il pool di nodi del gateway solo per il traffico in uscita, non per i carichi di lavoro per utilizzo generico.
  • I pool di nodi di Windows non possono essere usati come pool di nodi del gateway.
  • Non è possibile annotare hostNetwork i pod per usare il pool di nodi del gateway.
  • I pod possono usare un pool di nodi del gateway solo se si trovano nello stesso spazio dei nomi della risorsa StaticGatewayConfiguration.

Prerequisites

Creare o aggiornare un cluster del servizio Azure Kubernetes con gateway in uscita statico

Prima di poter creare e gestire pool di nodi del gateway, è necessario abilitare la funzionalità Gateway in uscita statico per il cluster del servizio Azure Kubernetes. A tale scopo, è possibile creare un nuovo cluster o aggiornare un cluster esistente usando az aks update.

az aks create --name <cluster-name> --resource-group <resource-group> --enable-static-egress-gateway

Per abilitare il gateway statico in uscita in un cluster esistente, eseguire il comando seguente:

az aks update --name <cluster-name> --resource-group <resource-group> --enable-static-egress-gateway

Creare un pool di nodi del gateway

Dopo aver abilitato la funzionalità, creare un pool di nodi del gateway dedicato. Questo pool di nodi gestisce il traffico in uscita tramite il prefisso IP pubblico specificato. --gateway-prefix-size è la dimensione del prefisso IP pubblico da applicare ai nodi del pool di nodi del gateway. L'intervallo consentito è 28-31.

Dimensione del prefisso Indirizzi IP disponibili Numero massimo di nodi del gateway
/28 16 16
/29 8 8
/30 4 4
/31 2 2
az aks nodepool add --cluster-name <cluster-name> \
    --name <nodepool-name> \
    --resource-group <resource-group> \
    --mode gateway \
    --node-count <number-of-nodes> \
    --gateway-prefix-size <prefix-size>

Note

  • Il numero di nodi deve rientrare nella capacità consentita dalla dimensione del prefisso selezionata. Ad esempio, un prefisso /30 supporta fino a 4 nodi e almeno 2 nodi sono necessari per la disponibilità elevata. È possibile ridimensionare manualmente il pool di nodi all'interno della capacità del prefisso, ma il ridimensionamento automatico del cluster non è supportato.
  • È possibile definire lo SKU della macchina virtuale da usare nel pool di nodi del gateway con il parametro --vm-size. È necessario comprendere le esigenze specifiche e pianificare di conseguenza per garantire prestazioni e bilanciamento dei costi appropriati.

Ridimensionare il pool di nodi del gateway

Ridimensionare manualmente il pool di nodi del gateway nella capacità del prefisso IP pubblico. I pool di nodi del gateway non supportano il ridimensionamento automatico del cluster.

az aks nodepool scale --cluster-name <cluster-name> \
  --name <nodepool-name> \
  --resource-group <resource-group> \
  --node-count <desired-node-count>

Creare una risorsa StaticGatewayConfiguration

Definire la configurazione del gateway creando una risorsa personalizzata StaticGatewayConfiguration. Questa configurazione specifica il pool di nodi e il prefisso IP pubblico da usare.

Campo Obbligatorio Descrizione
gatewayNodepoolName Nome del pool di nodi del gateway che gestisce il traffico in uscita.
excludeCidrs No CIDR di destinazione che ignorano il gateway e usano l'interfaccia di rete primaria del pod.
publicIpPrefixId No ID risorsa di un prefisso IP pubblico esistente. Se omesso, il controller crea un prefisso.
apiVersion: egressgateway.kubernetes.azure.com/v1alpha1
kind: StaticGatewayConfiguration
metadata:
  name: <gateway-config-name>
  namespace: <namespace>
spec:
  gatewayNodepoolName: <nodepool-name>
  excludeCidrs:  # Optional
  - 10.0.0.0/8
  - 172.16.0.0/12
  - 169.254.169.254/32
  publicIpPrefixId: /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Network/publicIPPrefixes/<prefix-name> # Optional

Salvare il manifesto come static-gateway-configuration.yamle quindi applicarlo:

kubectl apply -f static-gateway-configuration.yaml

Attendere che il controller venga popolato prima di creare o riavviare .status.egressIpPrefix i carichi di lavoro con annotazioni. Eseguire il comando seguente fino a quando non restituisce il prefisso assegnato:

kubectl get staticgatewayconfiguration <gateway-config-name> \
    --namespace <namespace> \
    --output jsonpath='{.status.egressIpPrefix}'

Suggerimento

Se si omette publicIpPrefixId, il controller crea un prefisso IP pubblico. Eseguire kubectl describe StaticGatewayConfiguration <gateway-config-name> --namespace <namespace> e archiviare Egress Ip Prefix lo stato. Per usare un prefisso esistente, specificare il relativo ID risorsa in publicIpPrefixId e concedere all'identità del cluster del servizio Azure Kubernetes il ruolo Collaboratore rete.

Configurare il gateway statico in uscita con indirizzi IP privati

Importante

Il supporto ip privato statico è disponibile in anteprima e richiede cluster che eseguono Kubernetes versione 1.34 o successiva.

Se è necessario mantenere il traffico in uscita sugli indirizzi privati, creare un pool di nodi del gateway che usa il VirtualMachines tipo di set di macchine virtuali. Gli indirizzi IP pubblici del nodo sono disabilitati per impostazione predefinita. La StaticGatewayConfiguration risorsa nei passaggi seguenti disabilita separatamente il provisioning ip pubblico per l'uscita.

az aks nodepool add --cluster-name <cluster-name> \
  --name <nodepool-name> \
  --resource-group <resource-group> \
  --mode gateway \
  --node-count <number-of-nodes> \
  --vm-set-type VirtualMachines \
  --gateway-prefix-size <prefix-size>

Suggerimento

Specificare --vnet-subnet-id per allocare gli indirizzi IP privati dei nodi del gateway da una subnet personalizzata. Una subnet separata può migliorare l'isolamento della rete e la pianificazione degli indirizzi IP.

Importante

La modalità IP privato non crea una route in uscita. Prima di annotare i carichi di lavoro, configurare una route dalla subnet del pool di nodi del gateway alla destinazione desiderata usando una route definita dall'utente con Firewall di Azure o un'altra appliance virtuale di rete o tramite ExpressRoute. Per altre informazioni, vedere Personalizzare l'uscita del cluster con i tipi in uscita nel servizio Azure Kubernetes. Specificando --vnet-subnet-id da solo non viene specificata la connettività in uscita.

Impostare provisionPublicIps: false per disabilitare il provisioning ip pubblico e mantenere gli INDIRIZZI IP privati allocati ai nodi del gateway per la durata di StaticGatewayConfiguration. Il gatewayNodepoolName valore deve corrispondere al pool di nodi del gateway creato con --vm-set-type VirtualMachines.

apiVersion: egressgateway.kubernetes.azure.com/v1alpha1
kind: StaticGatewayConfiguration
metadata:
  name: <gateway-config-name>
  namespace: <namespace>
spec:
  gatewayNodepoolName: <nodepool-name>
  provisionPublicIps: false

Salvare il manifesto come static-gateway-configuration.yamle quindi applicarlo:

kubectl apply -f static-gateway-configuration.yaml

Prima di creare o riavviare carichi di lavoro con annotazioni, eseguire il comando seguente fino a .status.egressIpPrefix quando non contiene gli indirizzi IP privati assegnati:

kubectl get staticgatewayconfiguration <gateway-config-name> \
  --namespace <namespace> \
  --output jsonpath='{.status.egressIpPrefix}'

Quando si esegue kubectl describe StaticGatewayConfiguration <gateway-config-name> -n <namespace>, il egressIpPrefix campo mostra un elenco delimitato da virgole di tali INDIRIZZI IP privati statici. Continui a usare le stesse API e manifest per il resto del flusso di lavoro, inclusa la risorsa StaticGatewayConfiguration e le annotazioni dei pod.

Annotare i pod per usare la configurazione del gateway

Per instradare il traffico da pod specifici attraverso il pool di nodi del gateway, aggiungere l'annotazione kubernetes.azure.com/static-gateway-configuration al modello di pod. Impostare il valore dell'annotazione sull'oggetto metadata.name di una StaticGatewayConfiguration risorsa nello stesso spazio dei nomi.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment-name>
  namespace: <namespace>
spec:
  template:
    metadata:
      annotations:
        kubernetes.azure.com/static-gateway-configuration: <gateway-config-name>

Note

Il plug-in CNI in ogni nodo configura i nuovi pod per instradare il traffico attraverso il pool di nodi del gateway selezionato.

Il plug-in CNI configura il gateway quando viene creato un pod. Se non sono stati sostituiti pod esistenti quando è stata aggiunta l'annotazione, riavviare il carico di lavoro. Ad esempio, riavviare una distribuzione usando il comando seguente:

kubectl rollout restart deployment <deployment-name> --namespace <namespace>

Monitorare le configurazioni del gateway statico in uscita

Per monitorare una configurazione, recuperare la risorsa completa StaticGatewayConfiguration :

kubectl get staticgatewayconfiguration <gateway-config-name> \
  --namespace <namespace> \
  --output yaml

status Nella sezione verificare i campi seguenti:

  • egressIpPrefix contiene il prefisso IP pubblico assegnato o gli indirizzi IP privati.
  • gatewayServerProfile.ip e gatewayServerProfile.port identificare l'endpoint del gateway.
  • gatewayServerProfile.publicKey contiene la chiave pubblica per la configurazione di WireGuard, che definisce il tunnel crittografato tra i pod e il pool di nodi del gateway.

Eliminare un pool di nodi del gateway

Prima di eliminare un pool di nodi del gateway, rimuovere l'annotazione del gateway dai modelli di pod e sostituire i pod esistenti oppure eliminare i carichi di lavoro che lo usano. Eliminare quindi tutti StaticGatewayConfiguration i riferimenti al pool di nodi. Il comando attende il completamento dei finalizzatori di pulizia del controller prima che venga restituito:

kubectl delete staticgatewayconfiguration <gateway-config-name> \
  --namespace <namespace> \
  --wait=true \
  --timeout=5m

Dopo aver eliminato tutte le configurazioni che fanno riferimento al pool di nodi, eliminare il pool di nodi del gateway:

az aks nodepool delete --cluster-name <cluster-name> \
  --name <nodepool-name> \
  --resource-group <resource-group>

Disabilitare la funzionalità Gateway in uscita statico

Se il gateway statico in uscita non è più necessario, disabilitare la funzionalità e disinstallare l'operatore:

  1. Eliminare ogni StaticGatewayConfiguration e attendere il completamento della pulizia.

  2. Eliminare ogni pool di nodi del gateway.

    az aks nodepool delete --cluster-name <cluster-name> \
      --name <nodepool-name> \
      --resource-group <resource-group>
    
  3. Disabilitare il gateway in uscita statico.

    az aks update --name <cluster-name> --resource-group <resource-group> --disable-static-egress-gateway