Azure Kubernetes Service(AKS)의 Azure Container Registry(ACR)를 사용하여 인증
AKS(Azure Kubernetes Service)에서 ACR(Azure Container Registry)을 사용하는 경우 인증 메커니즘을 설정해야 합니다. Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 ACR과 AKS 간에 필요한 권한을 구성할 수 있습니다. 이 문서에서는 Azure CLI 또는 Azure PowerShell을 사용하여 이러한 Azure 서비스 간에 인증을 구성하는 예제를 제공합니다.
AKS-ACR 통합은 AKS 클러스터의 에이전트 풀과 연결된 Microsoft Entra ID 관리 ID에 AcrPull 역할을 할당합니다. AKS 관리 ID에 대한 자세한 내용은 관리 ID 요약을 참조하세요.
Important
ACR을 연결할 때 Microsoft Entra 그룹에 대기 시간 문제가 있습니다. AcrPull 역할이 Microsoft Entra 그룹에 부여되고 RBAC 구성을 완료하기 위해 kubelet ID가 그룹에 추가되는 경우 RBAC 그룹이 적용되기 전에 지연이 있을 수 있습니다. RBAC 구성을 완료해야 하는 자동화를 실행하는 경우 해결 방법으로 자체 kubelet ID 사용을 사용하는 것이 좋습니다. 사용자가 할당한 ID를 미리 만들고, Microsoft Entra 그룹에 추가한 다음, ID를 kubelet ID로 사용하여 AKS 클러스터를 만들 수 있습니다. 이렇게 하면 kubelet에서 토큰을 생성하기 전에 ID가 Microsoft Entra 그룹에 추가되므로 대기 시간 문제가 방지됩니다.
참고 항목
이 문서에서는 AKS와 ACR 간의 자동 인증을 다룹니다. 프라이빗 외부 레지스트리에서 이미지를 풀해야 하는 경우 이미지 풀 비밀을 사용합니다.
시작하기 전에
- Azure 구독에 소유자, Azure 계정 관리자 또는 Azure 공동 관리자 역할이 있어야 합니다.
- 이러한 역할 중 하나가 필요하지 않도록 하려면 기존 관리 ID를 사용하여 AKS에서 ACR을 인증할 수 있습니다. 자세한 내용은 Azure 관리 ID를 사용하여 ACR에서 인증 받기를 참조하세요.
- 이 문서를 진행하려면 Azure CLI 버전 2.7.0 이상을 실행하고 있어야 합니다.
az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - Azure PowerShell을 사용하는 경우 이 문서에서는 Azure PowerShell 버전 5.9.0 이상을 실행해야 합니다.
Get-InstalledModule -Name Az
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure PowerShell 설치를 참조하세요. - ACR을 구성하기 위해 Terraform을 사용하는 예제 및 구문은 Terraform 참조에서 찾을 수 있습니다.
새 ACR 만들기
ACR이 아직 없는 경우
az acr create
명령을 사용하여 만듭니다. 다음 예제에서는MYACR
변수를 ACR, mycontainerregistry의 이름으로 설정하고, 변수를 사용하여 레지스트리를 만듭니다. ACR 이름은 전역적으로 고유해야 하며 소문자만 사용해야 합니다.MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
새 AKS 클러스터를 만들고 기존 ACR과 통합
새 AKS 클러스터를 만들고
az aks create
명령과--attach-acr
매개 변수를 함께 사용하여 기존 ACR과 통합합니다. 이 명령을 사용하여 구독의 기존 ACR에 권한을 부여하고 관리 ID에 적절한 AcrPull 역할을 구성할 수 있습니다.MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
이 명령을 완료하는 데는 몇 분 정도 걸릴 수 있습니다.
참고 항목
AKS 클러스터와 다른 구독에 있는 ACR을 사용하거나 ACR 이름 대신 ACR 리소스 ID를 사용하려는 경우 다음 구문을 사용하면 그렇게 할 수 있습니다.
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
기존 AKS 클러스터에 대한 ACR 통합 구성
기존 AKS 클러스터에 ACR 연결
az aks update
명령과--attach-acr
매개 변수를 acr-name 또는 acr-resource-id에 유효한 값과 함께 사용하여 기존 ACR을 기존 AKS 클러스터와 통합합니다.# Attach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-name> # Attach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-resource-id>
AKS 클러스터에서 ACR 분리
az aks update
명령을--detach-acr
매개 변수와 acr-name 또는 acr-resource-id에 유효한 값을 사용하여 ACR과 AKS 클러스터 간의 통합을 제거합니다.# Detach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-name> # Detach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-resource-id>
ACR 및 AKS 사용
ACR로 이미지 가져오기
az acr import
명령을 사용하여 Docker Hub에서 ACR로 이미지를 가져옵니다.az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
ACR에서 AKS로 샘플 이미지 배포
az aks get-credentials
명령을 사용하여 적절한 AKS 자격 증명을 보유해야 합니다.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
다음 샘플 YAML을 사용하여 acr-nginx.yaml이라는 파일을 만들고 acr-name을 ACR 이름으로 바꿉니다.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx0-deployment labels: app: nginx0-deployment spec: replicas: 2 selector: matchLabels: app: nginx0 template: metadata: labels: app: nginx0 spec: containers: - name: nginx image: <acr-name>.azurecr.io/nginx:v1 ports: - containerPort: 80
kubectl apply
명령을 사용하여 AKS 클러스터에서 배포를 실행합니다.kubectl apply -f acr-nginx.yaml
kubectl get pods
명령을 사용하여 배포를 모니터링합니다.kubectl get pods
출력은 다음 예제 출력과 같이 두 개의 실행 중인 Pod를 표시해야 합니다.
NAME READY STATUS RESTARTS AGE nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
문제 해결
az aks check-acr
명령을 사용하여 AKS 클러스터에서 레지스트리에 액세스할 수 있는지 확인합니다.- ACR 모니터링에 대해 자세히 알아봅니다.
- ACR 상태에 대해 자세히 알아봅니다.
Azure Kubernetes Service