アプリケーション ルーティング アドオンでのマネージド 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 のインストールに関するページを参照してください。
  • aks-preview Azure CLI 拡張機能のバージョン 0.5.171 以降がインストールされていること

制限事項

  • アプリケーション ルーティング アドオンでは、最大で 5 つの Azure DNS ゾーンがサポートされます。
  • アドオンと統合されるすべてのグローバル 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 -g <ResourceGroupName> -n <ClusterName> -l <Location> --enable-app-routing

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

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

az aks approuting enable -g <ResourceGroupName> -n <ClusterName>

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

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

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

az aks get-credentials -g <ResourceGroupName> -n <ClusterName>

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

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

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

    kubectl create namespace hello-web-app-routing
    
  2. deployment.yaml という名前の新しいファイルに次の YAML マニフェストをコピーしてデプロイを作成し、ローカル コンピューターにファイルを保存します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld  
      namespace: hello-web-app-routing
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aks-helloworld
      template:
        metadata:
          labels:
            app: aks-helloworld
        spec:
          containers:
          - name: aks-helloworld
            image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
            ports:
            - containerPort: 80
            env:
            - name: TITLE
              value: "Welcome to Azure Kubernetes Service (AKS)"
    
  3. service.yaml という名前の新しいファイルに次の YAML マニフェストをコピーしてサービスを作成し、ローカル コンピューターにファイルを保存します。

    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: aks-helloworld
    

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

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

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

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. kubectl apply コマンドを使ってクラスター リソースを作成します。

    kubectl apply -f deployment.yaml -n hello-web-app-routing
    

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

    deployment.apps/aks-helloworld created
    
    kubectl apply -f service.yaml -n hello-web-app-routing
    

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

    service/aks-helloworld created
    
    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

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

    ingress.networking.k8s.io/aks-helloworld created
    

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

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

kubectl get ingress -n hello-web-app-routing

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

NAME             CLASS                                HOSTS               ADDRESS       PORTS     AGE
aks-helloworld   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m

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

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

kubectl delete namespace hello-web-app-routing

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

az aks approuting disable --name myAKSCluster --resource-group myResourceGroup 

アプリケーション ルーティング アドオンが無効になっている場合は、一部の Kubernetes リソースがクラスターに残ることがあります。 これらのリソースには configMapssecrets が含まれ、app-routing-system 名前空間で作成されます。 これらのリソースは、必要に応じて削除できます。

次のステップ