Azure Kubernetes Service (AKS)のアプリケーション ルーティング アドオンを使用して Kubernetes Gateway API を使用してイングレスを構成する

注意事項

Kubernetes SIG Network とセキュリティ対応委員会は、イングレス NGINX プロジェクト今後の廃止を発表し、メンテナンスは 2026 年 3 月に終了します。 現在、 NGINX でアプリケーション ルーティング アドオンを使用する AKS クラスターには、すぐに必要なアクションはありません。 Microsoft は、 2026 年 11 月まで、アプリケーション ルーティング アドオン NGINX イングレス リソースの重要なセキュリティ パッチの公式サポートを提供します。

AKS は、イングレスと L7 トラフィック管理の長期的な標準としてゲートウェイ API に移行することで、アップストリームの Kubernetes と連携しています。 現在のセットアップに基づいて、移行パスの計画を開始することをお勧めします。

アプリケーション ルーティング アドオンでは、イングレス トラフィック管理用の Kubernetes Gateway API がサポートされています。 Kubernetes Gateway API は、イングレス API の後継および進化として設計された、トラフィック管理用の標準化されたロール指向の拡張可能なフレームワークを提供する一連のリソースです。 したがって、アプリケーション ルーティング ゲートウェイ API の実装は、レガシイングレス API に基づく マネージド NGINX アドオンの後継として機能することを目的としており、2026 年 11 月以降に Azure からの Azure サポートの受信を停止します。 マネージド NGINX を使用している場合は、2026 年 11 月までに、アプリケーション ルーティング ゲートウェイ API の実装または別のサポートされている実装に移行する必要があります。

運用環境のワークロードの場合、このモデルは AKS Automatic の推奨される既定のイングレス モデルです。 AKS バージョン 1.36 以降、新しい AKS 自動クラスターでは、既定でアプリケーション ルーティング アドオンを介して Kubernetes Gateway API が使用されます。 AKS 自動運用の既定値の背景については、「Azure Kubernetes Service (AKS)自動とは」を参照してください。

Istio サービス メッシュ アドオンとの比較

アプリケーション ルーティング アドオン Kubernetes Gateway API 実装は、Kubernetes Gateway API リソースのインフラストラクチャを管理するために Istio コントロール プレーンをデプロイします。 ただし、次の点で AKS の Istio サービス メッシュ アドオン とは異なります。

特徴 アプリケーション ルーティング ゲートウェイ API Istio サービスメッシュ アドオン
ゲートウェイ クラス名 approuting-istio istio
サイドカー インジェクションと Istio CRD のサポート サポートされていません。 Kubernetes Gateway API リソースのインフラストラクチャのみを管理する サポートされている
リビジョンとアップグレード 変更されていません。 マイナー バージョンの更新およびパッチ バージョンの更新のどちらの場合も、インプレースでアップグレードされます リビジョン化されました。 マイナー バージョンの更新ではカナリア アップグレードによりアップグレードされ、パッチ バージョンの更新ではインプレースでアップグレードされます

運用環境でアプリケーション ルーティング ゲートウェイ API を使用する場合

必要な場合は、この実装を既定のイングレス パスとして使用します。

  • AKS Automatic における、運用環境対応のマネージド イングレスの既定の設定。
  • Kubernetes Gateway API にネイティブ対応した HTTP/HTTPS イングレス。
  • ゲートウェイ プロキシの自動スケーリングや中断予算などの運用上の保護が組み込まれたマネージド ゲートウェイ インフラストラクチャ。

次のような、この記事の現在のサポート外の機能が必要な場合は、代替手段を検討してください。

  • サービス メッシュのトラフィック管理。
  • 制限事項に記載されている機能。

