다음을 통해 공유


Azure Container Registry를 다른 지역으로 재배치

이 문서에서는 Active Directory 테넌트 구독의 다른 지역으로 Azure Container Registry 리소스를 재배치하는 방법을 보여 줍니다.

참고 항목

여러 Azure 지역에 동일한 컨테이너 이미지를 분산해야 하는 경우 Azure Container Registry에서 지역 복제도 지원합니다. 레지스트리를 지역 복제하면(프리미엄 서비스 계층 필요), 단일 레지스트리의 동일한 이미지와 태그 이름으로 여러 지역에 서비스를 제공할 수 있습니다.

필수 조건

  • 동일한 Active Directory 테넌트 내에서만 레지스트리를 재배치할 수 있습니다. 이 제한은 고객 관리형 키로 암호화되고 암호화되지 않은 레지스트리에 적용됩니다.

  • 원본 레지스트리에 가용성 영역이 사용하도록 설정된 경우 대상 지역도 가용성 영역을 지원해야 합니다. Azure Container Registry에 대한 가용성 영역 지원에 대한 자세한 내용은 Azure Container Registry에서 영역 중복 사용 설정을 참조하세요.

서비스 엔드포인트에 대한 고려 사항

Azure Container Registry의 가상 네트워크 서비스 엔드포인트는 지정된 가상 네트워크에 대한 액세스를 제한합니다. 엔드포인트는 IPv4(인터넷 프로토콜 버전 4) 주소 범위 목록에 대한 액세스를 제한할 수도 있습니다. 해당 원본 외부에서 레지스트리에 연결하는 모든 사용자는 액세스가 거부됩니다. 레지스트리 리소스의 원본 지역에서 서비스 엔드포인트가 구성된 경우 대상에서 동일한 작업을 수행해야 합니다. 이 시나리오의 단계는 다음과 같습니다.

  • 레지스트리를 대상 지역으로 올바르게 다시 만들려면 VNet 및 서브넷을 미리 만들어야 합니다. 이러한 두 리소스의 이동이 Azure Resource Mover 도구를 사용하여 수행되는 경우 서비스 엔드포인트가 자동으로 구성되지 않으므로 수동 구성을 제공해야 합니다.

  • 둘째, Azure Container Registry의 IaC에서 변경해야 합니다. networkAcl 섹션의 virtualNetworkRules에서 대상 서브넷에 대한 규칙을 추가합니다. 서비스 엔드포인트가 대상 지역에 구성되지 않은 경우 IaC가 Azure Container Registry를 배포하지 못하도록 ignoreMissingVnetServiceEndpoint 플래그가 False로 설정되어 있는지 확인합니다. 이렇게 하면 대상 지역의 필수 구성 요소가 충족됩니다.

프라이빗 엔드포인트에 대한 고려 사항

Azure Private Link는 가상 네트워크에서 Azure PaaS(Platform as a Service), 고객 소유 또는 Microsoft 파트너 서비스에 대한 프라이빗 연결을 제공합니다. Private Link는 네트워크 구조를 간소화하고 공용 인터넷에 대한 데이터 노출을 방지하여 Azure에서 엔드포인트 간의 연결을 보호할 수 있습니다.

대상 지역에서 리소스를 올바르게 다시 만들려면 실제로 다시 만들기 전에 VNet 및 서브넷을 만들어야 합니다.

Azure 프라이빗 엔드포인트 DNS 통합에 대한 고려 사항

프라이빗 엔드포인트 IP 주소가 연결 문자열의 FQDN(정규화된 도메인 이름)으로 확인되도록 DNS 설정을 올바르게 구성하는 것이 중요합니다.

기존 Microsoft Azure 서비스에는 공용 엔드포인트에 대한 DNS 구성이 이미 있을 수 있습니다. 이 구성은 프라이빗 엔드포인트를 사용하여 연결하도록 재정의해야 합니다.

프라이빗 엔드포인트와 연결된 네트워크 인터페이스에는 DNS를 구성하는 데 필요한 정보가 포함되어 있습니다. 네트워크 인터페이스 정보에는 프라이빗 링크 리소스에 대한 FQDN 및 개인 IP 주소가 포함됩니다.

