クイック スタート: ALB コントローラーによって管理される Application Gateway for Containers を作成する

このガイドでは、Application Gateway for Containers のすべてのリソースがが ALB コントローラーによって管理されるデプロイ戦略に従っていることが前提となっています。 ライフサイクルは、Kubernetes で定義されているリソースにより決まります。 ALB コントローラーは、ApplicationLoadBalancer カスタム リソースがクラスターで定義されたときに、Application Gateway for Containers リソースを作成します。 Application Gateway for Containers のライフサイクルは、カスタム リソースのライフサイクルに基づきます。

前提条件

最初に ALB コントローラーを Kubernetes クラスターにデプロイしていることを確認します。 ALB コントローラーをまだデプロイしていない場合は、「クイック スタート: Application Gateway for Containers ALB コントローラーのデプロイ」を参照してください。

Application Gateway for Containers 用に仮想ネットワーク/サブネットを準備する

使用可能な IP アドレスが 250 以上あり、Application Gateway for Containers リソースに委任されるサブネットがない場合は、次の手順に従って新しいサブネットを作成し、サブネットの委任を有効にします。 新しいサブネットのアドレス空間は、VNet 内の既存のサブネットと重複することはできません。

Application Gateway for Containers を AKS クラスターを含む仮想ネットワークにデプロイする場合は、次のコマンドを実行してクラスターの仮想ネットワークを見つけて割り当てます。 この情報は、次の手順で使用します。

AKS_NAME='<your cluster name>'
RESOURCE_GROUP='<your resource group name>'

MC_RESOURCE_GROUP=$(az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -o tsv)
CLUSTER_SUBNET_ID=$(az vmss list --resource-group $MC_RESOURCE_GROUP --query '[0].virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].subnet.id' -o tsv)
read -d '' VNET_NAME VNET_RESOURCE_GROUP VNET_ID <<< $(az network vnet show --ids $CLUSTER_SUBNET_ID --query '[name, resourceGroup, id]' -o tsv)

次のコマンドを実行して、少なくとも 250 個の使用可能な IP アドレスを含む新しいサブネットを作成し、Application Gateway for Containers 関連付けリソースのためのサブネット委任を有効にします。

SUBNET_ADDRESS_PREFIX='<network address and prefix for an address space under the vnet that has at least 250 available addresses (/24 or larger subnet)>'
ALB_SUBNET_NAME='subnet-alb' # subnet name can be any non-reserved subnet name (i.e. GatewaySubnet, AzureFirewallSubnet, AzureBastionSubnet would all be invalid)
az network vnet subnet create \
  --resource-group $VNET_RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --name $ALB_SUBNET_NAME \
  --address-prefixes $SUBNET_ADDRESS_PREFIX \
  --delegations 'Microsoft.ServiceNetworking/trafficControllers'
ALB_SUBNET_ID=$(az network vnet subnet show --name $ALB_SUBNET_NAME --resource-group $VNET_RESOURCE_GROUP --vnet-name $VNET_NAME --query '[id]' --output tsv)

マネージド ID にアクセス許可を委任する

ALB コントローラーには、新しい Application Gateway for Containers リソースをプロビジョニングする機能と、Application Gateway for Containers の関連リソース向けのサブネットに参加する機能が必要です。

この例では、AppGW for Containers Configuration Manager ロールをマネージド クラスターのあるリソース グループに委任し、Application Gateway for Containers 関連付けサブネットで使用されるサブネットに、Microsoft.Network/virtualNetworks/subnets/join/action アクセス許可を含む "ネットワーク共同作成者" ロールを委任します。

必要に応じて、Microsoft.Network/virtualNetworks/subnets/join/action アクセス許可を含むカスタム ロールを作成して割り当て、"ネットワーク共同作成者" ロールに含まれる他のアクセス許可を除外できます。サブネットのアクセス許可の管理」の詳細を確認してください。

IDENTITY_RESOURCE_NAME='azure-alb-identity'

MC_RESOURCE_GROUP=$(az aks show --name $AKS_NAME --resource-group $RESOURCE_GROUP --query "nodeResourceGroup" -otsv | tr -d '\r')

mcResourceGroupId=$(az group show --name $MC_RESOURCE_GROUP --query id -otsv)
principalId=$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)

# Delegate AppGw for Containers Configuration Manager role to AKS Managed Cluster RG
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --role "fbc52c3f-28ad-4303-a892-8a056630b8f1" 

# Delegate Network Contributor permission for join to association subnet
az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $ALB_SUBNET_ID --role "4d97b98b-1d4f-4787-a291-c67834d212e7" 

ApplicationLoadBalancer Kubernetes リソースを作成する

  1. ApplicationLoadBalancer リソースの Kubernetes 名前空間を定義します
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: alb-test-infra
EOF
  1. ApplicationLoadBalancer リソースを定義し、Application Gateway for Containers の関連付けリソースをデプロイするサブネット ID を指定します。 関連付けにより、Application Gateway for Containers から定義済みのサブネット (および該当する場合は接続されたネットワーク) への接続が確立され、定義されたバックエンドにトラフィックをプロキシできるようになります。

Note

ALB コントローラーは、ARM でコンテナー リソースの Application Gateway を作成するときに、そのリソースに対して次の名前付け規則を使用します。

  • alb-<8 個のランダムに生成された文字> でコンテナー リソースの Application Gateway を定義します
  • as-<8 個のランダムに生成された文字> で関連付けリソースを定義します

Azure で作成されたリソースの名前を変更したい場合は、独自のデプロイ戦略の持ち込みに従うことを検討してください。

次のコマンドを実行して、コンテナー リソースおよび関連付け用の Application Gateway を作成します。

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: ApplicationLoadBalancer
metadata:
  name: alb-test
  namespace: alb-test-infra
spec:
  associations:
  - $ALB_SUBNET_ID
EOF

Application Gateway for Containers リソースの作成を検証する

ApplicationLoadBalancer リソースが作成されたら、Application Gateway for Containers リソースのデプロイの進行状況を追跡できます。 プロビジョニングが完了すると、デプロイは InProgress から Programmed 状態に移行します。 Application Gateway for Containers のリソースが作成されるまで、5 分から 6 分かかる場合があります。

次のコマンドを実行すると、ApplicationLoadBalancer リソースの状態を確認できます:

kubectl get applicationloadbalancer alb-test -n alb-test-infra -o yaml -w

Kubernetes からの Application Gateway for Containers リソースの正常なプロビジョニングの出力例。

status:
  conditions:
  - lastTransitionTime: "2023-06-19T21:03:29Z"
    message: Valid Application Gateway for Containers resource
    observedGeneration: 1
    reason: Accepted
    status: "True"
    type: Accepted
  - lastTransitionTime: "2023-06-19T21:03:29Z"
    message: alb-id=/subscriptions/xxx/resourceGroups/yyy/providers/Microsoft.ServiceNetworking/trafficControllers/alb-zzz
    observedGeneration: 1
    reason: Ready
    status: "True"
    type: Deployment

次のステップ

これで、クラスターに ALB コントローラーがインストールされ、Azure に Application Gateway for Containers がデプロイされました。

サンプル アプリケーションをデプロイするためのハウツー ガイドをいくつか試し、Application Gateway for Containers の負荷分散の概念の一部を実証します。