制限事項

  • この実装を使用して、要求ヘッダーと本文のサイズ制限、Lua スクリプト、またはローカルとグローバルのレート制限を構成することはできません。 ゲートウェイ API にはこれらの機能の標準フィールドがなく、App Routing Gateway API の実装では EnvoyFilterがサポートされていません。

    ingress-nginx から移行するときにこれらの機能が必要な場合は、 Istio サービス メッシュ アドオンを使用したゲートウェイ API イングレスを検討してください。 ワークロードにサイドカーを挿入することなく、 GatewayHTTPRoute、その他のゲートウェイ API リソースを使用し、ゲートウェイ スコープの EnvoyFilter を適用して構成できます。 EnvoyFilter構成によって発生する問題は、Azure サポート外にあります。 Istio サービス メッシュ アドオンを選択した場合は、イングレスでのみ使用する場合でも、マイナー リビジョン更新プログラムの カナリア アップグレード を開始して完了する必要があります。

    nginx 注釈またはスニペットの各置換を Istio リビジョンに対してテストします。 たとえば、 Envoy のバッファー フィルターでは 、転送する前に要求本文全体をメモリに保持することで、本文サイズの制限が適用されます。 ディスクに書き出されることはありません。

  • アプリケーション ルーティング ゲートウェイ API の実装と Istio サービス メッシュ アドオン を同時に有効にすることはできません。 最初に 1 つを無効にし、別の操作でもう一方を有効にする必要があります。 Istio サービス メッシュ アドオンからアプリケーション ルーティング ゲートウェイ API 実装に移行する場合は、Istio アドオンを無効にした後、Istio GatewayClass と Istio CRD を削除する必要があります。 Istio アドオンは、アドオンが無効になっているときに削除されない CRD ( virtualservices.networking.istio.iodestinationrules.networking.istio.ioなど) を networking.istio.iosecurity.istio.iotelemetry.istio.ioextensions.istio.io API グループにインストールします。 これらの CRD がクラスター上に残っている場合、アプリケーション ルーティング ゲートウェイ API Istio コントロール プレーンの起動に失敗します。 次のコマンドを実行して削除します。

    kubectl delete crd $(kubectl get crd -o name | grep -E 'istio\.io')
    kubectl delete gatewayclass istio
    

    既存の Istio カスタム リソース (VirtualServices や DestinationRules など) がある場合、CRD を削除すると、それらのリソースも削除されます。 続行する前に、必要がなくなったことを確認します。

  • アプリケーション ルーティング ゲートウェイ API の実装では、 リソースの ConfigMap カスタマイズを検証するための Istio アドオンと同じリソースカスタマイズGatewayが使用されます。 アドオンマネージド Webhook は、許可リストにないカスタマイズをブロックします。

  • アプリケーション ルーティング ゲートウェイ API の実装によるエグレス トラフィック管理はサポートされていません。

  • アプリケーション ルーティング アドオンによって管理される Istio ゲートウェイ プロキシ ポッドへの、Microsoft管理されていないサイドカー (カスタム テレメトリ、ログ記録、セキュリティ エージェントなど) の挿入は公式にはサポートされていません。 マネージド プロキシ ポッドに独自のサイドカーを挿入する場合、Microsoft は、発生した問題に対してベスト エフォート ベースのサポートのみを提供します。

  • ゲートウェイ プロキシ ポッドでは Envoy アクセス ログが既定で有効になっていますが、ログの形式、スコープ、プロバイダーは Istio Telemetry API を使用してカスタマイズすることはできません。 カスタマイズするには、代わりに Istio サービス メッシュ アドオン でゲートウェイ API イングレスを使用します。

前提条件

Azure CLI のバージョンを更新する

azure-cliバージョン2.86.0以降を使用する必要があります。 az --versionを実行してazure-cliのバージョンを見つけ、az upgradeを実行してアップグレードします。

マネージド ゲートウェイ API の CRD を有効にする

Managed Gateway API のインストールを有効にします。 アプリケーション ルーティング アドオンでのセルフマネージド ゲートウェイ API CRD の使用はサポートされていません。

AKS 自動既定の動作 (AKS 1.36 以降)

AKS 1.36 以降を実行する新しい AKS 自動クラスターでは、アプリケーション ルーティング アドオンを介した Kubernetes Gateway API が既定で有効になります。

通常、次の場合を除き、機能有効化コマンドを実行する必要はありません。

  • 既存のクラスターの使用。
  • 以前の AKS バージョンを実行しています。
  • 機能を無効にした後に再び有効にします。

アプリケーション ルーティング ゲートウェイ API の実装を有効にする

