クイックスタート: Application Gateway for Containers ALB コントローラーをデプロイする

ALB コントローラーは、Kubernetes 内のゲートウェイ API とイングレス API 構成を、Application Gateway for Containers 内の負荷分散規則に変換する役割を担います。 以下のガイドでは、ALB コントローラーを新規または既存の AKS クラスターにプロビジョニングするために必要な手順について説明します。

前提条件

Azure に Application Gateway for Containers をデプロイし、クラスターに ALB コントローラーをインストールする前に、次のタスクを完了する必要があります。

  1. 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
    
  2. ワークロードの 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
    
  3. Helm のインストール

    Helm は、ALB コントローラーのインストールに使用されるオープンソースのパッケージ化ツールです。

    Note

    Helm は Azure Cloud Shell で既に利用可能です。 Azure Cloud Shell を使用している場合、追加の Helm インストールは必要ありません。

    次の手順を使用して、Windows または Linux を実行しているローカル デバイスに Helm をインストールすることもできます。 最新バージョンの Helm がインストールされていることを確認してください。

    インストールのさまざまなオプションについては、インストールの手順を参照してください。 同様に、お使いの Windows のバージョンに Windows パッケージ マネージャー winget がインストールされている場合は、次のコマンドを実行できます。

    winget install helm.helm
    

ALB コントローラーをインストールする

  1. 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 分間お待ちください。

  2. Helm を使用して ALB コントローラーをインストールします

    新しいデプロイの場合

    ALB コントローラーをインストールするには、helm install コマンドを使用します。

    helm install コマンドを実行すると、Helm チャートが "既定" の名前空間にデプロイされます。 ALB コントローラーはデプロイされると、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 チャート リソースの名前空間がまだ定義されていない場合は、--namespace または -n パラメーターと共に --create-namespace パラメーターも指定されていることを確認します。

    ALB コントローラーは、次のコマンドを実行してインストールできます。

    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-resource-namespace> \
         --version 1.0.0 \
         --set albController.namespace=<alb-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 を実行します。

    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-resource-namespace> \
        --version 1.0.0 \
        --set albController.namespace=<alb-controller-namespace> \
        --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
    

ALB コントローラーのインストールを確認する

  1. 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
  2. クラスターに 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 内の構成で参照されます。
  • ALB コントローラーによって管理:このデプロイ戦略では、Kubernetes にデプロイされた ALB コントローラーが Application Gateway for Containers リソースとそのサブリソースのライフサイクルを担当します。 ALB コントローラーは、ApplicationLoadBalancer カスタム リソースがクラスターで定義されている場合に、Application Gateway for Containers リソースを作成します。 サービスのライフサイクルは、カスタム リソースのライフサイクルに基づいています。

Application Gateway for Containers と ALB コントローラーをアンインストールする

ALB コントローラーをアンインストールする場合は、次の手順を実行します。

  1. Application Gateway for Containers を削除します。Application Gateway for Containers リソースを含むリソース グループを削除できます。
az group delete --resource-group $RESOURCE_GROUP
  1. 次のコマンドを実行して、クラスターから 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