你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Azure 容器注册表重新定位到另一个区域
本文介绍如何将 Azure 容器注册表资源重新定位到 Active Directory 租户的同一订阅中的另一个区域。
注意
如果需要在多个 Azure 区域中分布相同的容器映像,则 Azure 容器注册表还支持异地复制。 通过对注册表(需要高级服务层)进行异地复制,可以使用单个注册表的相同映像和标记名称为多个区域提供服务。
先决条件
只能在同一 Active Directory 租户中重新定位注册表。 此限制适用于使用客户管理的密钥加密和解密的注册表。
如果源注册表启用了可用性区域,则目标区域也必须支持可用性区域。 有关对 Azure 容器注册表的可用性区域支持的详细信息,请参阅在 Azure 容器注册表中启用区域冗余。
服务终结点注意事项
Azure 容器注册表的虚拟网络服务终结点将限制对指定虚拟网络的访问。 此外,还可通过这些终结点将访问限制为一系列 IPv4(Internet 协议版本 4)地址范围。 任何从外部连接到注册表的用户都无法访问这些资源。 如果在注册表资源的源区域中配置了服务终结点,则需要在目标区域中执行相同的操作。 下面介绍了此应用场景的步骤:
若要成功将注册表重新创建到目标区域,必须事先创建 VNet 和子网。 如果使用 Azure 资源转移器工具执行所有这些资源的移动,则不会自动配置服务终结点,并且你需要提供手动配置。
其次,需要在 Azure 容器注册表的 IaC 中进行更改。 在
networkAcl
部分中,在virtualNetworkRules
下,添加目标子网的规则。 确保将ignoreMissingVnetServiceEndpoint
标志设置为 False,从而实现以下效果:在目标区域中未配置服务终结点的情况下,IaC 无法部署 Azure 容器注册表。 这将确保满足目标区域中的先决条件
专用终结点注意事项
Azure 专用链接提供从虚拟网络到 Azure 平台即服务 (PaaS)、客户拥有的服务或 Microsoft 合作伙伴服务的专用连接。 专用链接简化了网络体系结构,并通过消除数据在公共 Internet 上的暴露来保护 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 容器注册表。
禁用对注册表的公共网络访问后,某些受信任服务(包括 Azure 安全中心)对注册表的访问需要启用一个可绕过网络规则的网络设置。
如果注册表具有已批准的专用终结点且禁用了公共网络访问,则无法使用 Azure 门户、Azure CLI 或其他工具在虚拟网络外部列出存储库和标记。
对于新副本,必须手动为目标区域中的数据终结点添加新的 DNS 记录。
停机时间
要了解可能涉及的故障时间,请参阅面向 Azure 的云采用框架:选择重定位方法。
准备
注意
如果你只想重新定位未保存任何客户端特定数据的容器注册表,并且单独移动,则只需使用 Bicep 或 JSON 重新部署注册表。
若要查看其他可用性配置模板,请转到使用 Bicep、ARM 模板和 Terraform AzAPI 提供程序定义资源
准备通过数据迁移进行重新定位:
通过注册表使用的所有 Azure 服务创建依赖项映射。 对于重定位范围内的服务,必须选择适当的重定位策略。
确定 Azure 容器注册表 (ACR) 的源网络布局,例如防火墙和网络隔离。
从源注册表检索任何必需的映像,以便导入到目标注册表中。 若要检索映像,请运行以下命令:
Get-AzContainerRegistryRepository -RegistryName registry
使用 ACR 任务检索源注册表的自动化配置,以便导入目标注册表。
导出模板
若要开始,请导出资源管理器模板。 此模板包含描述你的容器注册表的设置。 若要详细了解如何使用导出的模板,请参阅使用从 Azure 门户导出的模板和模板参考。
在 Azure 门户中,导航到你的源注册表。
在菜单中的“自动化”下,选择“导出模板”>“下载” 。
找到从门户下载的 .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",
...
}
]
}
在下载的模板中验证所有关联的资源详细信息,例如注册表 scopeMaps、复制配置、诊断设置(例如日志分析)。
如果源注册表已加密,则使用客户管理的密钥来加密目标注册表,并使用所需托管标识、密钥保管库和密钥的设置更新模板。 只能在部署注册表时启用客户管理的密钥。
创建资源组
使用 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
注意
如果在部署过程中看到错误,可能需要更新模板文件中的特定配置,然后重试该命令。
在目标注册表中导入注册表内容
在目标区域中创建注册表后:
使用 az acr import 命令或等效的 PowerShell 命令
Import-AzContainerImage
,将源注册表中的映像以及你要保留的其他项目导入到目标注册表。 有关命令示例,请参阅将容器映像导入到容器注册表。使用 Azure CLI 命令 az acr repository list 和 az acr repository show-tags 或等效的 Azure PowerShell 命令来帮助枚举源注册表的内容。
针对单个项目运行 import 命令,或编写脚本以针对一系列项目运行该命令。
以下示例 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
将依赖的资源关联到目标 Azure 容器注册表,例如诊断设置中的 Log Analytics 工作区。
通过运行以下命令,配置 Azure 容器注册表与这两种类型的 AKS 群集(预配的或尚未预配的)的集成:
Set-AzAksCluster -Name myAKSCluster -ResourceGroupName myResourceGroup -AcrNameToAttach <acr-name>
对 Kubernetes 清单文件进行必要的更改,以便与重新定位的 Azure 容器注册表 (ACR) 集成。
将开发和部署系统更新为使用目标注册表而不是源注册表。
更新任何客户端防火墙规则以允许访问目标注册表。
验证
确认目标注册表中包含以下信息:
- 注册表设置,例如注册表名称、服务层级、公共访问权限和复制内容
- 要保留的内容的存储库和标记。
删除原始注册表
成功部署了目标注册表、迁移了内容并验证了注册表设置后,可以删除源注册表。
相关内容
- 若要将注册表资源移动到同一订阅或[新订阅]中的一个新资源组,请参阅将 Azure 资源移动到新的资源组或订阅。
详细了解如何从公共注册表或其他专用注册表将容器映像导入到 Azure 容器注册表。
请参阅 Azure 容器注册表的资源管理器的模板参考。