AKS 1.36 以降で新しい AKS 自動クラスターを作成する場合、この機能は既定で有効になっています。 このセクションのコマンドは、AKS Standard クラスター、以前のバージョン、または機能がまだ有効になっていない既存のクラスターに対して使用します。

クラスターの作成時に有効にする

AKS Standard クラスターの作成時にアプリケーション ルーティング ゲートウェイ API の実装を有効にするには、次のコマンドを実行します。

# 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

既存のクラスターに対して有効にする

次のコマンドを実行して、既存のクラスターのアプリケーション ルーティング ゲートウェイ API の実装を有効にします。

# 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

istiod名前空間に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

次にValidatingWebhookConfigurationがデプロイされることが確認できます。

kubectl get validatingwebhookconfiguration
NAME                                        WEBHOOKS   AGE
aks-node-validating-webhook                 1          117m
azure-service-mesh-ccp-validating-webhook   1          4m2s

Managed Gateway API のインストールが有効になっている場合は、Istio ゲートウェイのカスタマイズ ConfigMap も作成されます。

kubectl get cm -n aks-istio-system
NAME                                  DATA   AGE
...
istio-gateway-class-defaults          2      43s
...

Kubernetes ゲートウェイを使用してイングレスを構成する

サンプル アプリケーションをデプロイする

まず、httpbin名前空間にサンプル default アプリケーションをデプロイします。

export ISTIO_RELEASE="release-1.27"
kubectl apply -f https://raw.githubusercontent.com/istio/istio/$ISTIO_RELEASE/samples/httpbin/httpbin.yaml

Kubernetes ゲートウェイと HTTPRoute を作成する

次に、defaultgatewayClassName に設定して、approuting-istio名前空間にゲートウェイ API 構成をデプロイします。

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

上記の例では、クラスターの外部からアクセスできる外部イングレス ロード バランサー サービスを作成します。 注釈を追加して内部ロード バランサーを作成し、他のロード バランサー設定をカスタマイズできます。

既定では、Istio コントロール プレーンは、GatewayClass用にプロビジョニングするリソースの名前にapprouting-istioGateway名を追加します。 Gatewayを使用してgateway.istio.io/name-override リソースに注釈を付けて、プロビジョニングされたリソースの名前をオーバーライドできます。 リソース名は 63 文字未満で、有効な DNS 名である必要があります。

Deployment用にServiceHorizontalPodAutoscalerPodDisruptionBudgethttpbin-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

サンプル アプリケーションに要求を送信する

最後に、curl アプリケーションにhttpbin要求を送信してみてください。 まず、 INGRESS_HOST 環境変数を設定します。

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}')

次に、 httpbinに HTTP 要求を送信してみてください。

curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"

HTTP 200応答が表示されます。

アプリケーション ルーティング ゲートウェイ API 実装を使用してイングレス トラフィックをセキュリティで保護し、ホスト名管理用のAzure DNSと統合するには、アプリケーション ルーティング オペレーターを利用した自動化されたワークフロー用のアプリケーション ルーティング ゲートウェイ API 実装を使用してAzure DNSと TLS を構成する方法に関する記事を参照してください。 オペレーターの統合に依存しない手動 TLS 終了ワークフローについては、 アプリケーション ルーティング ゲートウェイ API の実装によるイングレス トラフィックのセキュリティ保護に関する記事を参照してください。

Terraform を使用して、アプリケーション ルーティング ゲートウェイ API 実装が有効になっている AKS クラスターを作成するには、次のものが必要です。

  • Terraform バージョン 1.9.0 以降がインストールされています。
  • インストールされて認証されている Azure CLI。 az --versionを実行してazure-cliのバージョンを見つけ、az upgradeを実行してアップグレードします。 Azure CLIを使用して、Terraform でクラスターを作成した後にクラスターに接続します。
  • kubectl がインストールされています。 az aks install-cli コマンドを使用してローカルにインストールできます。 kubectlを使用して、サンプル アプリケーションとゲートウェイ API リソースをデプロイします。

Terraform を使用して、アプリケーション ルーティング ゲートウェイ API 実装を使用して AKS クラスターをデプロイする

