레지스트리 관련 네트워크 문제 해결

이 문서는 가상 네트워크에서 또는 방화벽 또는 프록시 서버 뒤에 있는 Azure 컨테이너 레지스트리에 액세스할 때 발생할 수 있는 문제를 해결하는 데 도움이 됩니다.

증상

다음 중 하나 이상을 포함할 수 있습니다.

  • 이미지를 푸시하거나 끌어올 수 없으며 오류 dial tcp: lookup myregistry.azurecr.io가 표시됩니다.
  • 이미지를 푸시하거나 끌어올 수 없으며 오류 Client.Timeout exceeded while awaiting headers가 표시됩니다.
  • 이미지를 푸시하거나 끌어올 수 없으며 Azure CLI 오류 Could not connect to the registry login server가 표시됩니다.
  • 레지스트리에서 Azure Kubernetes Service 또는 다른 Azure 서비스로 이미지를 끌어올 수 없습니다.
  • HTTPS 프록시 뒤에 있는 레지스트리에 액세스할 수 없으며 오류 Error response from daemon: login attempt failed with status: 403 Forbidden 또는 Error response from daemon: Get <registry>: proxyconnect tcp: EOF Login failed가 표시됩니다.
  • 가상 네트워크 설정을 구성할 수 없으며 오류 Failed to save firewall and virtual network settings for container registry가 표시됩니다.
  • Azure Portal에서 레지스트리 설정에 액세스하거나 보거나 Azure CLI를 사용하여 레지스트리를 관리할 수 없습니다.
  • 가상 네트워크 설정 또는 공용 액세스 규칙을 추가하거나 수정할 수 없습니다.
  • ACR 작업에서 이미지를 푸시하거나 끌어올 수 없습니다.
  • 클라우드용 Microsoft Defender가 레지스트리의 이미지를 검사할 수 없거나 클라우드용 Microsoft Defender에 검사 결과가 표시되지 않음
  • 프라이빗 엔드포인트로 구성된 레지스트리에 액세스하려고 할 때 host is not reachable 오류를 수신합니다.

원인

  • 클라이언트 방화벽 또는 프록시에서 액세스 방지 - 솔루션
  • 레지스트리의 공용 네트워크 액세스 규칙에서 액세스 방지 - 솔루션
  • 가상 네트워크 또는 프라이빗 엔드포인트 구성에서 액세스 방지 - 솔루션
  • 클라우드용 Microsoft Defender 또는 기타 특정 Azure 서비스를 프라이빗 엔드포인트, 서비스 엔드포인트 또는 공용 IP 액세스 규칙이 있는 레지스트리와 통합하려고 시도하는 경우 - 솔루션

추가 진단

az acr check-health 명령을 실행하여 레지스트리 환경의 상태에 대한 자세한 정보를 얻고 선택적으로 대상 레지스트리에 액세스합니다. 예를 들어 특정 네트워크 연결 또는 구성 문제를 진단합니다.

명령 예제는 Azure 컨테이너 레지스트리의 상태 확인을 참조하세요. 오류가 보고되면 오류 참조 및 다음 섹션에서 권장 솔루션을 검토하세요.

통합된 레지스트리와 함께 Azure Kubernetes Service를 사용하는 데 문제가 있는 경우 az aks check-acr 명령을 실행하여 AKS 클러스터에서 레지스트리에 도달할 수 있는지 확인합니다.

참고 항목

일부 네트워크 연결 증상은 레지스트리 인증 또는 권한 부여에 문제가 있는 경우에도 발생할 수 있습니다. 레지스트리 로그인 문제 해결을 참조하세요.

잠재적 해결 방법

클라이언트 방화벽 액세스 구성

클라이언트 방화벽이나 프록시 서버 뒤에서 레지스트리에 액세스하려면 레지스트리의 공용 REST 및 데이터 엔드포인트에 액세스하는 방화벽 규칙을 구성합니다. 전용 데이터 엔드포인트를 사용하는 경우 다음에 액세스할 수 있는 규칙이 필요합니다.

  • REST 엔드포인트: <registryname>.azurecr.io
  • 데이터 엔드포인트: <registry-name>.<region>.data.azurecr.io

지리적으로 복제된 레지스트리의 경우 각 지역 복제본의 데이터 엔드포인트에 대한 액세스를 구성합니다.

HTTPS 프록시 뒤에서 Docker 클라이언트와 Docker 데몬이 모두 프록시 동작에 대해 구성되어 있는지 확인합니다. Docker 디먼의 프록시 설정을 변경하는 경우 디먼을 다시 시작해야 합니다.

ContainerRegistryLoginEvents 테이블의 레지스트리 리소스 로그는 차단된 연결 시도를 진단하는 데 도움이 될 수 있습니다.

