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

Kubernetes DNS异常:Pod无法与外部网络通信求助

排查Kubernetes集群中服务无法访问外部域名(bitbucket.org)的DNS问题

我来帮你一步步拆解这个外部DNS解析的问题。从你给出的Pod内resolv.conf配置来看,集群已经指向了Kubernetes默认的DNS服务地址10.96.0.10,搜索域和ndots:5的设置也符合标准规范,但还是无法访问外部域名,我们可以按以下步骤逐一排查:

  • 第一步:直接测试目标域名的解析情况
    先把你没完成的nslookup命令跑完,直接针对bitbucket.org做解析测试:

    kubectl exec -ti busybox -- nslookup bitbucket.org
    

    如果返回server can't find bitbucket.org: NXDOMAIN,说明集群DNS服务(CoreDNS/kube-dns)没有正确转发外部域名请求;如果出现超时,大概率是DNS服务本身故障,或者网络策略限制了出站DNS流量。

  • 第二步:检查CoreDNS Pod的运行状态
    先确认集群的DNS服务Pod是否正常运行:

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

    如果有Pod处于CrashLoopBackOff或者Pending状态,立刻查看日志定位问题:

    kubectl logs -n kube-system -l k8s-app=kube-dns
    

    常见问题包括CoreDNS配置错误(比如forward插件未指定正确的上游DNS)、集群网络无法访问上游DNS服务器等。

  • 第三步:验证CoreDNS的转发配置
    查看CoreDNS的ConfigMap配置:

    kubectl get configmap coredns -n kube-system -o yaml
    

    重点确认Corefile中的forward段是否配置正确,比如:

    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        forward . /etc/resolv.conf  # 或者手动指定上游DNS如8.8.8.8
        cache 30
        loop
        reload
        loadbalance
    }
    

    如果forward指向的是/etc/resolv.conf,可以进入CoreDNS Pod内部测试它的解析能力:

    kubectl exec -n kube-system <你的coredns-pod名称> -- cat /etc/resolv.conf
    kubectl exec -n kube-system <你的coredns-pod名称> -- nslookup bitbucket.org
    
  • 第四步:排查网络策略与防火墙限制
    确认是否有网络策略限制了Pod(包括你测试用的busybox和CoreDNS Pod)的出站53端口(UDP/TCP)流量。另外,也要检查集群节点本身的防火墙规则,确保节点能正常访问外部DNS服务器的53端口。

  • 第五步:验证集群节点的DNS能力
    直接在集群节点上测试bitbucket.org的解析:

    nslookup bitbucket.org
    

    如果节点能正常解析但Pod不行,问题大概率出在CoreDNS转发配置或Pod网络隔离上;如果节点也无法解析,那就是集群节点的网络出口或节点DNS配置有问题,需要针对性排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:46:10