このセクションでは、Terraform を使用して 、Managed Gateway API のインストール とアプリケーション ルーティング ゲートウェイ API 実装が有効になっている AKS クラスターをデプロイする方法について説明します。

このサンプルでは、次のものをデプロイします。

  • リソース グループ。
  • Azure CNI ネットワーク プラグインと標準ロード バランサーを使用する AKS クラスター。
  • Managed Gateway API のインストールとアプリケーション ルーティング ゲートウェイ API の実装。どちらも AzAPI プロバイダーを介してクラスターで有効になっています。 両方の設定を有効にすると、クラスターで AKS マネージド approuting-istio GatewayClass を使用できるようになります。
  1. サンプルの Terraform コードをテストして実行するディレクトリを作成し、それを現在のディレクトリにします。

  2. main.tf という名前のファイルを作成し、次のコードを挿入します。

    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. terraform init コマンドを実行して Terraform を初期化します。 このコマンドは、Terraform を使用してAzureリソースを管理するために必要なAzure プロバイダーをダウンロードします。

    terraform init
    
  4. terraform fmtコマンドとterraform validate コマンドを実行して、構成の書式設定と検証を行います。

    terraform fmt
    terraform validate
    
  5. terraform plan コマンドを実行して、Terraform 実行プランを作成します。 このコマンドは、Terraform が Azure サブスクリプションで作成または変更するリソースを示します。

    terraform plan
    
  6. terraform apply コマンドを実行して、Terraform 実行プランを適用します。 このコマンドは、Azure サブスクリプションのmain.tf ファイルに定義されているリソースを作成します。 メッセージが表示されたら、「 yes 」と入力して確認します。

    terraform apply
    

Terraform を使用して AKS クラスターに接続する

  1. Terraform 出力からリソース グループとクラスター名を取得します。

    terraform output -raw resource_group_name
    terraform output -raw cluster_name
    
  2. az aks get-credentials コマンドを使用してクラスターに接続するようにkubectlを構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。 <resource-group-name><cluster-name> は、前の手順で取得した値に置き換えてください。 または、 terraform output -raw get_credentials_command を実行して、すぐに実行できる完全なコマンドを取得します。

    az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
    
  3. kubectl get nodes コマンドを実行して、クラスターが実行されていることを確認します。

    kubectl get nodes
    

Terraform を使用してゲートウェイ API 構成を確認する

  1. aks-istio-system名前空間でistiodポッドが実行されていることを確認します。

    kubectl get pods -n aks-istio-system
    
  2. approuting-istio GatewayClass が存在し、受け入れられることを確認します。

    kubectl get gatewayclass
    

    approuting-istio GatewayClass は、ACCEPTED列のTrueを返す必要があります。

Terraform で Kubernetes ゲートウェイを使用してイングレスを構成する

Terraform を使用してサンプル アプリケーションをデプロイする

default名前空間にサンプル httpbin アプリケーションをデプロイします。

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.27/samples/httpbin/httpbin.yaml

httpbin ポッドとサービスが使用可能であることを確認します。

kubectl get pods -l app=httpbin
kubectl get svc httpbin

Terraform を使用してゲートウェイと HTTPRoute リソースを作成する

アプリケーション ルーティング ゲートウェイ API の実装サンプルには、ポート 80 で HTTP リスナーを作成し、AKS マネージド approuting-istio GatewayClass を使用するGateway マニフェストが含まれています。

  1. gateway.yaml という名前のファイルを作成し、次のコードを挿入します。

    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. Gateway構成を適用します。

    kubectl apply -f gateway.yaml
    

    このサンプルには、ポート 8000httpbin サービスにhttpbin.example.com/getの要求をルーティングするHTTPRoute マニフェストも含まれています。

  3. httproute.yaml という名前のファイルを作成し、次のコードを挿入します。

    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. HTTPRoute構成を適用します。

    kubectl apply -f httproute.yaml
    

前の例では、クラスターの外部からアクセスできる外部イングレス ロード バランサー サービスを作成します。 注釈を追加して内部ロード バランサーを作成し、他のロード バランサー設定をカスタマイズできます。

Deployment用にServiceHorizontalPodAutoscalerPodDisruptionBudgethttpbin-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

Terraform を使用してサンプル アプリケーションに要求を送信する

