チュートリアル: 既存の Application Gateway を使用して既存の AKS クラスターで Application Gateway イングレス コントローラー アドオンを有効にする

Azure CLI またはポータルを使用して、既存の Azure Kubernetes Services (AKS) クラスターの Application Gateway イングレス コントローラー (AGIC) アドオンを有効にすることができます。 このチュートリアルでは、AGIC アドオンを使用して、別の仮想ネットワークにデプロイされている既存の Application Gateway を介して既存の AKS クラスターに Kubernetes アプリケーションを公開する方法について説明します。 まず、1 つの仮想ネットワークに AKS クラスターを作成し、別の仮想ネットワークに Application Gateway を作成して、既存のリソースをシミュレートします。 次に、AGIC アドオンを有効にし、2 つの仮想ネットワークをピアリングして、AGIC アドオンを使用して Application Gateway を通じて公開されるサンプル アプリケーションをデプロイします。 同じ仮想ネットワーク内の既存の Application Gateway と既存の AKS クラスターに対して AGIC アドオンを有効にしている場合は、次のピアリング手順を省略できます。 このアドオンを使用すると、Helm を使用する方法よりもはるかに高速な方法で AKS クラスターに AGIC をデプロイでき、さらにフル マネージド エクスペリエンスを提供します。

このチュートリアルでは、以下の内容を学習します。

  • リソース グループを作成する
  • 新しい AKS クラスターを作成する
  • 新しい Application Gateway の作成
  • Azure CLI を使用して既存の AKS クラスターの AGIC アドオンを有効にする
  • Azure portal を使用して既存の AKS クラスターの AGIC アドオンを有効にする
  • AKS クラスター仮想ネットワークを使用して Application Gateway 仮想ネットワークをピアリングする
  • AKS クラスターで AGIC をイングレスに使用してサンプル アプリケーションをデプロイする
  • アプリケーションが Application Gateway を介して到達可能であることを確認する。

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

リソース グループを作成する

Azure で、関連するリソースをリソース グループに割り当てます。 az group create を使用してリソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを "米国東部" の場所 (リージョン) に作成します。

az group create --name myResourceGroup --location eastus

新しい AKS クラスターをデプロイする

ここでは、新しい AKS クラスターをデプロイして、AGIC アドオンを有効にする既存の AKS クラスターがあることをシミュレートします。

次の例では、作成したリソース グループ myResourceGroupAzure CNI および マネージド ID を使用して、myCluster という名前の新しい AKS クラスターをデプロイします。

az aks create -n myCluster -g myResourceGroup --network-plugin azure --enable-managed-identity --generate-ssh-keys

上記のコマンドのその他のパラメーターを構成するには、「az aks create」を参照してください。

Note

ノード リソース グループは、MC_resource-group-name_cluster-name_location という名前で作成されます。

新しい Application Gateway のデプロイ

ここでは、myCluster という AKS クラスターへのトラフィックの負荷分散に使用する既存の Application Gateway があることをシミュレートするため、新しい Application Gateway をデプロイします。 アプリケーション ゲートウェイの名前は myApplicationGateway になりますが、最初に、myPublicIp という名前のパブリック IP リソースと、アドレス空間が 10.0.0.0/16 の myVnet という名前の新しい仮想ネットワークと、アドレス空間が 10.0.0.0/24 の mySubnet というサブネットを作成し、myPublicIp を使用してアプリケーション ゲートウェイを mySubnet にデプロイする必要があります。

注意事項

AKS クラスターと Application Gateway を別の仮想ネットワークで使用する場合、2 つの仮想ネットワークのアドレス空間が重複しないようにする必要があります。 AKS クラスターがデプロイされる既定のアドレス空間は 10.224.0.0/12 です。

az network public-ip create -n myPublicIp -g myResourceGroup --allocation-method Static --sku Standard
az network vnet create -n myVnet -g myResourceGroup --address-prefix 10.0.0.0/16 --subnet-name mySubnet --subnet-prefix 10.0.0.0/24 
az network application-gateway create -n myApplicationGateway -g myResourceGroup --sku Standard_v2 --public-ip-address myPublicIp --vnet-name myVnet --subnet mySubnet --priority 100

Note

アプリケーション ゲートウェイ イングレス コントローラー (AGIC) アドオンでは、アプリケーション ゲートウェイ v2 SKU (Standard および WAF) のみがサポートされており、アプリケーション ゲートウェイ v1 SKU はサポートされません

