Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Anwendungsrouting-Add-On unterstützt die Kubernetes-Gateway-API für das Management von Ingress-Traffic. Die Kubernetes-Gateway-API ist eine Reihe von Ressourcen, die ein standardisiertes, rollenorientiertes und erweiterbares Framework für die Datenverkehrsverwaltung bereitstellen, das als Nachfolger und Weiterentwicklung der Ingress-API konzipiert ist. Die Implementierung der Anwendungsroutinggateway-API soll daher als Nachfolger des verwalteten NGINX-Add-Ons dienen, das auf der älteren Ingress-API basiert und nach November 2026 keine Azure-Unterstützung mehr von Azure erhält. Wenn Sie verwaltetes NGINX verwenden, müssen Sie bis November 2026 zur Gateway-API für Anwendungsrouting-Implementierung oder einer anderen unterstützten Implementierung migrieren.
Für Produktionsworkloads ist dieses Modell das empfohlene Standardeingangsmodell für AKS Automatic. Ab AKS-Version 1.36 nutzen neue AKS Automatic-Cluster standardmäßig die Kubernetes Gateway API über das Anwendungsrouting-Add-On. Informationen zu den Standardeinstellungen für die automatische AKS-Produktion finden Sie unter "Was ist Azure Kubernetes Service (AKS) Automatisch?
Vergleich mit dem Istio-Service-Mesh-Add-on
Die Api-Implementierung des Anwendungsrouting-Add-Ons Kubernetes Gateway stellt eine Istio-Steuerungsebene bereit, um die Infrastruktur für Kubernetes-Gateway-API-Ressourcen zu verwalten. Es unterscheidet sich jedoch von dem Istio-Service-Mesh-Add-On für AKS in folgender Hinsicht:
| Funktion | Anwendungs-Routing-Gateway-API | Istio Service Mesh Add-on |
|---|---|---|
| Name der Gatewayklasse | approuting-istio |
istio |
| Sidecar-Injektion und Istio CRD-Unterstützung | Nicht unterstützt. Verwaltet nur infrastruktur für Kubernetes Gateway-API-Ressourcen | Unterstützt |
| Überarbeitung und Aktualisierungen | Nicht überarbeitet. In-Place-Upgrade für Minor- und Patch-Versions-Updates | Überarbeitet. Upgrade über Canary-Upgrades für Minor-Versionsupdates und In-Place für Patch-Versionsupdates |
Wann die Gateway-API für das Anwendungsrouting in Produktionsumgebungen verwendet werden sollte
Verwenden Sie diese Implementierung bei Bedarf als Standardeingangspfad:
- Ein produktionsbereiter, verwalteter Eingangsstandard für AKS Automatic.
- Kubernetes-Gateway-API-nativer HTTP/HTTPS-Eingang.
- Verwaltete Gateway-Infrastruktur mit integrierten betrieblichen Schutzmaßnahmen wie automatischer Skalierung und Disruption-Budgets für Gateway-Proxys.
Erwägen Sie Alternativen, wenn Sie Funktionen außerhalb der aktuellen Unterstützung in diesem Artikel benötigen, z. B.:
- Traffic-Management im Service Mesh
- In "Einschränkungen" aufgeführte Features.
Einschränkungen
Sie können über diese Implementierung keine Beschränkungen für die Größe von Anforderungsheadern und -texten, keine Lua-Skripte und keine lokale oder globale Ratenbegrenzung konfigurieren. Die Gateway-API hat keine Standardfelder für diese Funktionen, und die App Routing Gateway API-Implementierung unterstützt
EnvoyFilternicht.Wenn Sie diese Funktionen bei der Migration von ingress-nginx benötigen, sollten Sie Gateway API Ingress mit dem Istio-Service-Mesh-Add-on in Betracht ziehen. Sie können
HTTPRoute,EnvoyFilterund andere Gateway-API-Ressourcen verwenden, ohne Sidecars in Ihre Workloads zu injizieren, und ein gateway-spezifischesGatewayanwenden, um sie zu konfigurieren. Probleme, die durch dieEnvoyFilterKonfiguration verursacht werden, fallen nicht unter den Azure-Support. Wenn Sie das Istio-Dienstgitter-Add-On auswählen, müssen Sie Canary-Upgrades für kleinere Überarbeitungsupdates initiieren und abschließen, auch wenn sie nur für den Ingress verwendet werden.Testen Sie jede Ersetzung für eine nginx-Annotation oder ein Snippet mit Ihrer Istio-Revision. Beispielsweise erzwingt der Pufferfilter von Envoy ein Grenzwert für die Textkörpergröße, indem er den vollständigen Anforderungstext im Arbeitsspeicher hält, bevor er weitergeleitet wird. Es wird nicht auf den Datenträger übergelaufen.
Sie können die Gateway-API-Implementierung für Application Routing und das Add-on für das Istio Service Mesh nicht gleichzeitig aktivieren. Sie müssen eins zuerst deaktivieren und den anderen in einem separaten Vorgang aktivieren. Beim Übergang vom Istio Service Mesh Add-On zur Gateway-API-Implementierung für das Anwendungsrouting müssen Sie die Istio GatewayClass und Istio-CRDs löschen, nachdem Sie das Istio-Add-On deaktiviert haben. Das Istio-Add-on installiert CRDs (wie z. B.
virtualservices.networking.istio.io,destinationrules.networking.istio.iound andere in den API-Gruppennetworking.istio.io,security.istio.io,telemetry.istio.ioundextensions.istio.io), die nicht entfernt werden, wenn das Add-on deaktiviert wird. Wenn diese CRDs im Cluster verbleiben, kann die Istio-Steuerungsebene der Gateway-API für das Anwendungsrouting nicht gestartet werden. Führen Sie den folgenden Befehl aus, um sie zu löschen:kubectl delete crd $(kubectl get crd -o name | grep -E 'istio\.io') kubectl delete gatewayclass istioHinweis
Wenn Sie über vorhandene benutzerdefinierte Istio-Ressourcen (z. B. VirtualServices oder DestinationRules) verfügen, werden beim Löschen der CRDs auch diese Ressourcen gelöscht. Stellen Sie sicher, dass Sie sie nicht mehr benötigen, bevor Sie fortfahren.
Die Implementierung der Gateway-API für das Anwendungs-Routing verwendet dieselbe Allowlist zur Anpassung von Ressourcen wie das Istio-Add-On, um Anpassungen der ConfigMap für
Gateway-Ressourcen zu validieren. Verwaltete Add-On-Webhooks blockieren Anpassungen, die nicht in der Zulassungsliste enthalten sind.Die Verwaltung des Egress-Datenverkehrs über die Implementierung der Application Routing Gateway API wird nicht unterstützt.
Das Einschleusen von nicht von Microsoft verwalteten Sidecars (z. B. benutzerdefinierte Telemetrie-, Protokollierungs- oder Sicherheits-Agents) in die vom Anwendungsrouting-Add-On verwalteten Istio-Gateway-Proxy-Pods wird offiziell nicht unterstützt. Sollten Sie sich dafür entscheiden, einen eigenen Sidecar in einen verwalteten Proxy-Pod einzubinden, bietet Microsoft bei eventuell auftretenden Problemen lediglich Support nach bestem Bemühen an.
Envoy-Zugriffsprotokollierung ist standardmäßig auf Gatewayproxy-Pods aktiviert, das Protokollformat, der Bereich und der Anbieter können jedoch nicht über die Istio-API
Telemetryangepasst werden. Verwenden Sie stattdessen Gateway API Ingress für das Istio-Service-Mesh-Add-on, um Anpassungen vorzunehmen.
Voraussetzungen
Aktualisieren der Azure CLI-Version
Sie müssen azure-cli Version 2.86.0 oder höher verwenden. Führen Sie az --version aus, um Ihre azure-cli-Version zu finden, und führen Sie az upgrade zum Aktualisieren aus.
Aktivieren Sie verwaltete Gateway-API-CRDs
Aktivieren Sie die Installation der verwalteten Gateway-API. Die Verwendung von selbstverwalteten Gateway-API-CRDs mit dem Anwendungsrouting-Add-On wird nicht unterstützt.
Automatisches AKS-Standardverhalten (AKS 1.36 und höher)
Bei neuen automatischen AKS-Clustern, die AKS 1.36 oder höher ausführen, ist die Kubernetes-Gateway-API über das Anwendungsrouting-Add-On standardmäßig aktiviert.
Normalerweise müssen Sie den Featureaktivierungsbefehl nicht ausführen, es sei denn, Sie sind:
- Verwenden eines vorhandenen Clusters.
- Verwenden einer früheren AKS-Version.
- Erneutes Aktivieren der Funktion nach dem Deaktivieren.
Aktivierung der API-Implementierung des Anwendungs-Routing-Gateways
Hinweis
Wenn Sie einen neuen automatischen AKS-Cluster auf AKS 1.36 oder höher erstellen, ist dieses Feature standardmäßig aktiviert. Verwenden Sie die Befehle in diesem Abschnitt für AKS-Standardcluster, frühere Versionen oder vorhandene Cluster, die das Feature noch nicht aktiviert haben.
Aktivieren während der Clustererstellung
Führen Sie den folgenden Befehl aus, um die Gateway API-Implementierung für Application Routing während der Erstellung des AKS-Standardclusters zu aktivieren:
# 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
Aktivieren für einen vorhandenen Cluster
Führen Sie den folgenden Befehl aus, um die Anwendungsroutinggateway-API-Implementierung für einen vorhandenen Cluster zu aktivieren:
# 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
Sie sollten istiod Pods im aks-istio-system Namespace sehen:
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
Sie sollten auch sehen, dass die ValidatingWebhookConfiguration bereitgestellt werden:
kubectl get validatingwebhookconfiguration
NAME WEBHOOKS AGE
aks-node-validating-webhook 1 117m
azure-service-mesh-ccp-validating-webhook 1 4m2s
Wenn die Installation der verwalteten Gateway-API aktiviert ist, sollten Sie auch sehen, dass die ConfigMap zur Anpassung des Istio-Gateways erstellt wird.
kubectl get cm -n aks-istio-system
NAME DATA AGE
...
istio-gateway-class-defaults 2 43s
...
Konfigurieren des Eingangs mithilfe eines Kubernetes-Gateways
Bereitstellen der Beispielanwendung
Stellen Sie zunächst die Beispielanwendung httpbin im default Namespace bereit:
export ISTIO_RELEASE="release-1.27"
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml
Erstellen von Kubernetes-Gateway und HTTPRoute
Stellen Sie als Nächstes eine Gateway-API-Konfiguration im default Namespace bereit, wobei gatewayClassName auf approuting-istio gesetzt ist.
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
Hinweis
Im obigen Beispiel wird ein externer Eingangslastenausgleichsdienst erstellt, auf den von außerhalb des Clusters zugegriffen werden kann. Sie können Anmerkungen hinzufügen, um einen internen Lastenausgleich zu erstellen und andere Einstellungen für den Lastenausgleich anzupassen.
Hinweis
Standardmäßig hängt die Steuerungsebene von Istio den GatewayClass Namen approuting-istio an den Namen der Ressourcen an, die sie für den Gateway bereitstellt. Sie können Ihre Gateway Ressource mit gateway.istio.io/name-override kommentieren, um den Namen der bereitgestellten Ressourcen zu überschreiben. Die Ressourcennamen müssen kleiner als 63 Zeichen sein und ein gültiger DNS-Name sein.
Stellen Sie sicher, dass ein Deployment, ein Service, ein HorizontalPodAutoscaler und ein PodDisruptionBudget für httpbin-gateway erstellt werden.
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
Anforderung an Beispielanwendung senden
Versuchen Sie schließlich, eine curl Anforderung an die httpbin Anwendung zu senden. Legen Sie zunächst die Umgebungsvariable INGRESS_HOST fest:
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}')
Versuchen Sie dann, eine HTTP-Anforderung an httpbin:
curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"
Es sollte eine HTTP 200-Antwort angezeigt werden.
Hinweis
Informationen zum Sichern des eingehenden Datenverkehrs mit der Gateway-API-Implementierung für das Anwendungsrouting und zur Integration mit Azure DNS für die Hostnamenverwaltung finden Sie unter Konfigurieren von Azure DNS und TLS mit der Gateway-API-Implementierung für das Anwendungsrouting, um den automatisierten Workflow mit dem Anwendungsrouting-Operator zu nutzen. Einen manuellen TLS-Beendigungsworkflow, der nicht auf die Integration des Operators angewiesen ist, finden Sie unter Secure ingress traffic with the application routing Gateway API implementation.
Um Terraform zum Erstellen eines AKS-Clusters mit aktivierter Implementierung der Anwendungsroutinggateway-API zu verwenden, benötigen Sie Folgendes:
-
Terraform in Version
1.9.0oder höher installiert. - Azure CLI installiert und authentifiziert. Führen Sie
az --versionaus, um Ihreazure-cli-Version zu finden, und führen Sieaz upgradezum Aktualisieren aus. Sie verwenden die Azure CLI, um eine Verbindung mit dem Cluster herzustellen, nachdem Terraform es erstellt hat. -
kubectl installiert. Sie können es lokal mithilfe des
az aks install-cliBefehls installieren. Sie verwendenkubectl, um die Beispielanwendung und Gateway-API-Ressourcen bereitzustellen.
Stellen Sie einen AKS-Cluster mit der Gateway-API-Implementierung für das Anwendungsrouting mithilfe von Terraform bereit
In diesem Abschnitt wird gezeigt, wie Sie Terraform verwenden, um einen AKS-Cluster mit der Installation der Managed Gateway API und aktivierter Gateway-API-Implementierung für das Anwendungsrouting bereitzustellen.
Hinweis
Der Beispielcode für diesen Abschnitt befindet sich im Azure Terraform GitHub Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.
Sehen Sie weitere Artikel und Beispielcode, die zeigen, wie Terraform zur Verwaltung von Azure-Ressourcen verwendet wird.
In diesem Beispiel wird Folgendes bereitgestellt:
- Eine Ressourcengruppe.
- Ein AKS-Cluster, das das Azure CNI-Netzwerkplugin und einen Standard-Lastenausgleich verwendet.
- Die Installation der verwalteten GatewayAPI und die Gateway-API-Implementierung für das Anwendungsrouting, die beide über den AzAPI-Provider im Cluster aktiviert sind. Durch Aktivieren beider Einstellungen wird die vom AKS verwaltete
approuting-istioGatewayClass im Cluster verfügbar.
Erstellen Sie ein Verzeichnis zum Testen und Ausführen des Terraform-Beispielcodes, und machen Sie es zum aktuellen Verzeichnis.
Erstellen Sie eine Datei namens
main.tf, und fügen Sie den folgenden Code ein: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" }Initialisieren Sie Terraform, indem Sie den
terraform initBefehl ausführen. Mit diesem Befehl werden die Azure Anbieter heruntergeladen, die zum Verwalten von Azure Ressourcen mit Terraform erforderlich sind.terraform initFormatieren und validieren Sie die Konfiguration, indem Sie die Befehle
terraform fmtundterraform validateausführen.terraform fmt terraform validateErstellen Sie einen Terraform-Ausführungsplan, indem Sie den
terraform planBefehl ausführen. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellt oder ändert.terraform planWenden Sie den Terraform-Ausführungsplan an, indem Sie den
terraform applyBefehl ausführen. Mit diesem Befehl werden die ressourcen erstellt, die in Ihrermain.tfDatei in Ihrem Azure-Abonnement definiert sind. Wenn Sie dazu aufgefordert werden, geben Sieyesdie Eingabetaste ein, um dies zu bestätigen.terraform apply
Herstellen einer Verbindung mit dem AKS-Cluster mithilfe von Terraform
Rufen Sie die Ressourcengruppen- und Clusternamen aus den Terraform-Ausgaben ab.
terraform output -raw resource_group_name terraform output -raw cluster_nameKonfigurieren Sie
kubectl, um mit dem Befehlaz aks get-credentialseine Verbindung mit Ihrem Cluster herzustellen. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert. Ersetzen Sie<resource-group-name>und<cluster-name>durch die Werte aus dem vorherigen Schritt. Alternativ können Sie ausführenterraform output -raw get_credentials_command, um den vollständigen, einsatzbereiten Befehl zu erhalten.az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>Überprüfen Sie, ob der Cluster ausgeführt wird, indem Sie den
kubectl get nodesBefehl ausführen.kubectl get nodes
Überprüfen der Gateway-API-Konfiguration mithilfe von Terraform
Vergewissern Sie sich, dass die
istiodPods imaks-istio-systemNamespace ausgeführt werden.kubectl get pods -n aks-istio-systemVergewissern Sie sich, dass die
approuting-istioGatewayClass vorhanden ist und akzeptiert wird.kubectl get gatewayclassDie
approuting-istioGatewayClass sollteACCEPTEDin derTrueSpalte zurückgeben.
Ingress mit einem Kubernetes-Gateway in Terraform konfigurieren
Bereitstellen der Beispielanwendung mithilfe von Terraform
Stellen Sie die Beispielanwendung httpbin im default Namespace bereit:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.27/samples/httpbin/httpbin.yaml
Stellen Sie sicher, dass der httpbin Pod und der Dienst verfügbar sind:
kubectl get pods -l app=httpbin
kubectl get svc httpbin
Erstellen der Gateway- und HTTPRoute-Ressourcen mithilfe von Terraform
Das Implementierungsbeispiel für die Gateway-API des Anwendungsroutings enthält ein Gateway-Manifest, das einen HTTP-Listener auf Port 80 erstellt und die von AKS verwaltete approuting-istio GatewayClass verwendet.
Erstellen Sie eine Datei namens
gateway.yaml, und fügen Sie den folgenden Code ein: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: SameWenden Sie die
GatewayKonfiguration an:kubectl apply -f gateway.yamlDas Beispiel enthält auch ein
HTTPRouteManifest, das Anforderungenhttpbin.example.com/getan denhttpbinDienst am Port8000weiter leitet.Erstellen Sie eine Datei namens
httproute.yaml, und fügen Sie den folgenden Code ein: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: 8000Wenden Sie die
HTTPRouteKonfiguration an:kubectl apply -f httproute.yaml
Hinweis
Im vorherigen Beispiel wird ein externer Eingangslastenausgleichsdienst erstellt, auf den von außerhalb des Clusters zugegriffen werden kann. Sie können Anmerkungen hinzufügen, um einen internen Lastenausgleich zu erstellen und andere Einstellungen für den Lastenausgleich anzupassen.
Stellen Sie sicher, dass ein Deployment, ein Service, ein HorizontalPodAutoscaler und ein PodDisruptionBudget für httpbin-gateway erstellt werden.
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
Senden einer Anforderung an die Beispielanwendung mithilfe von Terraform
Warten Sie, bis das Gateway eine Programmed Bedingung meldet, und rufen Sie dann die externe Adresse ab:
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}')
Senden Sie dann über das Gateway eine Anfrage an httpbin:
curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"
Es sollte eine HTTP 200-Antwort angezeigt werden.
Zugriffsprotokollierung
Die Gateway-API-Implementierung für das Anwendungsrouting aktiviert standardmäßig die Envoy-Zugriffsprotokollierung für alle verwalteten Gateway-Proxy-Pods. Zugriffsprotokolle werden in die Standardausgabe des Proxycontainers im Standardtextformat "Envoy" geschrieben. Sie können die Protokolle mithilfe von kubectl logs:
kubectl logs deployment/<your-gateway-name>-approuting-istio
Jede Anforderung, die das Gateway verarbeitet, erzeugt eine Protokollzeile, die Details wie die HTTP-Methode, pfad, Antwortcode, Upstreamdienst und Anforderungs- und Antwortgrößen enthält. Dieses Detail erleichtert die Beobachtung des Eingehenden Datenverkehrs und die Behandlung von Routingproblemen ohne zusätzliche Konfiguration.
Versionsverwaltung und Upgrades
Die Application Gateway API-Implementierung für das Routing von Anwendungen stellt die Istio Steuerungsebene auf der Grundlage der Kubernetes-Version des AKS-Clusters bereit und führt Upgrades durch, und zwar sowohl für Nebenversionen als auch für Patch-Versionen. Dieses direkte Modell richtet sich nach den Standardeinstellungen für die automatische AKS-Produktion, wobei die Plattformlebenszyklusverwaltung so konzipiert ist, dass manuelle Vorgänge reduziert werden.
Die Istio-Version ist die maximal unterstützte Istio-Nebenversion, die mit der AKS-Version Ihres Clusters kompatibel ist. Wenn Sie beispielsweise AKS in Version 1.34 verwenden, ist die höchste unterstützte installierbare Istio-Nebenversion (Stand: März 2026) 1.28. Beachten Sie, dass die maximal unterstützte Istio-Version für eine bestimmte Kubernetes-Version zwischen Long-Term Supportclustern (LTS) und Nicht-LTS-Clustern unterschiedlich sein kann.
Um die maximal unterstützte Istio-Minor-Version für Ihre AKS-Kubernetes-Version zu finden, überprüfen Sie den Releasekalender des Service-Mesh-Add-Ons. Während die Implementierung der Application Gateway API für das Routing nicht überarbeitet wird, entspricht die Nebenversion der Istio Steuerungsebene der gegebenen Revision des Service Mesh Add-Ons (z.B.: für das Service Mesh Add-On asm-1-28wird die Nebenversion der Istio Steuerungsebene für das Application Routing 1.28). Sie können die Istio-Minor-Version auch ermitteln, indem Sie die Patch-Version im Deployment-Image von istiod überprüfen:
kubectl get deployment istiod -n aks-istio-system -o=jsonpath="{.spec.template.spec.containers[*].image}"
Aktualisierungen
Upgrades der Patch-Version und der Nebenversion der Istio-Steuerungsebene für die Implementierung der Application Routing Gateway API finden In-Place statt. Upgrades auf Patchversionen werden im Rahmen von AKS-Releases automatisch ausgelöst. Nebenversionsupgrades können abhängig von der AKS Kubernetes-Version und dem Zeitpunkt der Istio-Minor-Version-Veröffentlichungen automatisch oder manuell ausgelöst werden. Nebenversionsupgrades treten in den folgenden Szenarien auf:
- Der AKS-Cluster wird auf eine neue Version aktualisiert, für die eine höhere maximal unterstützte Istio-Version festgelegt ist. Die Steuerungsebene von Istio wird im Rahmen des Upgrades des AKS-Clusters auf die höhere Minor-Version aktualisiert.
- Eine neue Istio-Version wird für AKS veröffentlicht und wird zur maximal unterstützten Istio-Version für die AKS-Clusterversion. Nach der Bereitstellung für Ihre Region wird die Istio-Steuerungsebene auf Ihrem Cluster automatisch auf die neue Nebenversion aktualisiert. Um neue Istio-Versionsversionen nachzuverfolgen und zu sehen, wann die neue Version in Ihrer Region bereitgestellt wird, folgen Sie den AKS-Versionshinweisen und der AKS-Versionsverfolgung.
Datenverkehrsunterbrechungen können während des Upgradeprozesses auftreten. Um Unterbrechungen bei Upgrades zu minimieren, stellt das Application Routing Add-on einen Horizontal Pod Autoscaler (HPA) mit mindestens zwei Repliken und ein PodDisruptionBudget (PDB) mit einer Mindestverfügbarkeit von eins für jeden Gateway bereit. Sie können diese Ressourcen anpassen , um diese Einstellungen zu ändern.
Ressourcenanpassungen
Anpassung der Steuerungsebene Horizontal Pod Autoscaling (HPA)
Die Implementierung der Application Routing Gateway API unterstützt die Anpassung der Istio Steuerungsebene Horizontal Pod Autoscaler (HPA). Die istiod HPA-Ressource verfügt über die folgenden Standardkonfigurationen:
- Min-Replikate: Zwei
- Maximale Replikate: Fünf
- CPU-Auslastung: 80%
Hinweis
Um Konflikte mit dem PodDisruptionBudget zu vermeiden, erlaubt die Implementierung der Gateway-API für das Anwendungsrouting nicht, minReplicas auf einen Wert unter dem anfänglichen Standardwert 2 festzulegen.
Die HPA-Konfiguration kann über Patches und direkte Bearbeitungen geändert werden. Beispiel:
kubectl patch hpa istiod -n aks-istio-system --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'
Gateway-Ressourcenanpassung
Die API-Implementierung des Anwendungsrouting-Gateways unterstützt die Anpassung der Gateway Ressourcen über Annotations und ConfigMaps. Das Application Routing bietet dieselbe Möglichkeit der Ressourcenanpassung wie das Istio Add-on für das Gateway Mesh zur Anpassung der Gateway API-Ressourcen. Folgen Sie den Schritten in den Istio Add-on Gateway API docs, um die für die Gateways generierten Ressourcen zu konfigurieren und um zu sehen, welche Felder unter die zulässige Liste fallen.
Hinweis
Die istio-gateway-class-defaults ConfigMap wird von AKS bereitgestellt und abgestimmt, wenn die Managed Gateway API CRDs und die Application Routing Gateway API Implementierung gemeinsam aktiviert sind. Wenn Sie zuvor die istio-gateway-class-defaults ConfigMap im aks-istio-system Namespace selbst erstellt haben, müssen Sie die selbstverwaltete ConfigMap-Instanz löschen, bevor Sie die CRDs der verwalteten Gateway-API aktivieren, um Konflikte beim Abgleich der von AKS verwalteten ConfigMap zu vermeiden.
Hinweis
Die Gateway-API-Implementierung für das Anwendungsrouting fügt dem Service Gateway hinzu, um Integritätsprüfungen für die Standard-Einstellung externalTrafficPolicy „Cluster“ zu konfigurieren. Wenn Sie spec.externalTrafficPolicy auf „Lokal“ festlegen, müssen Sie die folgenden Annotationen entweder in der ConfigMap auf GatewayClass-Ebene oder in der gatewayspezifischen ConfigMap entfernen:
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:
Deaktivieren der API-Implementierung des Anwendungs-Routing-Gateways
Führen Sie den folgenden Befehl aus, um die Implementierung der API für Anwendungs-Routing-Gateway zu deaktivieren.
az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --disable-app-routing-istio
Bereinigen von Ressourcen
Führen Sie die folgenden Befehle aus, um die Gateway Und HTTPRoute Ressourcen zu löschen:
kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
kubectl delete httproute httpbin
Wenn Sie eine ConfigMap erstellt haben, um Ihren GatewayAnzupassen, führen Sie den folgenden Befehl aus, um die ConfigMap zu löschen:
kubectl delete configmap gw-options
Wenn Sie eine SecretProviderClass und einen geheimen Schlüssel zum Beenden von TLS erstellt haben, löschen Sie die folgenden Ressourcen:
kubectl delete secret httpbin-credential
kubectl delete pod secrets-store-sync-httpbin
kubectl delete secretproviderclass httpbin-credential-spc
Bereinigen von Ressourcen mithilfe von Terraform
In diesem Abschnitt haben Sie eine Namespace-bezogene Beispielanwendung und Gateway-API-Ressourcen bereitgestellt. Wenn Sie diese Kubernetes-Ressourcen nicht mehr benötigen, löschen Sie sie, bevor Sie die zugrunde liegende Azure Infrastruktur entfernen.
Löschen Sie die HTTPRoute, Gatewayund beispielanwendung mithilfe des kubectl delete Befehls:
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
Mit dem folgenden Befehl werden die Ressourcengruppe, der AKS-Cluster und alle anderen Ressourcen entfernt, die der für dieses Beispiel erstellten Ressourcengruppe zugeordnet sind. Wenn Sie andere Ressourcen in dieser Ressourcengruppe bereitgestellt haben, löscht der Befehl sie ebenfalls.
Entfernen Sie die von Terraform erstellten Azure Ressourcen mithilfe des terraform destroy Befehls. Wenn Sie dazu aufgefordert werden, geben Sie yes die Eingabetaste ein, um dies zu bestätigen.
terraform destroy
Verwandte Inhalte
- Was ist Azure Kubernetes Service (AKS) Automatic?
- Erstellen eines automatischen AKS-Clusters
- Konfigurieren Sie Azure DNS und TLS mit der Gateway-API-Implementierung für das Anwendungsrouting
- Eingehenden Datenverkehr mit der Gateway-API-Implementierung für das Anwendungsrouting absichern (manuelle Konfiguration)