관련 링크:

레지스트리에 대한 공용 액세스 구성

인터넷을 통해 레지스트리에 액세스하는 경우 레지스트리가 클라이언트에서 공용 네트워크 액세스를 허용하는지 확인합니다. 기본적으로 Azure 컨테이너 레지스트리는 모든 네트워크에서 공용 레지스트리 엔드포인트에 대한 액세스를 허용합니다. 레지스트리는 선택한 네트워크 또는 선택한 IP 주소에 대한 액세스를 제한할 수 있습니다.

레지스트리가 서비스 엔드포인트를 사용하여 가상 네트워크에 대해 구성된 경우 공용 네트워크 액세스를 사용하지 않도록 설정하면 서비스 엔드포인트에 대한 액세스도 비활성화됩니다. 레지스트리가 프라이빗 링크를 사용하여 가상 네트워크에 대해 구성된 경우 IP 네트워크 규칙은 레지스트리의 프라이빗 엔드포인트에 적용되지 않습니다.

관련 링크:

VNet 액세스 구성

가상 네트워크가 프라이빗 링크 또는 서비스 엔드포인트(미리 보기)에 대한 프라이빗 엔드포인트로 구성되어 있는지 확인합니다. 현재 Azure Bastion 엔드포인트는 지원되지 않습니다.

프라이빗 엔드포인트가 구성된 경우 DNS가 레지스트리의 개인 IP 주소에 대한 myregistry.azurecr.io와 같은 레지스트리의 공용 FQDN을 확인하는지 확인합니다.

  • --vnet 매개 변수와 함께 az acr check-health 명령을 실행하여 가상 네트워크의 프라이빗 엔드포인트에 라우팅되는 DNS를 확인합니다.
  • DNS 조회를 위해 dig 또는 nslookup과 같은 네트워크 유틸리티를 사용합니다.
  • 레지스트리 FQDN 및 각 데이터 엔드포인트 FQDN에 대해 DNS 레코드가 구성되었는지 확인합니다.

네트워크의 다른 리소스에서 레지스트리로의 트래픽을 제한하는 데 사용되는 NSG 규칙 및 서비스 태그를 검토합니다.

레지스트리에 대한 서비스 엔드포인트가 구성된 경우 해당 네트워크 서브넷의 액세스를 허용하는 네트워크 규칙이 레지스트리에 추가되어 있는지 확인합니다. 서비스 엔드포인트는 네트워크의 가상 머신 및 AKS 클러스터에서만 액세스할 수 있도록 지원합니다.

다른 Azure 구독에서 가상 네트워크를 사용하여 레지스트리 액세스를 제한하려면 해당 구독에서 Microsoft.ContainerRegistry 리소스 공급자를 등록해야 합니다. Azure Portal, Azure CLI 또는 다른 Azure 도구를 사용하여 Azure Container Registry에 대한 리소스 공급자를 등록합니다.

네트워크에서 Azure Firewall 또는 유사한 솔루션을 구성하는 경우 AKS 클러스터와 같은 다른 리소스의 송신 트래픽이 레지스트리 엔드포인트에 도달하도록 설정되었는지 확인합니다.

관련 링크:

서비스 액세스 구성

현재 여러 Azure 서비스에서 네트워크 제한이 있는 컨테이너 레지스트리에 대한 액세스를 허용하지 않습니다.

  • 클라우드용 Microsoft Defender는 프라이빗 엔드포인트, 선택한 서브넷 또는 IP 주소에 대한 액세스를 제한하는 레지스트리에서 이미지 취약성 검사을 수행할 수 없습니다.
  • 특정 Azure 서비스의 리소스는 Azure App Service 및 Azure Container Instances를 포함하여 네트워크 제한이 있는 컨테이너 레지스트리에 액세스할 수 없습니다.

이러한 Azure 서비스에 액세스하거나 컨테이너 레지스트리와 통합해야 하는 경우 네트워크 제한을 제거합니다. 예를 들어 레지스트리의 프라이빗 엔드포인트를 제거하거나 레지스트리의 공용 액세스 규칙을 제거하거나 수정합니다.

2021년 1월부터 신뢰할 수 있는 서비스 선택에 대한 액세스를 허용하도록 네트워크 제한 레지스트리를 구성할 수 있습니다.

관련 링크:

고급 문제 해결

레지스트리에서 리소스 로그 수집이 사용하도록 설정된 경우 ContainterRegistryLoginEvents 로그를 검토합니다. 이 로그는 들어오는 ID와 IP 주소를 포함하여 인증 이벤트와 상태를 저장합니다. 로그에서 레지스트리 인증 실패를 쿼리합니다.

관련 링크:

다음 단계

여기에서 문제를 해결하지 않으면 다음 옵션을 참조하세요.