ALB コントローラーは、Kubernetes 内のゲートウェイ API とイングレス API 構成を、Application Gateway for Containers 内の負荷分散規則に変換する役割を担います。 次のガイドでは、新規または既存の Azure Kubernetes Service (AKS) クラスターで AKS マネージド ゲートウェイ API と Application Gateway for Containers ALB Controller アドオンの両方を有効にするために必要な手順について説明します。
[前提条件]
クラスターで ALB コントローラー アドオンを有効にする前に、次のタスクを完了する必要があります。
Azure サブスクリプションと
az-cliクライアントを準備します。# Sign in to your Azure subscription. SUBSCRIPTION_ID='<your subscription id>' az login az account set --subscription $SUBSCRIPTION_ID # Register required resource providers on Azure. az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.Network az provider register --namespace Microsoft.NetworkFunction az provider register --namespace Microsoft.ServiceNetworking # Install Azure CLI extensions. az extension add --name alb az extension add --name aks-previewアドオン機能の登録
# Register required preview features az feature register --namespace "Microsoft.ContainerService" --name "ManagedGatewayAPIPreview" az feature register --namespace "Microsoft.ContainerService" --name "ApplicationLoadBalancerPreview"
AKS アドオンを使用して AKS クラスターを設定する
AKS アドオンは、新規または既存のクラスターで有効にすることができます。
アドオンを正常にプロビジョニングするためには、次の AKS クラスター要件が必要です。
- Application Gateway for Containers が使用可能なリージョンに存在する必要があります。
- Azure CNI または Azure CNI オーバーレイ ネットワークを使用する必要があります。
- ワークロード ID 機能を有効にする必要があります。 既存の AKS クラスターでワークロード ID を有効にする方法について説明します。
- サポートされている AKS Kubernetes バージョンを使用している必要があります。
注
アドオンを有効にすると、ALB コントローラーがすべてのリージョンに登録されてデプロイされますが、Application Gateway for Containers が使用可能なリージョンにデプロイされていない場合、 Application Gateway for Containers リソースのプロビジョニングは失敗します。
新しいクラスター
次のコマンドを使用して、Azure CNI、ワークロード ID が有効、ゲートウェイ API アドオン、Application Gateway for Containers アドオンが有効になっている新しい AKS クラスターを作成します。
AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
LOCATION='northeurope'
VM_SIZE='<the size of the vm in AKS>' # The size needs to be available in your location
az group create --name $RESOURCE_GROUP --location $LOCATION
az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_NAME \
--location $LOCATION \
--node-vm-size $VM_SIZE \
--network-plugin azure \
--enable-oidc-issuer \
--enable-workload-identity \
--enable-gateway-api \
--enable-application-load-balancer \
--generate-ssh-key
注
Gateway API を使用して他のサービスと競合しないようにするには、Application Gateawy for Containers アドオンで AKS ゲートウェイ API アドオンを使用する必要があります。
既存のクラスター
既存のクラスターに前提条件を追加する
既存のクラスターを使用している場合は、AKS クラスターでワークロード ID のサポートを有効にしてください。 ワークロード ID は、次のコマンドを使用して有効にすることができます。
AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
az aks update -g $RESOURCE_GROUP -n $AKS_NAME --enable-oidc-issuer --enable-workload-identity --no-wait
ALB コントローラー アドオンをインストールする
既存のクラスターでは、次のコマンドを使用して、ゲートウェイ API および Application Gateway for Containers アドオンを有効にすることができます。
AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
# Update the AKS cluster
az aks update --name ${AKS_NAME} --resource-group ${RESOURCE_GROUP} --enable-gateway-api --enable-application-load-balancer
ALB コントローラーのインストールを確認する
ALB コントローラー ポッドを確認する
kube-system名前空間で ALB コントローラー ポッドが実行されていることを確認します。
kubectl get pods -n kube-system | grep alb-controller
alb-controller状態の 2 つのRunning ポッドが表示されます。
| 名前 | 準備完了 | 状態 | 再起動 | 年齢 |
|---|---|---|---|---|
| alb-controller-6648c5d5c-sdd9t | 1/1 | Running | 0 | 4日6時間 |
| alb-controller-6648c5d5c-au234 | 1/1 | Running | 0 | 4日6時間 |
GatewayClass を確認する
クラスターに GatewayClass azure-alb-external がインストールされていることを確認します。
kubectl get gatewayclass azure-alb-external -o yaml
GatewayClass に Valid GatewayClass という条件が含まれていることが分かります。 この条件は、既定の GatewayClass が設定されていること、およびこの GatewayClass を参照するすべてのゲートウェイ リソースが ALB コントローラーによって管理されることを示します。
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
creationTimestamp: "2023-07-31T13:07:00Z"
generation: 1
name: azure-alb-external
resourceVersion: "64270"
uid: 6c1443af-63e6-4b79-952f-6c3af1f1c41e
spec:
controllerName: alb.networking.azure.io/alb-controller
status:
conditions:
- lastTransitionTime: "2023-07-31T13:07:23Z"
message: Valid GatewayClass
observedGeneration: 1
reason: Accepted
status: "True"
type: Accepted
Azure portal でアドオン リソースを検証する
AKS クラスターの MC_ (ノード) リソース グループに移動します。 アドオンによって作成された次のリソースが表示されます。
マネージド ID
applicationloadbalancer-<cluster-name>という名前の ID は、次のロール割り当てで作成されます。
| Role | Scope |
|---|---|
| ネットワーク共同作成者 | MC リソース グループ |
| AppGw for Containers 構成マネージャー | MC リソース グループ |
| Reader | MC リソース グループ |
applicationloadbalancer-<cluster-name> ID には、次のプロパティを使用して構成されたフェデレーション ID 資格情報があります。
- 名前: aksfic
- 名前空間: kube-system
- サービス アカウント: alb-controller-sa
Warnung
アドオンとの統合をプロビジョニングするときに ID または名前空間を変更することはサポートされていません。 デプロイをカスタマイズする場合は、 helm を使用したデプロイを検討してください。
サブネット
AKS マネージド仮想ネットワーク オプションを使用して AKS クラスターでアドオンを有効にすると、aks-appgateway という名前のサブネットが、Microsoft.ServiceNetworking/TrafficController に対して委任が有効になっている状態で自動的に作成されます。
次のステップ
クラスターに ALB コントローラーが正常にインストールされたので、Azure で Application Gateway for Containers リソースをプロビジョニングできます。
次の手順では、ALB コントローラーを Application Gateway for Containers にリンクします。 このリンクの作成方法は、デプロイ戦略によって異なります。
Application Gateway for Containers の管理に関しては、次の 2 つのデプロイ戦略があります。
-
Bring your own (BYO) デプロイ: このデプロイ戦略では、Application Gateway for Containers リソース、関連付けリソース、フロントエンド リソースのデプロイとライフサイクルが Azure portal、CLI、PowerShell、Terraform などを介していることが前提となっており、Kubernetes 内の構成で参照されます。
- BYO デプロイを使用するには、「 コンテナー用 Application Gateway を作成する - 独自のデプロイを使用する」を参照してください。
-
ALB コントローラーによって管理: このデプロイ戦略では、Kubernetes にデプロイされた ALB コントローラーが Application Gateway for Containers リソースとそのサブ リソースのライフサイクルを管理します。 ALB コントローラーは、ApplicationLoadBalancer カスタム リソースがクラスターで定義されている場合に、Application Gateway for Containers リソースを作成します。 サービスのライフサイクルは、カスタム リソースのライフサイクルに基づいています。
- ALB マネージド デプロイを使用するには、「 ALB コントローラーによって管理されるコンテナー用 Application Gateway の作成」を参照してください。
試すサンプル シナリオ
Application Gateway for Containers と ALB コントローラーをアンインストールする
ALB コントローラー アドオンをアンインストールする場合は、次の手順を実行します。
ALB コントローラー アドオンを無効にする
クラスターで ALB コントローラー アドオンを無効にします。
AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'
# Update the AKS cluster
az aks update --name ${AKS_NAME} --resource-group ${RESOURCE_GROUP} --disable-gateway-api --disable-application-load-balancer
リソース グループを削除する
Application Gateway for Containers を含むすべてのリソースを完全にクリーンアップするには、リソース グループを削除します。
az group delete --resource-group $RESOURCE_GROUP