ゲートウェイが Programmed 条件を報告するのを待ってから、その外部アドレスを取得します。

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}')

次に、ゲートウェイを介して httpbin に要求を送信します。

curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST/get"

HTTP 200応答が表示されます。

アクセス ログ

アプリケーション ルーティング ゲートウェイ API の実装により、すべてのマネージド Gateway プロキシ ポッドで Envoy アクセス ログが既定で有効になります。 アクセス ログは、既定の Envoy テキスト形式でプロキシ コンテナーの標準出力に書き込まれます。 次の kubectl logsを使用してログを表示できます。

kubectl logs deployment/<your-gateway-name>-approuting-istio

ゲートウェイが処理する各要求は、HTTP メソッド、パス、応答コード、アップストリーム サービス、要求と応答のサイズなどの詳細を含むログ行を生成します。 この詳細により、追加の構成なしで、イングレス トラフィックの監視とルーティングの問題のトラブルシューティングが簡単になります。

バージョン管理とアップグレード

アプリケーション ルーティング ゲートウェイ API の実装では、マイナー バージョンとパッチ バージョンのアップグレードの両方について、AKS クラスターの Kubernetes バージョンに基づいて Istio コントロール プレーンがデプロイおよびアップグレードされます。 このインプレース モデルは、AKS 自動運用の既定値に合わせ、プラットフォーム ライフサイクル管理は手動操作を減らすように設計されています。

Istio バージョンは、お使いのクラスターの AKS バージョンと互換性のある、サポート対象の Istio マイナー バージョンのうち最も高いバージョンです。 たとえば、AKS バージョン 1.34を使用している場合、(2026 年 3 月の時点で) サポートされている Istio マイナー バージョンの最大数は 1.28。 特定の Kubernetes バージョンでサポートされる Istio の最大バージョンは、 Long-Term サポート (LTS) クラスターと LTS 以外のクラスターで異なる場合があることに注意してください。

AKS Kubernetes バージョンでサポートされている Istio マイナー バージョンの最大数を確認するには、 サービス メッシュ アドオンリリース カレンダーを確認してください。 アプリケーション ルーティング ゲートウェイ API の実装はリビジョン化されていませんが、Istio コントロール プレーンのマイナー バージョンは、指定されたサービス メッシュ アドオン リビジョンに対応します (サービス メッシュ アドオン asm-1-28の場合、アプリケーション ルーティング Istio コントロール プレーンのマイナー バージョンは 1.28)。 istiod デプロイ イメージでパッチ バージョンを確認することで、Istio マイナー バージョンを確認することもできます。

kubectl get deployment istiod -n aks-istio-system -o=jsonpath="{.spec.template.spec.containers[*].image}"

アップグレード

アプリケーション ルーティング ゲートウェイ API 実装用の Istio コントロール プレーンの修正プログラムとマイナー バージョンのアップグレードが行われます。 パッチ バージョンのアップグレードは、AKS リリースの一部として自動的にトリガーされます。 マイナー バージョンのアップグレードは、AKS Kubernetes のバージョンと Istio マイナー バージョン リリースのタイミングに応じて、自動的または手動でトリガーできます。 マイナー バージョンのアップグレードは、次のシナリオで発生します。

  • AKS クラスターは、サポートされている Istio の最大バージョンがピン留めされた新しいバージョンにアップグレードされます。 Istio コントロール プレーンは、AKS クラスターのアップグレードの一環として、より高いマイナー バージョンにアップグレードされます。
  • AKS 用に新しい Istio バージョンがリリースされ、AKS クラスター バージョンでサポートされている最大 Istio バージョンになります。 リージョンへのロールアウト後、クラスター上の Istio コントロール プレーンが新しいマイナー バージョンに自動的にアップグレードされます。 新しい Istio バージョンのリリースを追跡し、新しいバージョンがリージョンにロールアウトされるタイミングを確認するには、 AKS リリース ノートAKS リリース トラッカーに従ってください。

