빠른 시작: 컨테이너 ALB 컨트롤러용 Application Gateway 배포
ALB 컨트롤러는 Kubernetes 내의 게이트웨이 API 및 수신 API 구성을 컨테이너용 Application Gateway 내의 부하 분산 규칙으로 변환하는 역할을 담당합니다. 다음 가이드에서는 ALB 컨트롤러를 새 AKS 클러스터 또는 기존 AKS 클러스터로 프로비전하는 데 필요한 단계를 안내합니다.
필수 조건
Azure에서 컨테이너용 Application Gateway를 배포하고 클러스터에 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 클러스터를 설정합니다.
참고 항목
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
Helm 설치
Helm은 ALB 컨트롤러를 설치하는 데 사용되는 오픈 소스 패키징 도구입니다.
참고 항목
Helm은 이미 Azure Cloud Shell에서 사용할 수 있습니다. Azure Cloud Shell을 사용하는 경우 추가적인 Helm 설치가 필요하지 않습니다.
다음 단계를 사용하여 Windows 또는 Linux를 실행하는 로컬 디바이스에 Helm을 설치할 수도 있습니다. 최신 버전의 helm이 설치되어 있는지 확인합니다.
다양한 설치 옵션은 설치 지침을 참조하세요. 마찬가지로, 사용 중인 Windows 버전에 Windows 패키지 관리자 winget이 설치되어 있는 경우 다음 명령을 실행할 수 있습니다.
winget install helm.helm
ALB 컨트롤러 설치
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분 정도 소요됩니다.
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 컨트롤러 설치 확인
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 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 내에서 구성에서 참조됩니다.
- BYO 배포를 사용하려면 컨테이너용 Application Gateway 만들기 - BYOD(Bring Your Own Deployment)를 참조하세요.
- ALB 컨트롤러에서 관리: 이 배포 전략에서 Kubernetes에 배포된 ALB 컨트롤러는 컨테이너 리소스 및 해당 하위 리소스에 대한 Application Gateway의 수명 주기를 담당합니다. ALB 컨트롤러는 클러스터에서 ApplicationLoadBalancer 사용자 지정 리소스가 정의되면 컨테이너용 Application Gateway 리소스를 만듭니다. 서비스 수명 주기는 사용자 지정 리소스의 수명 주기를 기반으로 합니다.
- ALB 관리형 배포를 사용하려면 ALB 컨트롤러에서 관리하는 컨테이너용 Application Gateway 만들기를 참조하세요.
컨테이너용 Application Gateway 및 ALB 컨트롤러 제거
ALB 컨트롤러를 제거하려면 다음 단계를 완료합니다.
- 컨테이너용 Application Gateway를 삭제하면 컨테이너용 Application Gateway 리소스가 포함된 리소스 그룹을 삭제할 수 있습니다.
az group delete --resource-group $RESOURCE_GROUP
- 클러스터에서 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