다음 옵션을 사용하여 프라이빗 엔드포인트에 대한 DNS 설정을 구성할 수 있습니다.

  • 호스트 파일을 사용합니다(테스트에만 권장) . 가상 머신의 호스트 파일을 사용하여 DNS를 재정의할 수 있습니다.
  • 프라이빗 DNS 영역을 사용합니다. 프라이빗 DNS 영역을 사용하여 프라이빗 엔드포인트에 대한 DNS 확인을 재정의할 수 있습니다. 프라이빗 DNS 영역을 가상 네트워크에 연결하여 특정 도메인을 확인할 수 있습니다.
  • DNS 전달자를 사용합니다(선택 사항) . DNS 전달자를 사용하여 지정된 프라이빗 링크 리소스에 대한 DNS 확인을 재정의할 수 있습니다. 가상 네트워크에서 호스트되는 DNS 서버에서 프라이빗 DNS 영역을 사용하는 DNS 전달 규칙을 만듭니다.
  • 프리미엄 계층을 사용하여 대상 지역에서 Azure Container Registry를 구성해야 합니다.

  • 레지스트리에 대한 퍼블릭 네트워크 액세스를 사용하지 않도록 설정한 경우 Azure Security Center를 포함하는 신뢰할 수 있는 특정 서비스의 레지스트리 액세스 권한에 따라 네트워크 규칙을 무시하도록 네트워크 설정을 지정해야 합니다.

  • 레지스트리에 승인된 프라이빗 엔드포인트가 있고 퍼블릭 네트워크 액세스를 사용하지 않도록 설정한 경우 Azure Portal, Azure CLI 또는 기타 도구를 사용하여 가상 네트워크 외부의 리포지토리 및 태그를 나열할 수 없습니다.

  • 새 복제본의 경우 대상 지역의 데이터 엔드포인트에 대한 새 DNS 레코드를 수동으로 추가해야 합니다.

가동 중지 시간

발생할 수 있는 가동 중지 시간을 이해하려면 Azure용 클라우드 채택 프레임워크: 재배치 방법 선택을 참조하세요.

준비

참고 항목

클라이언트 특정 데이터를 보유하지 않고 단독으로 이동하려는 Container Registry만 재배치하려는 경우 Bicep 또는 JSON을 사용하여 레지스트리를 재배포하기만 하면 됩니다.

다른 가용성 구성 템플릿을 보려면 Bicep, ARM 템플릿 및 Terraform AzAPI 공급자를 사용하여 리소스 정의로 이동합니다.

데이터 마이그레이션을 사용하여 재배치를 준비하려면:

  1. 레지스트리에서 사용하는 모든 Azure 서비스를 사용하여 종속성 맵을 만듭니다. 재배치 범위에 있는 서비스의 경우 적절한 재배치 전략을 선택해야 합니다.

  2. 방화벽 및 네트워크 격리와 같은 ACR(Azure Container Registry)의 원본 네트워킹 레이아웃을 식별합니다.

  3. 대상 레지스트리로 가져오기 위해 원본 레지스트리에서 필요한 이미지를 검색합니다. 이미지를 검색하려면 다음 명령을 실행합니다.

    
    Get-AzContainerRegistryRepository -RegistryName registry
    
    
  4. ACR 작업을 사용하여 대상 레지스트리로 가져오기 위해 원본 레지스트리의 자동화 구성을 검색합니다.

템플릿 내보내기

시작하려면 Resource Manager 템플릿을 내보냅니다. 이 템플릿에는 Container Registry를 설명하는 설정이 포함되어 있습니다. 내보낸 템플릿을 사용하는 방법에 대한 자세한 내용은 Azure Portal에서 내보낸 템플릿 사용템플릿 참조를 참고하세요.

  1. Azure Portal에서 원본 레지스트리로 이동합니다.

  2. 메뉴의 자동화에서 템플릿 내보내기>다운로드를 선택합니다.

    컨테이너 레지스트리에 대한 내보내기 템플릿의 스크린샷

  3. 포털에서 다운로드한 .zip 파일을 찾은 다음, 선택한 폴더에 파일 압축을 풉니다.

    zip 파일에는 템플릿과 템플릿 배포 스크립트를 포함하는 .json 파일이 들어 있습니다.

템플릿 수정

