アプリケーション ルーティング アドオンでのマネージド NGINX イングレス

ハイパーテキスト転送プロトコル (HTTP) とセキュリティで保護された (HTTPS) トラフィックを、Azure Kubernetes Service (AKS) クラスターで実行されているアプリケーションにルーティングする 1 つの方法は、Kubernetes イングレス オブジェクトを使うことです。 アプリケーション ルーティング アドオンの NGINX イングレス クラスを使用するイングレス オブジェクトを作成すると、アドオンによって AKS クラスター内の 1 つ以上のイングレス コントローラーが作成、構成、管理されます。

この記事では、AKS クラスターに基本的なイングレス コントローラーをデプロイして構成する方法について説明します。

NGINX を使用するアプリケーション ルーティング アドオンの機能

NGINX を使用するアプリケーション ルーティング アドオンでは、次の機能が提供されます。

  • Kubernetes NGINX イングレス コントローラーに基づくマネージド NGINX イングレス コントローラーの簡単な構成。
  • パブリック ゾーンとプライベート ゾーンの管理のための Azure DNS との統合
  • Azure Key Vault に格納されている証明書での SSL 終端。

その他の構成については、次を参照してください。

Cloud Native Computing Foundation (CNCF) による Open Service Mesh (OSM) の廃止に伴い、OSM を使用したアプリケーション ルーティング アドオンの使用は非推奨となっています。

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。
  • Azure CLI バージョン 2.54.0 以降がインストールされ構成されていること。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

制限事項

  • アプリケーション ルーティング アドオンでは、最大で 5 つの Azure DNS ゾーンがサポートされます。
  • アプリケーション ルーティング アドオンを有効にできるのは、マネージド ID を持つ AKS クラスターにおいてだけです。
  • アドオンと統合されるすべてのグローバル Azure DNS ゾーンは、同じリソース グループ内にある必要があります。
  • アドオンと統合されるすべてのプライベート Azure DNS ゾーンは、同じリソース グループ内にある必要があります。
  • app-routing-system 名前空間での ingress-nginx ConfigMap の編集はサポートされていません。
  • 次のスニペットの注釈はブロックされているため、イングレスを構成できません。load_modulelua_package_by_lualocationrootproxy_passserviceaccount{}'

Azure CLI を使用してアプリケーション ルーティングを有効にする

新しいクラスターで有効にする

新しいクラスターでアプリケーション ルーティングを有効にするには、--enable-app-routing フラグを指定して az aks create コマンドを使用します。

az aks create \
    --resource-group <ResourceGroupName> \
    --name <ClusterName> \
    --location <Location> \
    --enable-app-routing \
    --generate-ssh-keys

既存のクラスターで有効にする

既存のクラスターでアプリケーション ルーティングを有効にするには、az aks approuting enable コマンドを使用します。

az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>

ご利用の AKS クラスターに接続する

お使いのローカル コンピューターから Kubernetes クラスターに接続するには、kubectl (Kubernetes コマンドライン クライアント) を使用します。 az aks install-cli コマンドを使用してローカルにインストールすることができます。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。

az aks get-credentials コマンドを使用して、Kubernetes クラスターに接続するように kubectl を構成します。

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

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

アプリケーション ルーティング アドオンは、Kubernetes イングレス オブジェクトの注釈を使って適切なリソースを作成します。

  1. kubectl create namespace コマンドを使って、ポッドの例を実行するための aks-store という名前のアプリケーション名前空間を作成します。

    kubectl create namespace aks-store
    
  2. 次の YAML マニフェスト ファイルを使用して、AKS ストア アプリケーションをデプロイします。

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
    

このマニフェストにより、AKS ストア アプリケーションに必要なデプロイとサービスが作成されます。

イングレス オブジェクトを作成する

アプリケーション ルーティング アドオンにより、webapprouting.kubernetes.azure.com という名前のクラスターにイングレス クラスが作成されます。 このクラスを使ってイングレス オブジェクトを作成すると、アドオンがアクティブになります。

  1. 次の YAML マニフェストを ingress.yaml という名前の新しいファイルにコピーし、ファイルをローカル コンピューターに保存します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - http:
          paths:
          - backend:
              service:
                name: store-front
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. kubectl apply コマンドを使用してイングレス リソースを作成します。

    kubectl apply -f ingress.yaml -n aks-store
    

    次の出力例では、作成されたリソースが示されています。

    ingress.networking.k8s.io/store-front created
    

マネージド イングレスが作成されたことを確認する

マネージド イングレスが作成されたことは、kubectl get ingress コマンドを使って確認できます。

kubectl get ingress -n aks-store

次の出力例では、作成されたマネージド イングレスが示されています。

NAME          CLASS                                HOSTS   ADDRESS       PORTS   AGE
store-front   webapprouting.kubernetes.azure.com   *       51.8.10.109   80      110s

AKS ストアが動作し、ブラウザーがイングレス コントローラーのパブリック IP アドレスを指していることを確認できます。 kubectl を使用して IP アドレスを検索します。

kubectl get service -n app-routing-system nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"

アプリケーション ルーティング アドオンを削除する

関連付けられている名前空間を削除するには、kubectl delete namespace コマンドを使います。

kubectl delete namespace aks-store

クラスターからアプリケーション ルーティング アドオンを削除するには、az aks approuting disable コマンドを使います。

az aks approuting disable --name <ClusterName> --resource-group <ResourceGroupName>

Note

アプリケーション ルーティング アドオンが無効になっているときにクラスターへのトラフィックが中断される可能性を回避するために、configMaps、"シークレット"、コントローラーを実行する "デプロイ" など、一部の Kubernetes リソースはクラスター上に残ります。 これらのリソースは、app-routing-system 名前空間にあります。 これらのリソースが不要になった場合は、kubectl delete ns app-routing-system を使用してこの名前空間を削除すると削除できます。

次のステップ