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

EKS集群Pod无法解析DNS但可ping通IP问题求助

排查EKS集群Pod DNS解析失败的步骤

首先,既然你的节点能正常解析DNS但Pod不行,说明VPC层面的DNS服务是正常的,问题大概率出在Kubernetes集群内部的DNS组件(CoreDNS)或者Pod到CoreDNS的网络通路里。结合你已经检查过SG和NACL的情况,给你一步步梳理排查方向:

1. 检查CoreDNS Pod的状态与日志

CoreDNS是Kubernetes集群DNS的核心,先确认它有没有正常运行:

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

如果Pod状态是CrashLoopBackOff、Error或者Pending,直接看日志找问题:

kubectl logs <coredns-pod-name> -n kube-system

重点关注这类错误:

  • no nameservers found:说明CoreDNS无法连接上游DNS(即VPC的DNS服务器)
  • timeout:网络连通性问题,比如CoreDNS Pod无法访问VPC DNS
  • permission denied:可能是SELinux或其他权限限制导致

2. 验证CoreDNS的配置与Service

对比Dev集群的CoreDNS ConfigMap,检查UAT的是否有配置错误:

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

重点看forward插件的配置,是否指向了正确的上游DNS(一般是VPC的DNS地址,即VPC CIDR段+2)。另外检查CoreDNS的Service是否正常:

kubectl get service kube-dns -n kube-system

确认ClusterIP(通常是10.xx.0.10)状态正常,再检查Endpoints是否关联到CoreDNS Pod:

kubectl get endpoints kube-dns -n kube-system

如果Endpoints为空或没有对应CoreDNS Pod的IP,说明Service和Pod的关联存在问题。

3. 检查问题Pod的DNS配置

进入有问题的Pod,查看它的DNS配置文件:

kubectl exec <problem-pod-name> -- cat /etc/resolv.conf

正常情况下,nameserver应该指向CoreDNS的ClusterIP(比如10.xx.0.10),且search包含集群的域名后缀(比如default.svc.cluster.local)。如果这里显示的是节点的DNS地址,说明Pod的dnsPolicy配置异常,检查Pod的dnsPolicy是否为默认的ClusterFirst。

4. 排查Kubernetes网络策略限制

虽然你检查了SG和NACL,但Kubernetes的NetworkPolicy可能会阻止Pod访问kube-dns服务:

kubectl get networkpolicies --all-namespaces

查看有没有针对kube-system命名空间或Pod所在命名空间的NetworkPolicy,是否限制了TCP/UDP 53端口的访问。如果有,需要调整策略允许DNS流量。

5. 检查VPC的DNS相关配置

即使节点能解析,也要确认UAT集群所在VPC的以下配置是否开启:

  • enableDnsHostnames:必须设为true,否则节点无法获取DNS主机名
  • enableDnsSupport:必须设为true,VPC才能提供DNS服务
    可以通过AWS控制台或AWS CLI查看VPC属性,对比Dev集群的VPC配置。

6. 验证kube-proxy的状态

CoreDNS的Service是通过kube-proxy实现转发的,如果kube-proxy异常,Pod无法访问Service IP:

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

查看kube-proxy Pod的状态,再看日志有没有异常:

kubectl logs <kube-proxy-pod-name> -n kube-system

另外可以在工作节点上检查iptables规则,确认有没有kube-dns的转发规则:

iptables-save | grep kube-dns

7. 核对Terraform部署配置

既然是用Terraform部署的,仔细对比Dev和UAT的Terraform代码,看有没有遗漏:

  • 子网的路由表是否允许访问VPC DNS服务器(VPC CIDR+2)的流量
  • 集群的cluster_endpoint_public_access/cluster_endpoint_private_access配置是否和Dev一致
  • 有没有在UAT集群中额外配置了影响DNS的组件(比如自定义DNS服务)

额外提示:针对Kubernetes 1.14的特殊注意点

你的集群版本是1.14,属于较老版本,对应的CoreDNS版本可能存在一些已知问题。比如早期CoreDNS在处理某些DNS请求时会有bug,或者kube-proxy的iptables模式配置有误。可以对比Dev集群的CoreDNS版本,看UAT是否使用了相同的镜像版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:03:14