クイックスタート: Application Gateway for Containers ALB コントローラーをデプロイする
ALB コントローラーは、Kubernetes 内のゲートウェイ API とイングレス API 構成を、Application Gateway for Containers 内の負荷分散規則に変換する役割を担います。 以下のガイドでは、ALB コントローラーを新規または既存の AKS クラスターにプロビジョニングするために必要な手順について説明します。
前提条件
Azure に Application Gateway for Containers をデプロイし、クラスターに 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
ワークロードの AKS クラスターを設定します。
Note
AKS クラスターは、Application Gateway for Containers が使用可能なリージョンに存在する必要があります。AKS クラスターでは Azure CNI を使用する必要があります。 AKS クラスターでは、ワークロード ID 機能が有効になっている必要があります。 既存の AKS クラスターでワークロード ID を有効にする方法について説明します。
既存のクラスターを使用している場合は、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
既存のクラスターがない場合は、以下のコマンドを使用して、Azure CNI とワークロード ID が有効になっている新しい 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 \ --generate-ssh-key
Helm のインストール
Helm は、ALB コントローラーのインストールに使用されるオープンソースのパッケージ化ツールです。
Note
Helm は Azure Cloud Shell で既に利用可能です。 Azure Cloud Shell を使用している場合、追加の Helm インストールは必要ありません。
次の手順を使用して、Windows または Linux を実行しているローカル デバイスに Helm をインストールすることもできます。 最新バージョンの Helm がインストールされていることを確認してください。
インストールのさまざまなオプションについては、インストールの手順を参照してください。 同様に、お使いの Windows のバージョンに Windows パッケージ マネージャー winget がインストールされている場合は、次のコマンドを実行できます。
winget install helm.helm
ALB コントローラーをインストールする
ALB コントローラーのユーザー マネージド ID を作成し、AKS クラスターで使用するワークロード ID として ID をフェデレーションします。
RESOURCE_GROUP='<your resource group name>' AKS_NAME='<your aks cluster name>' IDENTITY_RESOURCE_NAME='azure-alb-identity' mcResourceGroup=$(az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "nodeResourceGroup" -o tsv) mcResourceGroupId=$(az group show --name $mcResourceGroup --query id -otsv) echo "Creating identity $IDENTITY_RESOURCE_NAME in resource group $RESOURCE_GROUP" az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_RESOURCE_NAME principalId="$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)" echo "Waiting 60 seconds to allow for replication of the identity..." sleep 60 echo "Apply Reader role to the AKS managed cluster resource group for the newly provisioned identity" az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" # Reader role echo "Set up federation with AKS OIDC issuer" AKS_OIDC_ISSUER="$(az aks show -n "$AKS_NAME" -g "$RESOURCE_GROUP" --query "oidcIssuerProfile.issuerUrl" -o tsv)" az identity federated-credential create --name "azure-alb-identity" \ --identity-name "$IDENTITY_RESOURCE_NAME" \ --resource-group $RESOURCE_GROUP \ --issuer "$AKS_OIDC_ISSUER" \ --subject "system:serviceaccount:azure-alb-system:alb-controller-sa"
ALB コントローラーには、azure-alb-identity という名前のフェデレーション資格情報が必要です。 その他のフェデレーション資格情報名はサポートされていません。
Note
作成直後にマネージド ID を割り当てると、principalId が存在しないというエラーが発生する可能性があります。 ID を委任する前に、Microsoft Entra ID で ID がレプリケートされるまで約 1 分間お待ちください。
Helm を使用して ALB コントローラーをインストールします
新しいデプロイの場合
ALB コントローラーをインストールするには、
helm install
コマンドを使用します。helm install
コマンドを実行すると、Helm チャートが "既定" の名前空間にデプロイされます。 alb-controller はデプロイされると、azure-alb-system 名前空間にデプロイされます。 これらの名前空間は両方とも、必要に応じて個別にオーバーライドできます。 Helm チャートがデプロイされる名前空間をオーバーライドするには、--namespace (または -n) パラメーターを指定します。 ALB コントローラーによって使用される azure-alb-system 名前空間をオーバーライドするには、インストール時に albController.namespace プロパティを設定します (--set albController.namespace
)。--namespace
および--set albController.namespace
パラメーターの両方が定義されていない場合は、"既定" の名前空間が Helm チャートに使用され、azure-alb-system 名前空間が ALB コントローラー コンポーネントに使用されます。 最後に、Helm チャート リソースの名前空間がまだ定義されていない場合は、--create-namespace
パラメーターも--namespace
または-n
パラメーターと共に指定されていることを確認します。ALB コントローラーは、次のコマンドを実行してインストールできます。
HELM_NAMESPACE='<namespace for deployment>' CONTROLLER_NAMESPACE='azure-alb-system' az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME helm install alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \ --namespace $HELM_NAMESPACE \ --version 1.3.7 \ --set albController.namespace=$CONTROLLER_NAMESPACE \ --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
既存のデプロイの場合
以下のコマンドを実行することで ALB をアップグレートできます。
Note
以前に行ったインストールで名前空間をオーバーライドした場合は、アップグレード時に、
--namespace
または--set albController.namespace
パラメーターを指定するようにしてください。 以前に使用した名前空間を確認するには、Helm 名前空間にはhelm list
コマンドを、ALB コントローラーにはkubectl get pod -A -l app=alb-controller
を実行します。HELM_NAMESPACE='<your cluster name>' CONTROLLER_NAMESPACE='azure-alb-system' az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME helm upgrade alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \ --namespace $HELM_NAMESPACE \ --version 1.3.7 \ --set albController.namespace=$CONTROLLER_NAMESPACE \ --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
ALB コントローラーのインストールを確認する
ALB コントローラー ポッドの準備ができているかどうかを確認します。
kubectl get pods -n azure-alb-system
次のように表示されます。
名前 準備完了 状態 再起動 AGE alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 実行中 0 4d6h alb-controller-6648c5d5c-sdd9t 1/1 実行中 0 4d6h alb-controller-6648c5d5c-au234 1/1 実行中 0 4d6h クラスターに GatewayClass
azure-application-lb
がインストールされていることを確認します。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
次のステップ
クラスターに 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 for Containers を作成する - bring your own デプロイ」を参照してください
- ALB コントローラーによって管理:このデプロイ戦略では、Kubernetes にデプロイされた ALB コントローラーが Application Gateway for Containers リソースとそのサブリソースのライフサイクルを担当します。 ALB コントローラーは、ApplicationLoadBalancer カスタム リソースがクラスターで定義されている場合に、Application Gateway for Containers リソースを作成します。 サービスのライフサイクルは、カスタム リソースのライフサイクルに基づいています。
- ALB マネージド デプロイを使用するには、「ALB コントローラーによって管理される Application Gateway for Containers を作成する」を参照してください
Application Gateway for Containers と ALB コントローラーをアンインストールする
ALB コントローラーをアンインストールする場合は、次の手順を実行します。
- Application Gateway for Containers を削除します。Application Gateway for Containers リソースを含むリソース グループを削除できます。
az group delete --resource-group $RESOURCE_GROUP
- 次のコマンドを実行して、クラスターから ALB コントローラーとそのリソースをアンインストールします。
helm uninstall alb-controller
kubectl delete ns azure-alb-system
kubectl delete gatewayclass azure-alb-external
Note
alb-controller のインストールに別の名前空間が使用された場合は、helm uninstall コマンドで -n パラメーターを指定して、使用する適切な名前空間を定義してください。 例: helm uninstall alb-controller -n unique-namespace