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

Azure AKS无法从ACR拉取镜像故障求助:环境未手动变更,节点DNS配置自动还原

解决AKS节点无法拉取ACR镜像的DNS配置问题

我碰到过好几次类似的AKS节点DNS解析故障,你的情况很典型——手动修改/etc/resolv.conf后配置被自动覆盖,这是因为AKS节点的DNS设置由集群层面的组件(比如kubelet、Azure节点配置代理)统一管理,手动修改的临时配置会被定期重置,这是正常的集群管理行为。下面给你几个靠谱的解决路径:

1. 检查并修正AKS集群级DNS配置

首先确认你的AKS集群是否配置了正确的DNS服务器:

  • 用Azure CLI查看当前集群的DNS配置:
    az aks show --resource-group <你的资源组名> --name <你的AKS集群名> --query dnsProfile
    
  • 如果没有指定自定义DNS,AKS默认会使用Azure公共DNS(通常是168.63.129.16)。如果你的环境需要特定DNS(比如企业内部DNS),可以更新集群的DNS配置:
    az aks update --resource-group <资源组名> --name <集群名> --dns-servers <DNS服务器IP1> <DNS服务器IP2>
    
    这个操作会滚动更新所有节点,让节点的/etc/resolv.conf自动应用正确的DNS条目,且配置会持久化,不会被覆盖。

2. 针对特定节点池配置自定义DNS

如果只有部分节点池出现异常,可以单独更新目标节点池的DNS设置:

az aks nodepool update --resource-group <资源组名> --cluster-name <集群名> --name <节点池名> --dns-servers <DNS服务器IP>

执行后,该节点池的所有节点会自动刷新DNS配置,快速解决解析问题。

3. 验证ACR的网络可达性

除了DNS问题,还要确保AKS节点能正常访问ACR:

  • 如果你的ACR配置了私有链接,要确认AKS集群已关联对应的私有DNS区域,或者节点能通过私有IP访问ACR。
  • 如果ACR设置了防火墙规则,要确保AKS节点的IP范围(或节点所在虚拟网络)已添加到ACR的允许列表中。

4. 临时应急方案(不推荐长期使用)

如果需要快速恢复节点的镜像拉取能力,可以临时修改kubelet配置,但这只是权宜之计,重启节点后会失效:

  1. 登录到异常节点(用az aks ssh或直接SSH)
  2. 编辑kubelet配置文件(通常在/var/lib/kubelet/config.yaml),添加或修改resolvConf字段,指定自定义的resolv.conf路径(比如你创建的/etc/resolv.custom.conf)
  3. 重启kubelet服务:
    sudo systemctl restart kubelet
    

总结

核心问题是AKS节点的DNS配置由集群组件统一管理,手动修改无法持久。通过Azure CLI更新集群或节点池的DNS设置,是最可靠的持久化解决方案。同时别忘了检查ACR的网络配置,确保节点和ACR之间的网络通路正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:19:11