빠른 시작: ALB 컨트롤러에서 관리되는 컨테이너용 Application Gateway 만들기

이 가이드에서는 ALB 컨트롤러에서 관리되는 배포 전략을 따른다고 합니다. 이 전략에서는 ALB 컨트롤러가 모든 컨테이너용 Application Gateway 리소스를 관리합니다. 수명 주기는 Kubernetes에 정의된 리소스에 따라 결정됩니다. ALB 컨트롤러는 클러스터에서 ApplicationLoadBalancer 사용자 지정 리소스가 정의되면 컨테이너용 Application Gateway 리소스를 만듭니다. 컨테이너용 Application Gateway 수명 주기는 사용자 지정 리소스 수명 주기를 기반으로 합니다.

필수 조건

먼저 Kubernetes 클러스터에 ALB 컨트롤러를 배포했는지 확인합니다. ALB 컨트롤러를 아직 배포하지 않았으면 빠른 시작: 컨테이너용 Application Gateway ALB 컨테이너 배포를 참조하세요.

컨테이너용 Application Gateway의 가상 네트워크/서브넷 준비

IP 주소를 최소 250개 이상 사용할 수 있고 컨테이너용 Application Gateway 리소스에 위임된 서브넷이 없으면 다음 단계를 수행하여 새 서브넷을 만들고 서브넷 위임을 사용하도록 설정합니다. 새 서브넷 주소 공간은 VNet의 기존 서브넷과 겹칠 수 없습니다.

AKS 클러스터가 포함된 가상 네트워크에 컨테이너용 Application Gateway를 배포하려면 다음 명령을 실행하여 클러스터의 가상 네트워크를 찾아 할당합니다. 이 정보는 다음 단계에서 사용됩니다.

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)

다음 명령을 실행하여 사용 가능한 IP 주소가 최소 250개 이상 포함된 새 서브넷을 만들고 컨테이너용 Application Gateway 연결 리소스에 대한 서브넷 위임을 사용하도록 설정합니다.

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 리소스를 프로비전하는 기능과 컨테이너용 Application Gateway 연결 리소스용 서브넷에 조인하는 기능이 필요합니다.

이 예제에서는 AppGW for Containers Configuration Manager 역할을 관리 클러스터가 포함된 리소스 그룹에 위임하고 네트워크 기여자 역할을 Microsoft.Network/virtualNetworks/subnets/join/action 권한이 포함된 컨테이너용 Application Gateway 연결 서브넷에서 사용하는 서브넷에 위임합니다.

원할 경우 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 연결 리소스에서 배포해야 하는 서브넷 ID를 지정합니다. 연결은 트래픽을 정의된 백 엔드로 프록시할 수 있도록 컨테이너용 Application Gateway에서 정의된 서브넷(및 해당하는 경우 연결된 네트워크)으로의 연결을 설정합니다.

참고 항목

ALB 컨트롤러에서 ARM에 컨테이너용 Application Gateway 리소스를 만들 때 프런트 리소스에 다음 명명 규칙을 사용합니다.

  • alb-컨테이너용 Application Gateway 리소스를 정의하기 위해 <임의로 생성된 8자>
  • 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 리소스 만들기 유효성 검사

ApplicationLoadBalancer 리소스가 생성되면 컨테이너용 Application Gateway 리소스의 배포 진행률을 추적할 수 있습니다. 프로비전이 완료되면 배포가 진행 중에서 프로그래밍됨 상태로 전환됩니다. 컨테이너용 Application Gateway 연결을 만드는 데 5~6분 정도 걸릴 수 있습니다.

다음 명령을 실행하여 ApplicationLoadBalancer 리소스 상태를 확인할 수 있습니다.

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

다음은 Kubernetes에서 컨테이너용 Application Gateway 리소스 프로비전에 대한 예제 출력입니다.

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 리소스를 배포했습니다.

샘플 애플리케이션을 배포하기 위한 몇 가지 방법 가이드를 사용해 보세요. 이 가이드에서는 컨테이너용 Application Gateway의 부하 분산 개념을 보여 줍니다.