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

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

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 EnvoyFilter nicht.

    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, EnvoyFilter und andere Gateway-API-Ressourcen verwenden, ohne Sidecars in Ihre Workloads zu injizieren, und ein gateway-spezifisches Gateway anwenden, um sie zu konfigurieren. Probleme, die durch die EnvoyFilterKonfiguration 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.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.

  • 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-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.0 oder höher installiert.
  • Azure CLI installiert und authentifiziert. Führen Sie az --version aus, um Ihre azure-cli-Version zu finden, und führen Sie az upgrade zum 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-cli Befehls installieren. Sie verwenden kubectl, 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-istio GatewayClass im Cluster verfügbar.
  1. Erstellen Sie ein Verzeichnis zum Testen und Ausführen des Terraform-Beispielcodes, und machen Sie es zum aktuellen Verzeichnis.

  2. 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"
    }
    
  3. Initialisieren Sie Terraform, indem Sie den terraform init Befehl ausführen. Mit diesem Befehl werden die Azure Anbieter heruntergeladen, die zum Verwalten von Azure Ressourcen mit Terraform erforderlich sind.

    terraform init
    
  4. Formatieren und validieren Sie die Konfiguration, indem Sie die Befehle terraform fmt und terraform validate ausführen.

    terraform fmt
    terraform validate
    
  5. Erstellen Sie einen Terraform-Ausführungsplan, indem Sie den terraform plan Befehl ausführen. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellt oder ändert.

    terraform plan
    
  6. Wenden Sie den Terraform-Ausführungsplan an, indem Sie den terraform apply Befehl ausführen. Mit diesem Befehl werden die ressourcen erstellt, die in Ihrer main.tf Datei in Ihrem Azure-Abonnement definiert sind. Wenn Sie dazu aufgefordert werden, geben Sie yes die Eingabetaste ein, um dies zu bestätigen.

    terraform apply
    

Herstellen einer Verbindung mit dem AKS-Cluster mithilfe von Terraform

  1. Rufen Sie die Ressourcengruppen- und Clusternamen aus den Terraform-Ausgaben ab.

    terraform output -raw resource_group_name
    terraform output -raw cluster_name
    
  2. Konfigurieren Sie kubectl, um mit dem Befehl az aks get-credentials eine 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ühren terraform 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>
    
  3. Überprüfen Sie, ob der Cluster ausgeführt wird, indem Sie den kubectl get nodes Befehl ausführen.

    kubectl get nodes
    

Überprüfen der Gateway-API-Konfiguration mithilfe von Terraform

  1. Vergewissern Sie sich, dass die istiod Pods im aks-istio-system Namespace ausgeführt werden.

    kubectl get pods -n aks-istio-system
    
  2. Vergewissern Sie sich, dass die approuting-istio GatewayClass vorhanden ist und akzeptiert wird.

    kubectl get gatewayclass
    

    Die approuting-istio GatewayClass sollte ACCEPTED in der True Spalte 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.

  1. 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: Same
    
  2. Wenden Sie die Gateway Konfiguration an:

    kubectl apply -f gateway.yaml
    

    Das Beispiel enthält auch ein HTTPRoute Manifest, das Anforderungen httpbin.example.com/get an den httpbin Dienst am Port 8000weiter leitet.

  3. 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: 8000
    
  4. Wenden Sie die HTTPRoute Konfiguration 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