Konfigurieren Sie Ingress mit der Kubernetes-Gateway-API über das Add-On für Anwendungsrouting für Azure Kubernetes Service (AKS)

Vorsicht

Der Kubernetes SIG Network und der Sicherheitsreaktionsausschuss kündigte die bevorstehende Einstellung des Projekts Ingress NGINX an, wobei die Wartung im März 2026 endet. Für AKS-Cluster, die das Anwendungsrouting-Add-On mit NGINX verwenden, ist heute keine sofortige Aktion erforderlich. Microsoft wird offizielle Unterstützung für kritische Sicherheitspatches für NGINX Ingress-Ressourcen für das Anwendungsrouting bis November 2026 bereitstellen.

AKS passt sich dem Upstream Kubernetes an, indem es auf Gateway API als langfristigen Standard für die Verwaltung des Ingress- und L7-Datenverkehrs umstellt. Wir empfehlen Ihnen, ihren Migrationspfad basierend auf Ihrem aktuellen Setup zu planen:

  • Benutzer des Add-on Application Routing: Produktions-Workloads werden noch bis November 2026 vollständig unterstützt. Migrieren Sie auf die Application Routing Gateway API-Implementierung für eine Gateway API-basierte Verwaltung des Datenverkehrs im Eingang.
  • OSS NGINX-Benutzer haben mehrere Optionen:
  • Dienstgitterbenutzer: Wenn Sie ein Dienstgitter einführen möchten, berücksichtigen Sie das Istio-basierte Dienstgitter-Add-On. Verwenden Sie Istio Ingress heute, und planen Sie die Migration zur Istio-Gateway-API, die jetzt GA ist.

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.:

  • Vollständiges Verhalten des Istio Service Mesh mit Sidecar-basierter Datenverkehrsverwaltung und umfassenderer Nutzung von Istio-CRDs.
  • Features, die derzeit als nicht unterstützt aufgeführt sind, z. B. TLSRoute-basierte SNI-Passthrough.

Einschränkungen

  • 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.io und andere in den API-Gruppen networking.istio.io, security.istio.io, telemetry.istio.io und extensions.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 istio
    

    Hinweis

    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.

  • Das Konfigurieren des HTTPS-Eingangszugriffs auf HTTPS-Dienste (z. B. SNI-Passthrough) über die TLSRoute Ressource wird derzeit nicht unterstützt. Die Unterstützung für die TLSRoute Ressource wird verfügbar sein, sobald AKS Unterstützung für Istio 1.30 hinzufügt. An diesem Punkt wird ihr Anwendungsrouting-Istio-Steuerungsebene automatisch auf diese Version aktualisiert.

  • 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 Telemetry angepasst 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-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-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.

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