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

如何解决AKS部署中部分Pod拉取ACR镜像的DNS连接拒绝错误?

解决AKS部分Pod无法解析ACR域名导致镜像拉取失败的问题

问题根源

从错误日志看,核心问题是Pod无法解析ACR的域名:dial tcp: lookup prd255acr01.azurecr.io on [::1]:53: read udp [::1]:34880->[::1]:53: read: connection refused,说明Pod尝试用本地([::1]:53)的DNS服务器解析域名,但该DNS服务不可用,导致解析失败。

排查与解决步骤

  • 检查节点的DNS配置
    登录到故障Pod所在的AKS节点,查看/etc/resolv.conf文件,确认其中的DNS服务器地址是否有效(比如Azure默认DNS或自定义的可用DNS)。如果文件指向127.0.0.53或[::1]但节点本地DNS服务异常,Pod会继承这个错误配置。

  • 验证Pod的DNS策略
    查看Deployment/YAML文件中的spec.template.spec.dnsPolicy设置,确保值为ClusterFirst(AKS默认配置)。如果被改为Default,Pod会直接使用节点DNS配置,节点DNS故障时就会触发解析失败。
    修正后重新部署:

    spec:
      template:
        spec:
          dnsPolicy: ClusterFirst
    
  • 检查CoreDNS运行状态
    AKS默认用CoreDNS提供集群DNS服务,执行以下命令查看CoreDNS Pod状态:

    kubectl get pods -n kube-system -l k8s-app=kube-dns
    

    若有Pod处于CrashLoopBackOff或Error状态,重启CoreDNS部署:

    kubectl rollout restart deployment coredns -n kube-system
    
  • 测试Pod内的DNS解析能力
    进入正常运行的Pod执行解析测试:

    kubectl exec -it <正常Pod名称> -- nslookup prd255acr01.azurecr.io
    

    若正常Pod能解析但故障Pod不能,可创建临时测试Pod验证集群DNS:

    kubectl run -it --rm dns-test --image=busybox:1.28 -- nslookup prd255acr01.azurecr.io
    
  • 检查节点网络与防火墙规则
    在故障节点上测试DNS服务器连通性:

    nslookup prd255acr01.azurecr.io <集群DNS服务器地址>
    

    同时检查节点防火墙规则,确保未阻止UDP 53端口的出站流量(DNS查询依赖该端口)。

  • 重置异常节点
    若为个别节点DNS服务异常,可将节点从集群移除并重建:

    # 列出节点
    kubectl get nodes
    # 标记节点不可调度并驱逐Pod
    kubectl cordon <节点名称>
    kubectl drain <节点名称> --ignore-daemonsets
    # 删除节点(AKS会自动重建新节点)
    kubectl delete node <节点名称>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:42:28