다운로드한 템플릿 JSON 파일에서 레지스트리 속성을 검사하고 필요에 따라 변경합니다. 최소:

  • 레지스트리 이름의 defaultValue을 대상 레지스트리의 원하는 이름으로 변경합니다.
  • 대상 레지스트리에 대해 원하는 Azure 지역으로 location 업데이트
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "registries_myregistry_name": {
            "defaultValue": "myregistry",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.ContainerRegistry/registries",
            "apiVersion": "2020-11-01-preview",
            "name": "[parameters('myregistry_name')]",
            "location": "centralus",
        ...
        }
    ]
}
  • 레지스트리 scopeMaps, 복제 구성, 로그 분석과 같은 진단 설정과 같이 다운로드한 템플릿에서 연결된 모든 리소스 세부 정보 유효성을 검사합니다.

  • 원본 레지스트리가 암호화된 경우 고객 관리형 키를 사용하여 대상 레지스트리를 암호화하고 필요한 관리 ID, 키 자격 증명 모음 및 키에 대한 설정으로 템플릿을 업데이트합니다. 레지스트리를 배포할 때만 고객 관리형 키를 사용하도록 설정할 수 있습니다.

리소스 그룹 만들기

az group create를 사용하여 대상 레지스트리에 대한 리소스 그룹을 만듭니다. 다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

az group create --name myResourceGroup --location eastus

재배포

az deployment group create 명령을 사용하여 템플릿을 사용하여 대상 레지스트리를 배포합니다.

az deployment group create --resource-group myResourceGroup \
   --template-file template.json --name mydeployment

참고 항목

배포 중에 오류가 표시되면 템플릿 파일의 특정 구성을 업데이트하고 명령을 다시 시도해야 할 수 있습니다.

대상 레지스트리에서 레지스트리 콘텐츠 가져오기

대상 지역에서 레지스트리를 만든 후:

  1. az acr import 명령 또는 이에 상응하는 PowerShell 명령 Import-AzContainerImage를 사용하여 원본 레지스트리에서 대상 레지스트리로 보존하려는 이미지 및 기타 아티팩트를 가져옵니다. 명령 예는 컨테이너 레지스트리로 컨테이너 이미지 가져오기를 참조하세요.

  2. Azure CLI 명령 az acr repository listaz acr repository show-tags 또는 이에 상응하는 Azure PowerShell을 사용하여 원본 레지스트리의 콘텐츠를 열거할 수 있습니다.

  3. 개별 아티팩트에 대해 가져오기 명령을 실행하거나 아티팩트 목록에 대해 실행하도록 스크립트를 작성합니다.

다음 샘플 Azure CLI 스크립트는 원본 리포지토리 및 태그를 열거한 다음 동일한 Azure 구독의 대상 레지스트리로 아티팩트를 가져옵니다. 특정 리포지토리 또는 태그를 가져오려면 필요에 따라 수정합니다. 다른 구독 또는 테넌트에서 레지스트리에서 가져오려면 컨테이너 이미지를 컨테이너 레지스트리로 가져오기의 예제를 참조하세요.

#!/bin/bash
# Modify registry names for your environment
SOURCE_REG=myregistry
TARGET_REG=targetregistry

# Get list of source repositories
REPO_LIST=$(az acr repository list \
    --name $SOURCE_REG --output tsv)

# Enumerate tags and import to target registry
for repo in $REPO_LIST; do
    TAGS_LIST=$(az acr repository show-tags --name $SOURCE_REG --repository $repo --output tsv);
    for tag in $TAGS_LIST; do
        echo "Importing $repo:$tag";
        az acr import --name $TARGET_REG --source $SOURCE_REG.azurecr.io/$repo":"$tag;
    done
done
  1. 진단 설정의 로그 분석 작업 영역과 같은 종속 리소스를 대상 Azure Container Registry에 연결합니다.

  2. 다음 명령을 실행하여 프로비전되거나 아직 프로비전되지 않은 두 유형의 AKS 클러스터와 Azure Container Registry 통합을 구성합니다.


Set-AzAksCluster -Name myAKSCluster -ResourceGroupName myResourceGroup -AcrNameToAttach <acr-name>

  1. Kubernetes 매니페스트 파일을 변경하여 재배치된 ACR(Azure Container Registry)과 동일하게 통합합니다.

  2. 원본 레지스트리 대신 대상 레지스트리를 사용하도록 개발 및 배포 시스템을 업데이트합니다.

  3. 대상 레지스트리에 대한 액세스를 허용하도록 클라이언트 방화벽 규칙을 업데이트합니다.

확인

대상 레지스트리에서 다음 정보를 확인합니다.

  • 레지스트리 이름, 서비스 계층, 공용 액세스 및 복제와 같은 레지스트리 설정
  • 보존하려는 콘텐츠의 리포지토리 및 태그.

원본 레지스트리 삭제

대상 레지스트리를 성공적으로 배포하고, 콘텐츠를 마이그레이션하고, 레지스트리 설정을 확인한 후 원본 레지스트리를 삭제할 수 있습니다.