다음을 통해 공유


AKS 클러스터를 배포할 때 OrasPullUnauthorizedVMExtensionError 오류 코드(212)

이 문서에서는 AKS(Microsoft Azure Kubernetes Service) 클러스터를 만들고 배포하려고 할 때 발생하는 오류(오류 코드 212)를 식별하고 해결하는 OrasPullUnauthorizedVMExtensionError 방법을 설명합니다.

증상

아웃바운드 형식 none 또는 block으로 AKS 클러스터를 만들려고 할 때, 다음과 같은 오류 메시지가 표시됩니다.

VMExtensionProvisioningError: 확장 'vmssCSE'를 처리할 때 VM에서 오류를 보고했습니다.

오류 메시지: "사용 실패: 명령을 실행하지 못했습니다. 종료 상태=212로 종료된 명령

부트스트랩 Container Registry 권한 부여에 실패했습니다. kubelet ID에 레지스트리에 대한 끌어오기 액세스 권한이 있는지 확인하세요.

원인

네트워크 격리 클러스터의 경우 송신 트래픽이 제한됩니다. 이 기능은 AKS 부트스트랩용 MAR(Microsoft Artifact Registry)에서 필요한 이진 또는 이미지를 다운로드하는 프록시 역할을 하는 프라이빗 ACR(Azure Container Registry) 캐시를 도입했습니다. ACR에 대한 익명 액세스를 사용하지 않도록 설정하는 것이 좋습니다. AKS 노드는 kubelet ID를 사용하여 ACR에 액세스합니다. acrpull 사용 권한이 올바르게 설정되지 않았거나 kubelet ID가 VM 인스턴스에 바인딩되지 않은 경우 무단 오류가 발생합니다.

해결 방법

이 이슈를 해결하려면 다음 단계를 따릅니다.

  1. SSH(Secure Shell)를 사용하여 VM 인스턴스에 액세스하여 로그 파일을/var/log/azure/cluster-provision.log 가져옵니다. 로그를 검토하여 문제가 401 오류, IMDS(Azure Instance Metadata Service) 연결 제한 시간 또는 HTTP 코드 400에서 찾을 수 없는 ID와 관련이 있는지 확인합니다.

  2. 다음 명령을 실행하여 AKS에서 부트스트랩 ACR로 사용하는 ACR 리소스 ID를 검색합니다.

    export REGISTRY_ID=$(az aks show -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME} --query 'bootstrapProfile.containerRegistryId' -o tsv)
    
  3. 문제가 401 권한 없는 오류와 관련된 경우 AKS ID에 레지스트리에 권한을 부여하는 데 필요한 ACR 역할이 있는지 확인해야 합니다. 이렇게 하려면 ACR 레지스트리의 역할 할당을 확인하여 AKS ID에 대한 기존 역할 할당이 있는지 확인할 수 있습니다.

    AKS ID에 ACR 레지스트리에 대한 권한이 있는지 확인하려면 먼저 다음 명령을 실행하여 AKS ID의 보안 주체 ID를 가져옵니다.

    export KUBELET_IDENTITY_PRINCIPAL_ID=$(az aks show -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME} --query 'identityProfile.kubeletidentity.clientId' -o tsv)
    

    그런 다음 AKS ID에 올바른 ACR 역할을 할당합니다. 레지스트리의 역할 할당 권한 모드가 "ABAC 사용"이고 "RBAC 레지스트리 + ABAC 리포지토리 권한"으로 구성된 경우 역할을 할당 Container Registry Repository Reader 해야 합니다. 그렇지 않은 경우 레지스트리의 역할 할당 권한 모드가 ABAC 사용이 아니고 "RBAC 레지스트리 권한"으로만 구성된 경우, AcrPull 역할을 할당해야 합니다. ABAC 사용 ACR 레지스트리 및 필요한 다양한 역할에 대한 자세한 내용은 참조 https://aka.ms/acr/auth/abac 하세요.

    ABAC 사용 레지스트리의 경우 다음 명령을 실행합니다. ABAC가 아닌 레지스트리의 경우, 다음 명령의 Container Registry Repository Reader을(를) AcrPull으로 대신 사용하십시오.

    az role assignment create --role "Container Registry Repository Reader" --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal
    
  4. 로그 오류가 ID를 찾을 수 없음을 나타내는 경우 빠른 수정을 위해 kubelet ID를 VMSS(Virtual Machine Scale Set)에 수동으로 바인딩합니다.

  5. 문제가 IMDS 연결 제한 시간과 관련된 경우 지원 티켓을 제출합니다.

  6. 이전 작업이 완료되면 클러스터를 조정합니다.

참고문헌

도움을 요청하십시오.

질문이 있는 경우 Azure 커뮤니티 지원을 요청할 수 있습니다. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.