다음을 통해 공유


빠른 시작: 컨테이너 ALB 컨트롤러용 Application Gateway 배포

ALB 컨트롤러는 Kubernetes 내의 게이트웨이 API 및 수신 API 구성을 컨테이너용 Application Gateway 내의 부하 분산 규칙으로 변환하는 역할을 담당합니다. 다음 가이드에서는 ALB 컨트롤러를 새 AKS 클러스터 또는 기존 AKS 클러스터로 프로비전하는 데 필요한 단계를 안내합니다.

필수 조건

Azure에서 컨테이너용 Application Gateway를 배포하고 클러스터에 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 클러스터를 설정합니다.

    참고 항목

    AKS 클러스터는 컨테이너용 Application Gateway를 사용할 수 있는 지역에 있어야 합니다. 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 컨트롤러를 설치하는 데 사용되는 오픈 소스 패키징 도구입니다.

    참고 항목

    Helm은 이미 Azure Cloud Shell에서 사용할 수 있습니다. Azure Cloud Shell을 사용하는 경우 추가적인 Helm 설치가 필요하지 않습니다.

    다음 단계를 사용하여 Windows 또는 Linux를 실행하는 로컬 디바이스에 Helm을 설치할 수도 있습니다. 최신 버전의 helm이 설치되어 있는지 확인합니다.

    다양한 설치 옵션은 설치 지침을 참조하세요. 마찬가지로, 사용 중인 Windows 버전에 Windows 패키지 관리자 winget이 설치되어 있는 경우 다음 명령을 실행할 수 있습니다.

    winget install helm.helm
    

ALB 컨트롤러 설치

  1. ALB 컨트롤러에 대한 사용자 관리 ID를 만들고 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인 페더레이션 자격 증명이 필요합니다. 다른 페더레이션 자격 증명 이름은 지원되지 않습니다.

    참고 항목

    관리 ID를 만든 직후 할당하면 principalId가 존재하지 않는 다는 오류가 발생할 수 있습니다. ID를 위임하기 전에 ID가 Microsoft Entra ID에 복제되는 데 약 1분 정도 소요됩니다.

  2. Helm을 사용하여 ALB 컨트롤러 설치

    새 배포의 경우

    ALB 컨트롤러를 설치하려면 helm install 명령을 사용합니다.

    helm install 명령이 실행되면 helm 차트가 default 네임스페이스에 배포됩니다. alb-controller가 배포되면 azure-alb-system 네임스페이스에 배포됩니다. 이 두 네임스페이스는 모두 필요에 따라 독립적으로 재정의될 수 있습니다. helm 차트가 배포된 네임스페이스를 재정의하려면 --namespace(또는 -n) 매개 변수를 지정할 수 있습니다. alb-controller에서 사용하는 azure-alb-system 네임스페이스를 재정의하려면 설치 중에 albController.namespace 속성을 설정하면 됩니다(--set albController.namespace). --namespace 또는 --set albController.namespace 매개 변수가 모두 정의되지 않은 경우 default 네임스페이스는 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를 업그레이드할 수 있습니다.

    참고 항목

    업그레이드하는 동안 이전에 설치된 설치에서 네임스페이스가 재정의된 경우 --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 컨트롤러 설치 확인

  1. ALB 컨트롤러 Pod가 준비되었는지 확인합니다.

    kubectl get pods -n azure-alb-system
    

    다음이 표시되어야 합니다.

    이름 READY 상태 다시 시작 나이
    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 리소스를 프로비전할 수 있습니다.

다음 단계는 ALB 컨트롤러를 컨테이너용 Application Gateway에 연결하는 것입니다. 이 링크를 만드는 방법은 배포 전략에 따라 달라집니다.

컨테이너용 Application Gateway를 관리하기 위한 두 가지 배포 전략이 있습니다.

  • BYO(Bring Your Own) 배포: 이 배포 전략에서 컨테이너용 Application Gateway 리소스, 연결 리소스 및 프런트 엔드 리소스의 배포 및 수명 주기는 Azure Portal, CLI, PowerShell, Terraform 등을 통해 가정되고 Kubernetes 내에서 구성에서 참조됩니다.
  • ALB 컨트롤러에서 관리: 이 배포 전략에서 Kubernetes에 배포된 ALB 컨트롤러는 컨테이너 리소스 및 해당 하위 리소스에 대한 Application Gateway의 수명 주기를 담당합니다. ALB 컨트롤러는 클러스터에서 ApplicationLoadBalancer 사용자 지정 리소스가 정의되면 컨테이너용 Application Gateway 리소스를 만듭니다. 서비스 수명 주기는 사용자 지정 리소스의 수명 주기를 기반으로 합니다.

컨테이너용 Application Gateway 및 ALB 컨트롤러 제거

ALB 컨트롤러를 제거하려면 다음 단계를 완료합니다.

  1. 컨테이너용 Application Gateway를 삭제하면 컨테이너용 Application Gateway 리소스가 포함된 리소스 그룹을 삭제할 수 있습니다.
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

참고 항목

alb-controller 설치에 다른 네임스페이스를 사용한 경우 helm uninstall 명령에 -n 매개 변수를 지정하여 사용할 적절한 네임스페이스를 정의해야 합니다. 예: helm uninstall alb-controller -n unique-namespace