Compartilhar via

排查与注册表相关的网络问题

本文可帮助你解决在虚拟网络中或防火墙或代理服务器后面访问Azure容器注册表时可能会遇到的问题。

症状

可能包括以下一项或多项:

  • 无法推送或拉取映像,出现错误 dial tcp: lookup myregistry.azurecr.cn
  • 无法推送或拉取映像,出现错误 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 ForbiddenError response from daemon: Get <registry>: proxyconnect tcp: EOF Login failed
  • 无法配置虚拟网络设置,出现错误 Failed to save firewall and virtual network settings for container registry
  • 无法在Azure门户中访问或查看注册表设置,或使用Azure CLI管理注册表
  • 无法添加或修改虚拟网络设置或公共访问规则
  • ACR 任务无法推送或拉取映像
  • Microsoft Defender for Cloud无法扫描注册表中的映像,或者扫描结果不会显示在Microsoft Defender for Cloud
  • 在尝试访问使用专用终结点配置的注册表时,你收到错误 host is not reachable

原因

  • 客户端防火墙或代理阻止访问 - 解决方案
  • 注册表上的公用网络访问规则阻止访问 - 解决方案
  • 虚拟网络或专用终结点配置阻止访问 - 解决方案
  • 尝试将 Microsoft Defender for Cloud 或某些其他 Azure 服务集成到具有专用终结点、服务终结点或公共 IP 访问规则的注册表中 - 解决方案

进一步诊断

运行 az acr check-health 命令以获取有关注册表环境的运行状况的详细信息,并选择性地访问目标注册表。 例如,诊断某些网络连接或配置问题。

有关命令示例,请参阅 检查Azure容器注册表的运行状况。 如果报告了错误,请查看 错误参考 和以下部分以获取建议的解决方案。

如果在集成注册表中使用Azure Kubernetes Service时遇到问题,请运行 az aks check-acr 命令来验证 AKS 群集是否可以访问注册表。

注意

当注册表身份验证或授权存在问题时,也可能出现一些网络连接症状。 请参阅 注册表登录、身份验证和授权疑难解答

可能的解决方案

配置客户端防火墙访问权限

若要从客户端防火墙或代理服务器后面访问注册表,请将防火墙规则配置为可访问注册表的公共 REST 和数据终结点。 如果启用了专用数据终结点,则需要用于访问以下终结点的规则:

  • REST 终结点:<registryname>.azurecr.cn
  • 数据终结点:<registry-name>.<region>.data.azurecr.cn

对于异地复制的注册表,请为每个区域副本配置对数据终结点的访问权限。

在 HTTPS 代理后面,确保 Docker 客户端和 Docker 守护程序均已针对代理行为进行了配置。 如果更改了 Docker 守护程序的代理设置,必需重启该守护程序。

ContainerRegistryLoginEvents 表中的注册表资源日志可能有助于诊断尝试的连接被阻止的问题。

相关链接:

配置对注册表的公共访问权限

如果通过 Internet 访问注册表,请确认注册表允许从客户端通过公用网络进行的访问。 默认情况下,Azure容器注册表允许从所有网络访问公共注册表终结点。 注册表可以将访问限制为来自所选网络或所选 IP 地址。

如果为具有服务终结点的虚拟网络配置了注册表,禁用公用网络访问还会禁止通过服务终结点进行访问。 如果为具有Private Link的虚拟网络配置了注册表,则 IP 网络规则不适用于注册表的专用终结点。

相关链接:

配置 VNet 访问权限

确认虚拟网络已配置好专用终结点用于私有链接或服务终结点(预览版)。 目前不支持 Azure Bastion 终结点。

如果配置了专用终结点,请确认 DNS 能够将注册表的公共 FQDN(例如myregistry.azurecr.cn)解析为注册表的专用 IP 地址。

  • 使用 参数运行 --vnet 命令,以确认虚拟网络中到专用终结点的 DNS 路由。
  • 使用网络实用工具(如 dignslookup)进行 DNS 查找。
  • 确保为注册表 FQDN 和每个数据终结点 FQDN 配置 DNS 记录

查看用于限制从网络中的其他资源发往注册表的流量的 NSG 规则和服务标记。

如果配置了注册表的服务终结点,请确认用于允许从该网络子网进行访问的网络规则已添加到注册表。 服务终结点仅支持从网络中的虚拟机和 AKS 群集进行访问。

如果要在不同的Azure订阅中使用虚拟网络限制注册表访问,请确保在该订阅中注册 Microsoft.ContainerRegistry 资源提供程序。 为 Azure Container Registry 使用 Azure 门户、Azure CLI 或其他 Azure 工具注册资源提供程序

如果在网络中配置了Azure Firewall或类似的解决方案,请检查是否启用了来自其他资源(例如 AKS 群集)的出口流量以访问注册表终结点。

相关链接:

配置服务访问

目前,不允许从多个Azure服务访问具有网络限制的容器注册表:

  • Microsoft Defender for Cloud 无法在访问被限制至专用终结点、特定子网或 IP 地址的注册表中执行 镜像漏洞扫描
  • 某些Azure服务的资源无法访问具有网络限制的容器注册表,包括Azure App Service和Azure Container Instances。

如果需要访问或集成这些Azure服务与容器注册表,请删除网络限制。 例如,删除注册表的专用终结点,或者删除或修改注册表的公共访问规则。

可以配置受网络限制的注册表,以允许从选择的受信任服务 进行访问

相关链接:

高级故障排除

如果在注册表中启用了收集资源日志,请查看 ContainterRegistryLoginEvents 日志。 此日志存储身份验证事件和状态,包括传入标识和 IP 地址。 查询日志以查找 注册表身份验证失败

相关链接:

后续步骤

如果此处无法解决你的问题,请参阅以下选项。