本地连接数据库正常,EKS服务器连接时出现DNS查询拒绝错误
问题现象
本地环境连接AWS RDS数据库(simple-bank.cejetrykwn68.ap-south-1.rds.amazonaws.com)一切正常,但部署在EKS上的服务器发起连接时出现DNS解析错误:
dial tcp: lookup simple-bank.cejetrykwn68.ap-south-1.rds.amazonaws.com on 10.100.0.10:53: read udp 172.31.13.150:39956->10.100.0.10:53: read: connection refused
排查与解决步骤
1. 检查CoreDNS组件状态
10.100.0.10是EKS集群默认的CoreDNS服务ClusterIP,先确认组件运行状态:
- 查看CoreDNS Pod状态:
kubectl get pods -n kube-system -l k8s-app=kube-dns - 检查CoreDNS服务状态:
kubectl get svc -n kube-system kube-dns
若Pod处于异常状态(如CrashLoopBackOff),重启CoreDNS部署:
kubectl rollout restart deployment coredns -n kube-system
2. 验证集群内DNS解析能力
在EKS集群内启动测试Pod,直接测试目标域名解析:
kubectl run -it --rm --image=busybox:1.28 dns-test -- nslookup simple-bank.cejetrykwn68.ap-south-1.rds.amazonaws.com
若解析失败,测试公共域名(如google.com)判断是特定域名问题还是全局DNS故障:
kubectl exec -it dns-test -- nslookup google.com
3. 检查网络连通性配置
- 确认EKS集群VPC与RDS实例VPC是否连通(同VPC、VPC对等连接或VPN打通)。
- 检查RDS安全组是否允许EKS集群节点/服务CIDR段的数据库端口(如3306)入站访问。
- 检查EKS节点安全组是否允许出站访问53端口(DNS)和数据库端口。
4. 核查CoreDNS配置
查看CoreDNS的ConfigMap,确认无异常拦截规则:
kubectl edit configmap coredns -n kube-system
默认配置需包含forward . /etc/resolv.conf,确保没有针对AWS RDS域名的特殊限制。
5. 临时替换DNS服务器测试
若CoreDNS故障无法快速修复,可临时修改Pod的DNS配置,使用AWS VPC内置DNS服务器(通常为VPC网段第2个IP,如VPC网段10.100.0.0/16对应DNS为10.100.0.2):
在Pod的Deployment YAML中添加:
spec: containers: - name: your-app-container ... dnsPolicy: "None" dnsConfig: nameservers: - 10.100.0.2 searches: - default.svc.cluster.local - svc.cluster.local - cluster.local options: - name: ndots value: "5"
6. 排查节点网络异常
若仅单个节点上的Pod出现问题,检查节点网络:
- 测试节点是否能ping通10.100.0.10(CoreDNS服务IP)
- 查看节点
/etc/resolv.conf配置是否正常 - 检查节点iptables规则是否拦截DNS请求
内容的提问来源于stack exchange,提问作者Avinash Kasukurthi

