在AKS部署容器化服务时遭遇镜像拉取失败问题求助
解决AKS拉取ACR镜像失败的方案
确认镜像存在且标签正确
登录Azure CLI,检查目标镜像是否存在于ACR中:az acr repository show --name debugdemoimage --repository new-service --tag latest若命令返回错误,说明镜像未推送至ACR或标签有误,重新推送正确镜像即可。
验证服务主体的ACR权限
检查用于拉取镜像的服务主体是否拥有AcrPull角色权限:az role assignment list --assignee <服务主体ID> --scope /subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.ContainerRegistry/registries/debugdemoimage若输出中无
AcrPull角色记录,执行以下命令添加权限:az role assignment create --assignee <服务主体ID> --scope /subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.ContainerRegistry/registries/debugdemoimage --role AcrPull配置Pod的镜像拉取密钥
你的Deployment YAML未指定镜像拉取密钥,需确认AKS集群是否已通过服务主体自动关联ACR,若未关联,手动创建并引用:- 创建存储ACR凭据的Kubernetes Secret:
kubectl create secret docker-registry acr-secret --docker-server=debugdemoimage.azurecr.io --docker-username=<服务主体应用ID> --docker-password=<服务主体密码> --docker-email=any@example.com - 修改Deployment YAML,在
spec.template.spec下添加密钥引用:spec: containers: - name: new-service image: debugdemoimage.azurecr.io/new-service:latest ports: - containerPort: 80 imagePullPolicy: Always imagePullSecrets: - name: acr-secret
- 创建存储ACR凭据的Kubernetes Secret:
检查AKS节点与ACR的网络连通性
若AKS与ACR不在同一VNet且未配置专用链接,确认节点能访问ACR公共端点:
先进入AKS节点(需通过SSH或kubectl exec到节点),执行:curl -v https://debugdemoimage.azurecr.io/v2/若连接失败,检查NSG规则、防火墙是否允许443端口访问ACR的IP范围。
查看Pod事件获取详细错误
执行命令查看Pod的事件日志,获取拉取失败的具体原因(如权限拒绝、镜像不存在、网络超时等):kubectl describe pod new-service-deployment-6cc77c6b5-4mdxw
内容的提问来源于stack exchange,提问作者Abaiz
相关产品推荐
相关产品推荐

