注意事項
Kubernetes SIG Network とセキュリティ対応委員会は、イングレス NGINX プロジェクトの今後の廃止を発表し、メンテナンスは 2026 年 3 月に終了します。 現在、 NGINX でアプリケーション ルーティング アドオンを使用する AKS クラスターには、すぐに必要なアクションはありません。 Microsoft は、 2026 年 11 月まで、アプリケーション ルーティング アドオン NGINX イングレス リソースの重要なセキュリティ パッチの公式サポートを提供します。
AKS は、イングレスと L7 トラフィック管理の長期的な標準としてゲートウェイ API に移行することで、アップストリームの Kubernetes と連携しています。 現在のセットアップに基づいて、移行パスの計画を開始することをお勧めします。
- アプリケーション ルーティング アドオン ユーザー: 運用ワークロードは、2026 年 11 月まで完全にサポートされます。 ゲートウェイ API ベースのイングレス トラフィック管理エクスペリエンスのために、 アプリケーション ルーティング ゲートウェイ API の実装 に移行します。
-
OSS NGINX ユーザー には、いくつかのオプションがあります。
- NGINX を使用してアプリケーション ルーティング アドオンに移行し、長期的なゲートウェイ API の移行を計画しながら、2026 年 11 月までの公式サポートの恩恵を受けることができます。
- ゲートウェイ API ベースのイングレス トラフィック管理エクスペリエンスのために、 アプリケーション ルーティング ゲートウェイ API の実装 に移行します。
- イングレス API とゲートウェイ API の両方をサポートする Application Gateway for Containers に移行します。
- サービス メッシュ ユーザー: サービス メッシュを採用する予定の場合は、 Istio ベースのサービス メッシュ アドオンを検討してください。 Istio イングレスを今すぐ使用し、Istio Gateway API (現在は GA) への移行を計画します。
アプリケーション ルーティング アドオンでは、イングレス トラフィック管理用の 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 イングレス。
- ゲートウェイ プロキシの自動スケーリングや中断予算などの運用上の保護が組み込まれたマネージド ゲートウェイ インフラストラクチャ。
次のような、この記事の現在のサポート外の機能が必要な場合は、代替手段を検討してください。
- サイドカーベースのトラフィック管理と Istio CRD のより広範な利用による、Istio サービスメッシュの完全な動作。
- TLSRoute ベースの SNI パススルーなど、現在サポートされていない機能として一覧表示されています。
制限事項
アプリケーション ルーティング ゲートウェイ API の実装と Istio サービス メッシュ アドオン を同時に有効にすることはできません。 最初に 1 つを無効にし、別の操作でもう一方を有効にする必要があります。 Istio サービス メッシュ アドオンからアプリケーション ルーティング ゲートウェイ API 実装に移行する場合は、Istio アドオンを無効にした後、Istio GatewayClass と Istio CRD を削除する必要があります。 Istio アドオンは、アドオンが無効になっているときに削除されない CRD (
virtualservices.networking.istio.io、destinationrules.networking.istio.ioなど) をnetworking.istio.io、security.istio.io、telemetry.istio.io、extensions.istio.ioAPI グループにインストールします。 これらの 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 は、許可リストにないカスタマイズをブロックします。TLSRouteリソースを介した HTTPS サービス (サーバー名表示 (SNI) パススルーなど) への HTTPS イングレス アクセスの構成は、現在サポートされていません。 AKS が Istio 1.30 のサポートを追加すると、TLSRouteリソースのサポートが利用可能になります。この時点で、アプリケーション ルーティング Istio コントロール プレーンがそのバージョンに自動的にアップグレードされます。アプリケーション ルーティング ゲートウェイ API の実装によるエグレス トラフィック管理はサポートされていません。
アプリケーション ルーティング アドオンによって管理される Istio ゲートウェイ プロキシ ポッドへの、Microsoft管理されていないサイドカー (カスタム テレメトリ、ログ記録、セキュリティ エージェントなど) の挿入は公式にはサポートされていません。 マネージド プロキシ ポッドに独自のサイドカーを挿入する場合、Microsoft は、発生した問題に対してベスト エフォート ベースのサポートのみを提供します。
ゲートウェイ プロキシ ポッドでは Envoy アクセス ログが既定で有効になっていますが、ログの形式、スコープ、プロバイダーは Istio
TelemetryAPI を使用してカスタマイズすることはできません。 カスタマイズするには、代わりに 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 を作成する
次に、defaultを gatewayClassName に設定して、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用にService、HorizontalPodAutoscaler、PodDisruptionBudget、httpbin-gatewayが作成されることを確認します。
kubectl get deployment httpbin-gateway-approuting-istio
NAME READY UP-TO-DATE AVAILABLE AGE
httpbin-gateway-approuting-istio 2/2 2 2 6m41s
kubectl get service httpbin-gateway-approuting-istio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
httpbin-gateway-approuting-istio LoadBalancer 10.0.54.96 <external-ip> 15021:30580/TCP,80:32693/TCP 7m13s
kubectl get hpa httpbin-gateway-approuting-istio
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
httpbin-gateway-approuting-istio Deployment/httpbin-gateway-approuting-istio cpu: 3%/80% 2 5 2 8m13s
kubectl get pdb httpbin-gateway-approuting-istio
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
httpbin-gateway-approuting-istio 1 N/A 1 9m1s
サンプル アプリケーションに要求を送信する
最後に、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 の実装によるイングレス トラフィックのセキュリティ保護に関する記事を参照してください。
アクセス ログ
アプリケーション ルーティング ゲートウェイ 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
リソースをクリーンアップする
次のコマンドを実行して、 Gateway と HTTPRoute リソースを削除します。
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