从Azure容器注册表拉取镜像至Kubernetes集群仅特定节点拉取成功的问题咨询
问题根源与缺失配置说明
核心根源
同一Pod仅修改nodeName参数时拉取镜像结果不一致,说明Pod本身的部署配置没有问题,差异完全来自两个节点池的节点环境:要么是自定义aks-cpu1节点池的节点没有ACR拉取的认证权限,要么是节点到ACR的网络链路不通。
常见缺失配置场景
1. 拉取密钥配置未生效,自定义节点池无ACR访问权限
你已完成docker-registry类型拉取密钥的创建,但如果没有完成以下任意一步配置,这个密钥实际不会在镜像拉取流程中生效:
- 未在Pod的YAML中显式添加
imagePullSecrets字段关联你创建的密钥 - 未将密钥绑定到Pod所属命名空间的默认ServiceAccount(如果Pod未显式配置
imagePullSecrets,会自动使用ServiceAccount关联的拉取密钥)
这种情况下默认agentpool能拉取镜像,实际是依赖AKS默认节点池的托管身份被提前授予了ACR的AcrPull角色权限,而自定义aks-cpu1节点池的托管身份没有配置对应权限,因此拉取失败。
对应补全配置二选一即可:
- 在Pod YAML中补全
imagePullSecrets配置,直接关联你创建的拉取密钥,所有节点池都会共用这个SP认证拉取镜像:spec: imagePullSecrets: - name: <你创建的secret-name> containers: - ... - 给自定义
aks-cpu1节点池的Kubelet托管身份授予ACR的AcrPull角色权限。
2. 自定义节点池到ACR的网络链路不通
如果已经确认imagePullSecrets已经正确配置,问题大概率出在网络层:
- 你的ACR开启了防火墙或私有终结点白名单,仅放行了默认
agentpool所在子网、出站IP段的访问权限,aks-cpu1节点池的源IP/子网没有被加入白名单 - 如果ACR配置了私有DNS解析,
aks-cpu1节点池所在子网没有关联ACR对应的私有DNS区域,导致无法正确解析ACR的访问地址
对应补全配置:
- 将
aks-cpu1节点池的子网、出站IP段加入ACR的访问白名单 - 把ACR对应的私有DNS区域关联到
aks-cpu1节点池所在的VNet,保证节点能正确解析ACR域名
内容的提问来源于stack exchange,提问作者user1571823
相关产品推荐
相关产品推荐

