You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS安装nginx ingress controller拉取ACR镜像报401未授权如何解决

问题解决方法

核心原因

你遇到的是两个关联错误,属于AKS使用自定义ACR安装ingress-nginx的常见问题:
ingress-nginx的helm chart默认会给所有组件镜像强制配置sha256摘要校验,你在helm参数里仅给controller组件加了controller.image.digest=""清空了默认摘要,漏了给admission webhook的patch镜像也配置清空摘要,导致拉取kube-webhook-certgen镜像时会附带chart内置的默认sha256值。如果你的ACR中导入的v1.5.1标签镜像摘要和chart默认值不一致,就会触发镜像不存在报错;同时Azure ACR有安全策略,匿名拉取不存在的镜像时会返回401而非404,避免仓库内容被恶意枚举,因此才会同时出现NotFound和401 Unauthorized两个报错。

解决步骤

  • 第一步:先验证ACR中镜像的实际摘要
    执行以下命令查询你ACR里对应镜像的真实摘要,确认和报错中的sha256值是否匹配:
az acr repository show-manifests --name letsencryptdemoacr --repository jettech/kube-webhook-certgen --query "[?tags[0]=='v1.5.1'].digest" -o tsv

如果输出结果和报错里的sha256值不一致,即可确认是摘要不匹配导致的问题。

  • 第二步:调整helm安装参数,清空patch镜像的默认摘要
    在原有helm命令中新增controller.admissionWebhooks.patch.image.digest=""参数,调整后的完整命令如下:
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace ingress-basic \
--set controller.replicaCount=1 \
--set controller.nodeSelector."kubernetes\.io/os"=linux \
--set controller.image.registry=$ACR_URL \
--set controller.image.image=$CONTROLLER_IMAGE \
--set controller.image.tag=$CONTROLLER_TAG \
--set controller.image.digest="" \
--set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
--set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
--set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
--set controller.admissionWebhooks.patch.image.digest="" \
--set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
--set defaultBackend.image.registry=$ACR_URL \
--set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
--set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
--set controller.service.loadBalancerIP=$STATIC_IP \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"=$DNS_LABEL
  • 第三步:可选权限验证(调整参数后仍报错时执行)
    az aks check-acr仅验证AKS控制面的ACR访问权限,实际拉取镜像的是节点上的kubelet服务,你可以创建测试Pod手动验证拉取权限:
# 创建测试Pod
kubectl run test-acr-pull --image=letsencryptdemoacr.azurecr.io/jettech/kube-webhook-certgen:v1.5.1 --restart=Never
# 查看拉取结果
kubectl describe pod test-acr-pull

如果仍报401错误,重新执行ACR关联命令强制刷新权限即可:

az aks update -n myAKSCluster -g myResourceGroup --attach-acr letsencryptdemoacr

等待2分钟后重新执行helm安装命令即可完成部署。

内容的提问来源于stack exchange,提问作者Chris Halcrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:30:02