トラフィックの中断は、アップグレード プロセス中に発生する可能性があります。 アップグレード中の停止を最小限に抑えるため、アプリケーション ルーティング アドオンでは、各 Gateway に対して、最小レプリカ数 2 の Horizontal Pod Autoscaler (HPA) と、最小可用数 1 の PodDisruptionBudget (PDB) をデプロイします。 これらのリソースをカスタマイズして、これらの設定を変更できます。

リソースのカスタマイズ

コントロール プレーンの水平ポッドオートスケーリング (HPA) のカスタマイズ

アプリケーション ルーティング ゲートウェイ API の実装では、Istio コントロール プレーンの水平ポッド オートスケーラー (HPA) のカスタマイズがサポートされています。 istiod HPA リソースには、次の既定の構成があります。

  • 最小レプリカ数: 2
  • 最大レプリカ数: 5 個
  • CPU 使用率: 80%

PodDisruptionBudgetとの競合を防ぐために、アプリケーション ルーティング ゲートウェイ API の実装では、minReplicasを既定の 2 未満に設定することはできません。

HPA の構成は、修正プログラムと直接編集を使用して変更できます。 例:

kubectl patch hpa istiod -n aks-istio-system --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'

ゲートウェイ リソースのカスタマイズ

アプリケーション ルーティング ゲートウェイ API の実装では、注釈と ConfigMap を使用した Gateway リソースのカスタマイズがサポートされています。 アプリケーション ルーティングでは、ゲートウェイ API リソースカスタマイズ用の Istio サービス メッシュ アドオンと同じリソースカスタマイズ許可リストが使用されます。 Istio アドオン ゲートウェイ API ドキュメントの手順に従って、Gateways用に生成されたリソースを構成し、許可リストに含まれるフィールドを確認します。

istio-gateway-class-defaults ConfigMap は、マネージド ゲートウェイ API の CRD とアプリケーション ルーティング ゲートウェイ API の実装が一緒に有効になっている場合に、AKS によってプロビジョニングおよび調整されます。 istio-gateway-class-defaults名前空間に aks-istio-system ConfigMap を自分で作成した場合は、マネージド ゲートウェイ API の CRD を有効にする前に、自己管理の ConfigMap インスタンスを削除して、AKS で管理される ConfigMap の調整との競合を回避する必要があります。

アプリケーション ルーティング Gateway API の実装では、既定の設定である "Cluster" の正常性プローブを設定するために、Gateway Service に externalTrafficPolicy を追加します。spec.externalTrafficPolicy を "Local" に設定する場合は、GatewayClass レベルの ConfigMap または Gateway ごとの ConfigMap で、次のアノテーションを解除する必要があります。

 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:

アプリケーション ルーティング ゲートウェイ API の実装を無効にする

次のコマンドを実行して、アプリケーション ルーティング ゲートウェイ API の実装を無効にします。

az aks update --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --disable-app-routing-istio

リソースをクリーンアップする

次のコマンドを実行して、 GatewayHTTPRoute リソースを削除します。

kubectl delete gateways.gateway.networking.k8s.io httpbin-gateway
kubectl delete httproute httpbin

Gatewayをカスタマイズするために ConfigMap を作成した場合は、次のコマンドを実行して ConfigMap を削除します。

kubectl delete configmap gw-options

TLS 終了に使用する SecretProviderClass とシークレットを作成した場合は、次のリソースを削除します。

kubectl delete secret httpbin-credential
kubectl delete pod secrets-store-sync-httpbin
kubectl delete secretproviderclass httpbin-credential-spc

Terraform を使用してリソースをクリーンアップする

このセクションでは、名前空間スコープのサンプル アプリケーションとゲートウェイ API リソースをデプロイしました。 これらの Kubernetes リソースが不要になった場合は、基になる Azure インフラストラクチャを削除する前に、それらを削除してください。

kubectl delete コマンドを使用して、HTTPRouteGateway、サンプル アプリケーションを削除します。

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

次のコマンドは、リソース グループ、AKS クラスター、およびこのサンプル用に作成されたリソース グループに関連付けられている他のすべてのリソースを削除します。 このリソース グループ内に他のリソースをデプロイした場合も、コマンドによって削除されます。

terraform destroy コマンドを使用して、Terraform によって作成されたAzure リソースを削除します。 メッセージが表示されたら、「 yes 」と入力して確認します。

terraform destroy