分享方式:


將 Azure Container Registry 重新放置至另一個區域

本文將向您展示如何將 Azure Container Registry 資源重新放置至 Active Directory 租用戶的同一訂用帳戶中的另一個區域。

注意

如果您需要將相同的容器映像散佈到多個 Azure 區域,Azure Container Registry 也支援異地複寫。 藉由異地複寫登錄 (需要進階服務層級),您可以使用來自單一登錄的相同映像和標記名稱,為多個區域提供服務。

必要條件

服務端點的考量

Azure Container Registry 的虛擬網路服務端點限制對指定虛擬網路的存取。 端點也可以限制對 IPv4 (網際網路通訊協定第 4 版) 位址範圍的存取。 從那些來源外部連線至登錄的任何使用者都會遭到拒絕存取。 如果服務端點是在登錄資源的來源區域中設定,則必須在目標區域中完成相同的作業。 此案例的步驟如下:

  • 若要成功將登錄重新建立至目標區域,必須事先建立 VNet 和子網路。 如果這兩個資源的移動是使用 Azure Resource Mover 工具進行的,則服務端點將不會自動設定,因此您需要提供手動設定。

  • 其次,需要在 Azure Container Registry 的 IaC 中進行變更。 在 networkAcl 區段的 virtualNetworkRules 下,新增目標子網路的規則。 請確定 ignoreMissingVnetServiceEndpoint 旗標已設定為 False,因此當目標區域中未設定服務端點時,IaC 無法部署事件中樞。 這將確保滿足目標區域的先決條件

私人端點考量

Azure Private Link 提供從虛擬網路到 Azure 平台即服務 (PaaS)、客戶所擁有的服務,或是 Microsoft 合作夥伴服務的私人連線。 私人連結可簡化網路架構,並透過消除公用網際網路上的資料暴露風險來保護 Azure 中端點之間的連線。

若要在目標區域中成功重新建立您的資源,必須先建立 VNet 和子網路,才能實際進行重新建立。

Azure 私人端點 DNS 整合考量

請務必正確設定您的 DNS 設定,以將私人端點 IP 位址解析為連接字串的完整網域名稱 (FQDN)。

現有的 Microsoft Azure 服務可能已有公用端點的 DNS 設定。 必須覆寫此設定,才能使用您的私人端點連線。

與私人端點建立關聯的網路介面,包含設定 DNS 所需的資訊。 網路介面資訊包含私人連結資源的 FQDN 和私人 IP 位址。

您可以使用下列選項來設定私人端點的 DNS 設定:

  • 使用主機檔案 (僅建議用於測試)。 您可以使用虛擬機器上的主機檔案來覆寫 DNS。
  • 使用私人 DNS 區域。 您可以使用私人 DNS 區域來覆寫私人端點的 DNS 解析。 私人 DNS 區域可以連結至您的虛擬網路,以解析特定網域。
  • 使用您的 DNS 轉寄站 (選用)。 您可以使用 DNS 轉寄站來覆寫私人連結資源的 DNS 解析。 建立 DNS 轉寄規則,以在虛擬網路中託管的 DNS 伺服器上使用私人 DNS 區域。
  • 必須在具有進階層的目標區域中設定 Azure Container Registry。

  • 停用對登錄的公用網路存取時,某些受信任的服務 (包括 Azure 資訊安全中心) 存取登錄需要啟用網路設定以略過網路規則。

  • 如果登錄具有已核准的私人端點,且公用網路存取已停用,則無法使用 Azure 入口網站、Azure CLI 或其他工具來將存放庫和標籤列在虛擬網路外部。

  • 如果是新複本,則必須為目標區域中的資料端點手動新增新的 DNS 記錄。

停機

若要瞭解可能的停機情況,請參閱適用於 Azure 的雲端採用架構:選取重新配置方法

準備

注意

如果您只想重新放置不包含任何特定於用戶端的資料並且單獨移動的 Container Registry,您可以簡單地使用 BicepJSON 重新部署登錄。

若要檢視其他可用性設定範本,請移至使用 Bicep、ARM 範本和 Terraform AzAPI 提供者定義資源

若要準備透過資料移轉進行重新放置:

  1. 使用登錄所使用的所有 Azure 服務建立相依性對應。 針對位於重新放置範圍內的服務,您必須選擇適當的重新放置策略。

  2. 識別 Azure Container Registry (ACR) 的來源網路配置,如防火牆和網路隔離。

  3. 從來源登錄擷取任何所需的映像,以便匯入目標登錄。 若要擷取映像,請執行以下命令:

    
    Get-AzContainerRegistryRepository -RegistryName registry
    
    
  4. 使用 ACR 工作擷取來源登錄的自動化設定,以便匯入目標登錄。

匯出範本

若要開始,請匯出 Resource Manager 範本。 此範本包含描述 Container Registry 的設定。 如需如何使用匯出的範本的詳細資訊,請參閱從 Azure 入口網站使用匯出的範本範本參考 (部分機器翻譯)。

  1. Azure 入口網站中前往至來源登錄。

  2. 在功能表中的 [自動化] 下方,選取 [匯出範本] 及 [下載]。>

    容器登錄匯出範本的螢幕擷取畫面。

  3. 找出您從入口網站下載的 .zip 檔案,並將該檔案解壓縮至您選擇的資料夾。

    此 zip 檔案包含 .json 檔案,內含範本和用來部署範本的指令碼。

修改範本

檢查您下載的 JSON 檔案範本中的登錄屬性,視需要進行變更。 最低需求:

  • 將登錄名稱的 defaultValue 變更為目標登錄想使用的名稱
  • location 更新為目標登錄所需的 Azure 區域
{
    "$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",
        ...
        }
    ]
}
  • 驗證下載範本中的所有相關資源詳細資料,如登錄範圍對應、複寫設定、記錄分析等診斷設定。

  • 如果來源登錄已加密,則使用客戶自控金鑰加密目標登錄,並使用所需受控識別、金鑰保存庫和金鑰的設定更新範本。 您只能在部署登錄時啟用客戶自控金鑰。

建立資源群組

使用 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. 透過執行以下命令,設定 Azure Container Registry 與已設定或尚未設定的兩種類型的 AKS 叢集的整合:


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

  1. 對 Kubernetes 資訊清單檔進行必要變更,以將其與重新放置的 Azure Container Registry (ACR) 整合。

  2. 更新開發和部署系統,以便從來源登錄改為使用目標登錄。

  3. 更新所有用戶端防火牆規則,允許存取目標登錄。

Verify

在目標登錄中確認下列資訊:

  • 登錄名稱、服務層級、公用存取、複寫等登錄設定
  • 欲保留內容的存放庫和標籤

刪除原始登錄

成功部署目標登錄,移轉內容並驗證登錄設定後,便可以刪除來源登錄。