Azure CLI を使用して既存の AKS クラスターの AGIC アドオンを有効にする

Azure CLI を引き続き使用する場合は、作成した AKS クラスター myCluster で AGIC アドオンを有効にし、作成した既存の Application Gateway myApplicationGateway を使用する AGIC アドオンを指定します。

appgwId=$(az network application-gateway show -n myApplicationGateway -g myResourceGroup -o tsv --query "id") 
az aks enable-addons -n myCluster -g myResourceGroup -a ingress-appgw --appgw-id $appgwId

重要

AKS クラスター リソース グループ以外のリソース グループでアプリケーション ゲートウェイを使用する場合、作成されるマネージド ID ingressapplicationgateway-{AKSNAME} のアプリケーション ゲートウェイ リソース グループにネットワーク共同作成者および、閲覧者ロールを設定する必要があります。

2 つの仮想ネットワークを一緒にピアリングする

AKS クラスターを独自の仮想ネットワークにデプロイし、別の仮想ネットワークに Application Gateway をデプロイしたため、Application Gateway からクラスター内のポッドにトラフィックを流すには、2 つの仮想ネットワークを一緒にピアリングする必要があります。 2 つの仮想ネットワークをピアリングするには、接続が双方向になるよう、Azure CLI コマンドを 2 回個別に実行する必要があります。 最初のコマンドは、Application Gateway 仮想ネットワークから AKS 仮想ネットワークへのピアリング接続を作成します。2 番目のコマンドは、その逆方向にピアリング接続を作成します。

nodeResourceGroup=$(az aks show -n myCluster -g myResourceGroup -o tsv --query "nodeResourceGroup")
aksVnetName=$(az network vnet list -g $nodeResourceGroup -o tsv --query "[0].name")

aksVnetId=$(az network vnet show -n $aksVnetName -g $nodeResourceGroup -o tsv --query "id")
az network vnet peering create -n AppGWtoAKSVnetPeering -g myResourceGroup --vnet-name myVnet --remote-vnet $aksVnetId --allow-vnet-access

appGWVnetId=$(az network vnet show -n myVnet -g myResourceGroup -o tsv --query "id")
az network vnet peering create -n AKStoAppGWVnetPeering -g $nodeResourceGroup --vnet-name $aksVnetName --remote-vnet $appGWVnetId --allow-vnet-access

注意

Azure CNI を使用して AKS を作成した上記の "新しい AKS クラスターのデプロイ" 手順では、Kubenet モードを使用する既存の AKS クラスターがある場合は、ポッド IP 宛てのパケットがポッドをホストしているノードに到達できるようにルート テーブルを更新する必要があります。 これを実現する簡単な方法は、AKS によって作成された同じルート テーブルを Application Gateway のサブネットに関連付けることです。

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

次に、作成した AKS クラスターにサンプル アプリケーションをデプロイします。このクラスターでは、AGIC アドオンをイングレスに使用し、AKS クラスターに Application Gateway を接続します。 まず、az aks get-credentials コマンドを実行して、デプロイした AKS クラスターの資格情報を取得します。

az aks get-credentials -n myCluster -g myResourceGroup

作成したクラスターの資格情報を取得したら、次のコマンドを実行して、クラスターへのイングレスに AGIC を使用するサンプル アプリケーションをセットアップします。 AGIC によって、以前に設定した Application Gateway を、対応するルーティング規則で、デプロイした新しいサンプル アプリケーションに更新します。

kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml 

アプリケーションに到達可能であることを確認する

これで、Application Gateway が AKS クラスターへのトラフィックを処理するように設定されたので、アプリケーションが到達可能であることを確認してみましょう。 最初に、イングレスの IP アドレスを取得します。

kubectl get ingress

先ほど作成したサンプル アプリケーションが稼働していることを確認するには、上記のコマンドを実行して取得した Application Gateway の IP アドレスを参照するか、curl で確認します。 Application Gateway で更新を取得するのに 1 分ほどかかる場合があるため、Azure portal の Application Gateway の状態が "更新中" のままになっている場合は、IP アドレスに到達する前に完了するようにしてください。

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

不要になったら、myResourceGroupMC_myResourceGroup_myCluster_eastus リソース グループを削除して、このチュートリアルで作成したすべてのリソースを削除します。

az group delete --name myResourceGroup 
az group delete --name MC_myResourceGroup_myCluster_eastus

次のステップ