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.
Attenzione
Kubernetes SIG Network e il Security Response Committee hanno annunciato il ritiro imminente del progetto NGINX in ingresso, con la manutenzione che termina a marzo 2026. Attualmente non è necessaria alcuna azione immediata per i cluster AKS che utilizzano il componente aggiuntivo di routing delle applicazioni con NGINX. Microsoft fornirà il supporto ufficiale per le patch di sicurezza critiche per le risorse di ingresso NGINX per il routing delle applicazioni fino a novembre 2026.
AKS è in linea con Kubernetes upstream passando a Gateway API come standard a lungo termine per la gestione del traffico L7 e degli ingressi. È consigliabile iniziare a pianificare il percorso di migrazione in base alla configurazione corrente:
- Utenti del componente aggiuntivo di instradamento dell'applicazione: i carichi di lavoro di produzione rimangono completamente supportati fino a novembre 2026. Eseguire la migrazione all'implementazione dell'API del gateway di instradamento dell'applicazione per un'esperienza di gestione del traffico in ingresso basata sull'API del gateway.
-
Gli utenti di OSS NGINX hanno diverse opzioni:
- Eseguire la migrazione al componente aggiuntivo di routing delle applicazioni con NGINX per trarre vantaggio dal supporto ufficiale fino a novembre 2026, mentre si pianifica la migrazione dell'API Gateway a lungo termine.
- Eseguire la migrazione all'implementazione dell'API del gateway di instradamento dell'applicazione per un'esperienza di gestione del traffico in ingresso basata sull'API del gateway.
- Eseguire la migrazione al Application Gateway per contenitori, che supporta sia l'API Ingress che l'API gateway.
- Requisiti avanzati per l'ingresso o per il service mesh: Valuta Gateway API per l'ingresso con il componente aggiuntivo service mesh Istio. È possibile usarlo per l'ingresso senza inserire sidecar nei carichi di lavoro. Se hai bisogno di limiti relativi alle dimensioni delle intestazioni e del corpo della richiesta, di script Lua o della limitazione della frequenza delle richieste, consulta le limitazioni e le alternative di Gateway API.
Il componente aggiuntivo di routing dell'applicazione supporta l'API gateway Kubernetes per la gestione del traffico in ingresso. L'API del gateway Kubernetes è un set di risorse che forniscono un framework standardizzato, orientato ai ruoli ed estendibile per la gestione del traffico, progettato per essere un successore e un'evoluzione dell'API in ingresso. L'implementazione dell'API di Gateway per il routing dell'applicazione mira quindi a fungere da successore del componente aggiuntivo NGINX gestito, basato sull'API Ingress legacy e smetterà di ricevere il supporto di Azure dopo novembre 2026. Se si usa NGINX gestito, è necessario eseguire la migrazione all'implementazione dell'API del gateway di routing dell'applicazione o a un'altra implementazione supportata entro novembre 2026.
Per i carichi di produzione, questo è il modello di Ingress predefinito consigliato in AKS Automatic. A partire da AKS versione 1.36, i nuovi cluster AKS Automatic usano per impostazione predefinita Gateway API di Kubernetes tramite il componente aggiuntivo di routing delle applicazioni. Per informazioni di base sulle impostazioni predefinite di produzione di AKS Automatic, vedi Che cos'è Servizio Azure Kubernetes (AKS) Automatic?
Confronto con il componente aggiuntivo service mesh Istio
L'implementazione del componente aggiuntivo di instradamento dell'applicazione con l'API del gateway Kubernetes distribuisce un piano di controllo Istio per gestire l'infrastruttura delle risorse dell'API stessa. Tuttavia, differisce dal componente aggiuntivo Mesh del servizio Istio per il servizio Azure Kubernetes nei seguenti modi:
| Feature | API di Gateway di instradamento delle applicazioni | Componente aggiuntivo di Istio Service Mesh |
|---|---|---|
| Nome classe gateway | approuting-istio |
istio |
| Inserimento sidecar e supporto per le definizioni di risorse personalizzate Istio | Non supportato. Gestisce solo l'infrastruttura per le risorse dell'API del gateway Kubernetes | Supportato |
| Revisione e aggiornamenti | Non aggiornato. Aggiornamento in loco per gli aggiornamenti secondari e patch delle versioni | Revisionato. Aggiornamento di tipo canary per gli aggiornamenti secondari delle versioni e in loco per gli aggiornamenti patch. |
Quando usare l'API gateway di routing dell'applicazione nell'ambiente di produzione
Usare questa implementazione come percorso di ingresso predefinito quando si vuole:
- Un ingresso gestito predefinito, adatto alla produzione, in AKS Automatic.
- Ingresso HTTP/HTTPS nativo dell'API del gateway Kubernetes.
- Infrastruttura gateway gestita con misure di sicurezza operative predefinite, ad esempio la scalabilità automatica e i budget di interruzione nei proxy del gateway.
Prendere in considerazione le alternative quando sono necessarie funzionalità esterne al supporto corrente in questo articolo, ad esempio:
- Gestione del traffico del service mesh
- Funzionalità elencate in Limitazioni.
Limitazioni
Non è possibile configurare, tramite questa implementazione, i limiti per le dimensioni delle intestazioni e del corpo della richiesta, gli script Lua o la limitazione del traffico locale e globale. Gateway API non dispone di campi standard per queste funzionalità e l'implementazione di App Routing Gateway API non supporta
EnvoyFilter.Se hai bisogno di queste funzionalità durante la migrazione da ingress-nginx, valuta l'ingress Gateway API con il componente aggiuntivo service mesh di Istio. È possibile usare
Gateway,HTTPRoutee altre risorse Gateway API senza iniettare sidecar nei carichi di lavoro e applicarvi un elementoEnvoyFiltercon ambito gateway per configurarle. I problemi causati dalla configurazioneEnvoyFilternon rientrano nel supporto tecnico di Azure. Se scegli il componente aggiuntivo service mesh Istio, devi avviare e completare gli aggiornamenti canary per gli aggiornamenti di revisione secondaria, anche quando lo usi solo per l'ingress.Testare ogni sostituzione per un'annotazione o un frammento di codice nginx rispetto alla revisione Istio. Ad esempio, il filtro buffer di Envoy applica un limite di dimensioni del corpo mantenendo il corpo completo della richiesta in memoria prima di inoltrarlo. Non esegue lo spill su disco.
Non è possibile abilitare l'implementazione dell'API del gateway di routing dell'applicazione e il componente aggiuntivo Mesh del servizio Istio contemporaneamente. È necessario disabilitare un primo e abilitare l'altro in un'operazione separata. Quando si esegue la transizione dal componente aggiuntivo della rete di servizi Istio all'implementazione dell'API del gateway di routing dell'applicazione, è necessario eliminare Istio GatewayClass e i CRD Istio dopo aver disabilitato il componente aggiuntivo Istio. Il componente aggiuntivo Istio installa i CRD (come
virtualservices.networking.istio.io,destinationrules.networking.istio.ioe altri nei gruppi APInetworking.istio.io,security.istio.io,telemetry.istio.ioeextensions.istio.io) che non vengono rimossi quando il componente aggiuntivo viene disattivato. Se questi CRD rimangono nel cluster, il piano di controllo Istio dell'API Gateway di routing dell'applicazione non riesce ad avviarsi. Eseguire il comando seguente per eliminarli:kubectl delete crd $(kubectl get crd -o name | grep -E 'istio\.io') kubectl delete gatewayclass istioAnnotazioni
Se sono presenti risorse personalizzate Istio (ad esempio VirtualServices o DestinationRules), l'eliminazione dei CRL elimina anche tali risorse. Assicurarsi che non siano più necessari prima di procedere.
L'implementazione dell'API gateway di routing dell'applicazione usa lo stesso elenco di opzioni consentite di personalizzazione delle risorse del componente aggiuntivo Istio per convalidare le personalizzazioni configMap per
Gatewayle risorse. I webhook gestiti dall'add-on bloccano le personalizzazioni che non sono presenti nella lista degli elementi consentiti.La gestione del traffico in uscita tramite l'implementazione dell'API del gateway di routing dell'applicazione non è supportata.
L'inserimento di file sidecar non gestiti da Microsoft (ad esempio, dati di telemetria personalizzati, registrazione o agenti di sicurezza) nei pod proxy del gateway Istio gestiti dal componente aggiuntivo di routing dell'applicazione non è ufficialmente supportato. Se si sceglie di inserire il proprio sidecar in un pod proxy gestito, Microsoft fornisce solo il supporto ottimale per eventuali problemi riscontrati.
La registrazione dell'accesso di Envoy è abilitata per impostazione predefinita nei pod proxy del gateway, ma il formato del log, l'ambito e il provider non possono essere personalizzati tramite l'API Istio
Telemetry. Per personalizzare, usare invece Gateway API Ingress sul componente aggiuntivo service mesh Istio.
Prerequisiti
Aggiornare la versione dell'interfaccia della riga di comando di Azure
È necessario usare azure-cli versione 2.86.0 o successiva. Eseguire az --version per trovare la azure-cli versione ed eseguire az upgrade per eseguire l'aggiornamento.
Abilitare le CRD di Managed Gateway API
Abilitare l'installazione dell'API del gateway gestito. L'uso dei CRD dell'API Gateway autogestiti con il componente aggiuntivo per il routing delle applicazioni non è supportato.
Comportamento predefinito automatico di AKS (AKS 1.36 e versioni successive)
Nei nuovi cluster automatici del servizio Azure Kubernetes che eseguono il servizio Azure Kubernetes 1.36 o versione successiva, l'API del gateway Kubernetes tramite il componente aggiuntivo di routing dell'applicazione è abilitata per impostazione predefinita.
In genere non è necessario eseguire il comando di abilitazione delle funzionalità, a meno che non si sia:
- Uso di un cluster esistente.
- Uso di una versione precedente di AKS.
- Riabilitare la funzionalità dopo averlo disabilitato.
Abilitare l'implementazione dell'API del gateway di routing dell'applicazione
Annotazioni
Se si crea un nuovo cluster automatico del servizio Azure Kubernetes nel servizio Azure Kubernetes 1.36 o versione successiva, questa funzionalità è abilitata per impostazione predefinita. Usare i comandi in questa sezione per i cluster AKS Standard, le versioni precedenti o i cluster esistenti che non dispongono già della funzionalità abilitata.
Abilitare durante la creazione del cluster
Esegui il comando seguente per abilitare l'implementazione dell'API Gateway per l'instradamento dell'applicazione durante la creazione di un cluster Standard di AKS:
# Set environment variables
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
# Enable the application routing Gateway API implementation during AKS Standard cluster creation
az aks create --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-gateway-api --enable-app-routing-istio
Abilitare per un cluster esistente
Eseguire il comando seguente per abilitare l'implementazione dell'API gateway di routing dell'applicazione per un cluster esistente:
# Set environment variables
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
# Enable the application routing Gateway API implementation for an existing cluster
az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --enable-gateway-api --enable-app-routing-istio
I pod istiod devono essere visualizzati nello spazio dei nomi aks-istio-system:
kubectl get pods -n aks-istio-system
NAME READY STATUS RESTARTS AGE
istiod-12a3bc45de-fghi6 1/1 Running 0 3m15s
istiod-78j9kl01mn-opqrs 1/1 Running 0 3m
Dovresti anche vedere il ValidatingWebhookConfiguration venire distribuito:
kubectl get validatingwebhookconfiguration
NAME WEBHOOKS AGE
aks-node-validating-webhook 1 117m
azure-service-mesh-ccp-validating-webhook 1 4m2s
Se l'installazione dell'API del gateway gestito è abilitata, deve essere visualizzata anche la creazione dell'oggetto ConfigMap per la personalizzazione del gateway Istio:
kubectl get cm -n aks-istio-system
NAME DATA AGE
...
istio-gateway-class-defaults 2 43s
...
Configurare l'ingresso con un gateway Kubernetes
Distribuire l'applicazione di esempio
Per prima cosa, distribuisci l'applicazione di esempio httpbin nello spazio dei nomi default
export ISTIO_RELEASE="release-1.27"
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml
Creare un Gateway di Kubernetes e un HTTPRoute
Distribuire quindi una configurazione dell'API del gateway nello spazio dei nomi default con gatewayClassName impostato su approuting-istio.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: httpbin-gateway
spec:
gatewayClassName: approuting-istio
listeners:
- name: http
port: 80
protocol: HTTP
allowedRoutes:
namespaces:
from: Same
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: httpbin
spec:
parentRefs:
- name: httpbin-gateway
hostnames: ["httpbin.example.com"]
rules:
- matches:
- path:
type: PathPrefix
value: /get
backendRefs:
- name: httpbin
port: 8000
EOF
Annotazioni
L'esempio precedente crea un servizio di bilanciamento del carico in ingresso esterno accessibile dall'esterno del cluster. È possibile aggiungere annotazioni per creare un servizio di bilanciamento del carico interno e personalizzare altre impostazioni del servizio di bilanciamento del carico.
Annotazioni
Per impostazione predefinita, il piano di controllo Istio aggiungerà il nome GatewayClass al nome delle risorse approuting-istio di cui effettua il provisioning per il Gateway. È possibile aggiungere alla risorsa Gateway in uso l'annotazione gateway.istio.io/name-override per sostituire il nome delle risorse con provisioning. I nomi delle risorse devono essere minori di 63 caratteri e devono essere un nome DNS valido.
Verificare che siano stati creati un Deployment, Service, HorizontalPodAutoscaler e PodDisruptionBudget per httpbin-gateway:
kubectl get deployment httpbin-gateway-approuting-istio
NAME READY UP-TO-DATE AVAILABLE AGE
httpbin-gateway-approuting-istio 2/2 2 2 6m41s
kubectl get service httpbin-gateway-approuting-istio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpbin-gateway-approuting-istio LoadBalancer 10.0.54.96 <external-ip> 15021:30580/TCP,80:32693/TCP 7m13s
kubectl get hpa httpbin-gateway-approuting-istio
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
httpbin-gateway-approuting-istio Deployment/httpbin-gateway-approuting-istio cpu: 3%/80% 2 5 2 8m13s
kubectl get pdb httpbin-gateway-approuting-istio
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
httpbin-gateway-approuting-istio 1 N/A 1 9m1s
Inviare una richiesta all'applicazione di esempio
Infine, provare a inviare una curl richiesta all'applicazione httpbin . Prima di tutto, impostare la INGRESS_HOST variabile di ambiente:
kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')
Provare quindi a inviare una richiesta HTTP a httpbin:
curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"
Verrà visualizzata una HTTP 200 risposta.
Annotazioni
Per proteggere il traffico in ingresso con l'implementazione dell'API gateway di routing dell'applicazione e integrarsi con DNS di Azure per la gestione dei nomi host, vedere Configurare DNS di Azure e TLS con l'implementazione dell'API del gateway di routing dell'applicazione per il flusso di lavoro automatizzato basato sull'operatore di routing dell'applicazione. Per un flusso di lavoro di terminazione TLS manuale che non si basa sull'integrazione dell'operatore, vedere Proteggere il traffico in ingresso con l'implementazione dell'API del gateway di routing dell'applicazione.
Per usare Terraform per creare un cluster AKS con l'implementazione Gateway API del routing dell'applicazione abilitata, è necessario:
-
Terraform versione
1.9.0o successiva installato. - CLI di Azure installata e autenticata. Eseguire
az --versionper trovare laazure-cliversione ed eseguireaz upgradeper eseguire l'aggiornamento. Si usa l'interfaccia della riga di comando di Azure (interfaccia della riga di comando di Azure) per connettersi al cluster dopo che Terraform lo ha creato. -
kubectl installato. È possibile installarlo in locale usando il
az aks install-clicomando . Utilizzakubectlper distribuire l'applicazione di esempio e le risorse dell'API Gateway.
Distribuisci un cluster AKS con l'implementazione di Gateway API per il routing delle applicazioni con Terraform
Questa sezione illustra come usare Terraform per distribuire un cluster di Azure Kubernetes Service (AKS) con l'installazione di Managed Gateway API e l'implementazione di Gateway API per il routing delle applicazioni abilitata.
Annotazioni
Il codice di esempio per questa sezione si trova nel repository Azure Terraform GitHub. È possibile visualizzare il file di log contenente i risultati del test delle versioni correnti e precedenti di Terraform.
Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure.
Questo esempio distribuisce:
- Un gruppo di risorse.
- Un cluster AKS che usa il plug-in di rete Azure CNI e un load balancer Standard.
- L'installazione dell'API gateway gestito e l'implementazione dell'API del gateway di routing dell'applicazione, entrambe abilitate nel cluster tramite il provider AzAPI. Abilitando entrambe le impostazioni, la GatewayClass gestita da AKS
approuting-istiodiventa disponibile nel cluster.
Creare una directory per testare ed eseguire il codice Terraform di esempio e impostarlo come directory corrente.
Creare un file denominato
main.tfe inserire il codice seguente:terraform { required_version = ">= 1.9.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } azapi = { source = "Azure/azapi" version = "~> 2.0" } random = { source = "hashicorp/random" version = "~> 3.0" } } } provider "azurerm" { features {} } provider "azapi" { enable_preflight = true } resource "random_string" "suffix" { length = 6 upper = false special = false } locals { location = "eastus" resource_group_name = "rg-aks-gateway-api-${random_string.suffix.result}" cluster_name = "aks-gwapi-${random_string.suffix.result}" } resource "azurerm_resource_group" "example" { name = local.resource_group_name location = local.location } resource "azurerm_kubernetes_cluster" "example" { name = local.cluster_name location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name dns_prefix = local.cluster_name role_based_access_control_enabled = true default_node_pool { name = "system" node_count = 2 vm_size = "Standard_D4s_v4" upgrade_settings { drain_timeout_in_minutes = 0 max_surge = "10%" node_soak_duration_in_minutes = 0 } } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" } } resource "azapi_update_resource" "gateway_api_app_routing" { type = "Microsoft.ContainerService/managedClusters@2026-03-01" resource_id = azurerm_kubernetes_cluster.example.id body = { properties = { ingressProfile = { gatewayAPI = { installation = "Standard" } webAppRouting = { gatewayAPIImplementations = { appRoutingIstio = { mode = "Enabled" } } } } } } response_export_values = [ "properties.ingressProfile" ] depends_on = [ azurerm_kubernetes_cluster.example ] } output "resource_group_name" { value = azurerm_resource_group.example.name } output "cluster_name" { value = azurerm_kubernetes_cluster.example.name } output "get_credentials_command" { value = "az aks get-credentials --resource-group ${azurerm_resource_group.example.name} --name ${azurerm_kubernetes_cluster.example.name} --overwrite-existing" }Inizializzare Terraform eseguendo il
terraform initcomando . Questo comando scarica i provider di Azure necessari per gestire le risorse Azure con Terraform.terraform initFormattare e convalidare la configurazione eseguendo i
terraform fmtcomandi eterraform validate.terraform fmt terraform validateCrea un piano di esecuzione di Terraform eseguendo il comando
terraform plan. Questo comando mostra le risorse create o modificate da Terraform nella sottoscrizione Azure.terraform planApplica il piano di esecuzione di Terraform eseguendo il comando
terraform apply. Questo comando crea le risorse definite nelmain.tffile nella sottoscrizione Azure. Quando richiesto, immettereyesper confermare.terraform apply
Connettersi al cluster AKS usando Terraform
Ottenere il gruppo di risorse e i nomi dei cluster dagli output di Terraform.
terraform output -raw resource_group_name terraform output -raw cluster_nameConfigura
kubectlper connetterti al tuo cluster utilizzando il comandoaz aks get-credentials. Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarle. Sostituire<resource-group-name>e<cluster-name>con i valori del passaggio precedente. In alternativa, eseguireterraform output -raw get_credentials_commandper ottenere il comando completo pronto per l'esecuzione.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Verificare che il cluster sia in esecuzione eseguendo il
kubectl get nodescomando .kubectl get nodes
Verificare la configurazione dell'API gateway usando Terraform
Verifica che i pod
istiodsiano in esecuzione nel namespaceaks-istio-system.kubectl get pods -n aks-istio-systemVerificare che GatewayClass
approuting-istioesista e che sia accettato.kubectl get gatewayclassGatewayClass
approuting-istiodeve restituireTruenellaACCEPTEDcolonna .
Configurare l'ingresso usando un gateway Kubernetes con Terraform
Distribuire l'applicazione di esempio usando Terraform
Distribuisci l'applicazione di esempio nel namespace default:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.27/samples/httpbin/httpbin.yaml
Verifica che il httpbin pod e il servizio siano disponibili:
kubectl get pods -l app=httpbin
kubectl get svc httpbin
Creare le risorse gateway e HTTPRoute usando Terraform
L'esempio di implementazione della Gateway API per il routing delle applicazioni include un Gateway manifest che crea un listener HTTP sulla porta 80 e usa la approuting-istio GatewayClass gestita da AKS.
Creare un file denominato
gateway.yamle inserire il codice seguente:apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: httpbin-gateway spec: gatewayClassName: approuting-istio listeners: - name: http port: 80 protocol: HTTP allowedRoutes: namespaces: from: SameApplicare la
Gatewayconfigurazione:kubectl apply -f gateway.yamlL'esempio include anche un
HTTPRoutemanifest che instrada le richieste perhttpbin.example.com/getal serviziohttpbinsulla porta8000.Creare un file denominato
httproute.yamle inserire il codice seguente:apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: httpbin spec: parentRefs: - name: httpbin-gateway hostnames: - httpbin.example.com rules: - matches: - path: type: PathPrefix value: /get backendRefs: - name: httpbin port: 8000Applicare la
HTTPRouteconfigurazione:kubectl apply -f httproute.yaml
Annotazioni
L'esempio precedente crea un servizio di bilanciamento del carico in ingresso esterno accessibile dall'esterno del cluster. È possibile aggiungere annotazioni per creare un servizio di bilanciamento del carico interno e personalizzare altre impostazioni del servizio di bilanciamento del carico.
Verificare che siano stati creati un Deployment, Service, HorizontalPodAutoscaler e PodDisruptionBudget per httpbin-gateway:
kubectl get deployment httpbin-gateway-approuting-istio
kubectl get service httpbin-gateway-approuting-istio
kubectl get hpa httpbin-gateway-approuting-istio
kubectl get pdb httpbin-gateway-approuting-istio
Inviare una richiesta all'applicazione di esempio usando Terraform
Attendere che il gateway segnala una Programmed condizione, quindi ottenere il relativo indirizzo esterno:
kubectl wait --for=condition=programmed gateways.gateway.networking.k8s.io httpbin-gateway
export INGRESS_HOST=$(kubectl get gateways.gateway.networking.k8s.io httpbin-gateway -ojsonpath='{.status.addresses[0].value}')
Quindi, inviare una richiesta a httpbin attraverso il Gateway:
curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"
Verrà visualizzata una HTTP 200 risposta.
Registrazione di accesso
L'implementazione del Gateway API per il routing delle applicazioni abilita per impostazione predefinita il logging degli accessi di Envoy su tutti i pod proxy gestiti Gateway. I log di accesso vengono scritti nell'output standard del contenitore proxy nel formato di testo Envoy predefinito. È possibile visualizzare i log usando kubectl logs:
kubectl logs deployment/<your-gateway-name>-approuting-istio
Ogni richiesta gestita dal gateway produce una riga di log contenente dettagli, ad esempio il metodo HTTP, il percorso, il codice di risposta, il servizio upstream e le dimensioni di richiesta e risposta. Questo dettaglio semplifica l'osservazione del traffico in ingresso e la risoluzione dei problemi di routing senza alcuna configurazione aggiuntiva.
Controllo delle versioni e aggiornamenti
L'implementazione dell'API Gateway per il routing delle applicazioni distribuisce e aggiorna il piano di controllo Istio in base alla versione di Kubernetes del cluster AKS, sia per gli aggiornamenti delle versioni secondarie che per quelli delle patch. Questo modello in-place è allineato alle impostazioni predefinite di produzione di AKS Automatic, in cui la gestione del ciclo di vita della piattaforma è progettata per ridurre le operazioni manuali.
La versione di Istio è la versione secondaria di Istio massima supportata e compatibile con la versione del servizio Azure Kubernetes del cluster. Ad esempio, se si utilizza AKS versione 1.34, la versione secondaria massima di Istio supportata che può essere installata (a partire da marzo 2026) è 1.28. Tenere presente che la versione massima di Istio supportata per una determinata versione di Kubernetes può variare tra i cluster con supporto a lungo termine (LTS) e i cluster non LTS.
Per trovare la versione secondaria massima di Istio supportata per la tua versione di Kubernetes di AKS, consulta il calendario delle versioni del componente aggiuntivo service mesh. Sebbene l'implementazione dell'API Gateway per il routing dell'applicazione non sia soggetta a revisione, la versione secondaria del piano di controllo Istio corrisponde alla revisione indicata dell'add-on del service mesh (ad esempio, per l'add-on del service mesh asm-1-28, la versione secondaria del piano di controllo Istio per il routing dell'applicazione è 1.28). È anche possibile visualizzare la versione secondaria di Istio controllando la versione della patch nell'immagine di distribuzione istiod:
kubectl get deployment istiod -n aks-istio-system -o=jsonpath="{.spec.template.spec.containers[*].image}"
Aggiornamenti
Gli aggiornamenti patch e secondari della versione del piano di controllo Istio per l'implementazione dell'API del gateway di instradamento dell'applicazione avvengono in loco. Gli aggiornamenti della versione patch vengono eseguiti automaticamente nell'ambito dei rilasci di AKS. Gli aggiornamenti delle versioni minori possono essere attivati automaticamente o manualmente a seconda della versione di AKS Kubernetes e della tempistica delle versioni minori di Istio. Gli aggiornamenti di versione secondaria si verificano nei seguenti scenari:
- Il cluster AKS viene aggiornato a una nuova versione a cui è associata una versione massima supportata di Istio più elevata. Il piano di controllo Istio viene aggiornato alla versione secondaria successiva durante l'aggiornamento del cluster del servizio Azure Kubernetes.
- Viene rilasciata una nuova versione di Istio per il servizio Azure Kubernetes e diventa la versione istio massima supportata per la versione del cluster del servizio Azure Kubernetes. Dopo l'implementazione nell'area, il piano di controllo Istio nel cluster viene aggiornato automaticamente alla nuova versione secondaria. Per tenere traccia delle nuove versioni di Istio e vedere quando la nuova versione viene rilasciata nell'area, seguire le note sulla versione del servizio Azure Kubernetes e lo strumento di rilevamento delle versioni del servizio Azure Kubernetes.
Durante il processo di aggiornamento possono verificarsi interruzioni del traffico. Per ridurre al minimo le interruzioni durante gli aggiornamenti, il componente aggiuntivo per il routing dell'applicazione crea un Horizontal Pod Autoscaler (HPA) con un minimo di due repliche e un PodDisruptionBudget (PDB) con una disponibilità minima pari a uno per ogni Gateway. È possibile personalizzare queste risorse per modificare queste impostazioni.
Personalizzazioni delle risorse
Personalizzazione della scalabilità automatica orizzontale dei pod (HPA) del piano di controllo
L'implementazione dell'API del gateway di instradamento dell'applicazione supporta la personalizzazione della scalabilità automatica orizzontale dei pod (HPA) del piano di controllo Istio. La istiod risorsa HPA ha le configurazioni predefinite seguenti:
- Repliche minime: due
- Numero massimo di repliche: cinque
- Utilizzo CPU: 80%
Annotazioni
Per evitare conflitti con PodDisruptionBudget, l'implementazione dell'API Gateway per il routing dell'applicazione non consente di impostare minReplicas a un valore inferiore al valore predefinito iniziale di 2.
La configurazione HPA può essere modificata tramite patch e modifiche dirette. Esempio:
kubectl patch hpa istiod -n aks-istio-system --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'
Personalizzazione delle risorse del gateway
L'implementazione dell'API di gateway per il routing delle applicazioni supporta la personalizzazione delle risorse tramite annotazioni e ConfigMaps. Il routing delle applicazioni usa lo stesso elenco di elementi consentiti di personalizzazione delle risorse del componente aggiuntivo Istio service mesh per la personalizzazione delle risorse dell'API gateway. Seguire la procedura descritta nella documentazione dell'API del gateway del componente aggiuntivo Istio per configurare le risorse generate per Gateways e per vedere quali campi rientrano nell'elenco di elementi consentiti.
Annotazioni
L'oggetto istio-gateway-class-defaults ConfigMap viene sottoposto a provisioning e riconciliato dal servizio Azure Kubernetes quando le definizioni di risorse personalizzate dell'API del gateway gestito e l'implementazione dell'API del gateway di instradamento dell'applicazione vengono abilitati contemporaneamente. Se in precedenza hai creato ConfigMap istio-gateway-class-defaults nello spazio dei nomi aks-istio-system manualmente, è necessario eliminare l'istanza di ConfigMap autogestita prima di abilitare i CRD dell'API del gateway gestito per evitare conflitti con la riconciliazione del ConfigMap gestito da AKS.
Annotazioni
L'implementazione dell'API Gateway per il routing delle applicazioni aggiunge annotazioni di Azure Load Balancer al servizio Gateway per configurare i probe di integrità per l'impostazione externalTrafficPolicy predefinita "Cluster". Se si imposta spec.externalTrafficPolicy su "Local", è necessario rimuovere le annotazioni seguenti sia nella ConfigMap a livello di GatewayClass sia nella ConfigMap per gateway:
service: |
spec:
externalTrafficPolicy: Local
metadata:
annotations:
service.beta.kubernetes.io/port_80_health-probe_port:
service.beta.kubernetes.io/port_80_health-probe_protocol:
service.beta.kubernetes.io/port_80_health-probe_request-path:
Disabilitare l'implementazione dell'API del gateway di routing dell'applicazione
Eseguire il comando seguente per disabilitare l'implementazione dell'API del gateway di routing dell'applicazione:
az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --disable-app-routing-istio
Pulire le risorse
Eseguire i comandi seguenti per eliminare le Gateway risorse e HTTPRoute :
kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
kubectl delete httproute httpbin
Se è stato creato un oggetto ConfigMap per personalizzare Gateway, eseguire il comando seguente per eliminare ConfigMap:
kubectl delete configmap gw-options
Se è stato creato un secretProviderClass e un segreto da usare per la terminazione TLS, eliminare le risorse seguenti:
kubectl delete secret httpbin-credential
kubectl delete pod secrets-store-sync-httpbin
kubectl delete secretproviderclass httpbin-credential-spc
Pulire le risorse usando Terraform
In questa sezione, hai distribuito un'applicazione di esempio con ambito namespace e risorse dell'API Gateway. Se queste risorse Kubernetes non sono più necessarie, eliminarle prima di rimuovere l'infrastruttura di Azure sottostante.
Eliminare HTTPRoute, Gateway e l'applicazione di esempio utilizzando il comando kubectl delete:
kubectl delete -f httproute.yaml
kubectl delete -f gateway.yaml
kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.27/samples/httpbin/httpbin.yaml
Warning
Il comando seguente rimuove il gruppo di risorse, il cluster del servizio Azure Kubernetes e tutte le altre risorse associate al gruppo di risorse creato per questo esempio. Se sono state distribuite altre risorse all'interno di questo gruppo di risorse, anche il comando li elimina.
Rimuovere le risorse Azure create da Terraform usando il terraform destroy comando . Quando richiesto, immettere yes per confermare.
terraform destroy
Contenuti correlati
- Che cos'è Servizio Azure Kubernetes (AKS) Automatic?
- Creare un cluster automatico di AKS
- Configurare DNS di Azure e TLS con l'implementazione dell'API del gateway di routing dell'applicazione
- Proteggere il traffico in ingresso con l'implementazione dell'API gateway di routing dell'applicazione (configurazione manuale)