EKS Fargate工作负载无法解析DNS名称问题求助
问题描述
运行在EKS Fargate上的工作负载无法解析任何DNS名称(包括集群内服务、私有托管区域名及公网域名),但同一工作负载部署在EC2节点时可正常解析。执行nslookup命令均返回超时:
/ $ nslookup my-api.my-namespace.svc.cluster.local ;; connection timed out; no servers could be reached / $ nslookup my-record.my-domain.com ;; connection timed out; no servers could be reached / $ nslookup www.google.co.uk ;; connection timed out; no servers could be reached / $
环境信息
- 集群为私有集群,EC2节点与Fargate配置在同一VPC子网
- 私有子网所在VPC与私有托管区共享
- VPC已开启DNS解析
- Fargate关联ENI绑定集群安全组,允许全端口0.0.0.0/0出站及自身全端口入站
已查阅《AWS Fargate注意事项》文档,未找到匹配问题点,求问故障原因?
示例Job清单
apiVersion: batch/v1 kind: Job metadata: name: test-fargate spec: backoffLimit: 0 ttlSecondsAfterFinished: 600 template: spec: restartPolicy: Never containers: - name: test-import-aixm image: my-container/image:latest command: [ "/bin/sh", "-c", "--" ] args: [ "while true; do sleep 30; done;" ]
故障原因分析
1. 子网DNS属性未正确配置
即使VPC全局开启了DNS解析,若Fargate使用的私有子网未开启Enable DNS hostnames和Enable DNS resolution,会导致Fargate Pod无法获取正确的DNS服务器地址。需检查子网的这两项属性是否启用。
2. 网络ACL(NACL)限制DNS流量
安全组允许全端口出站,但NACL是无状态规则,需确认是否同时允许入站和出站的UDP 53及TCP 53端口流量。DNS查询默认使用UDP,大尺寸查询会切换为TCP,任一方向的端口被拒绝都会导致解析超时。
3. Fargate Pod的DNS配置异常
进入Fargate Pod查看/etc/resolv.conf文件,确认nameserver是否为VPC的DNS服务器(通常是VPC网段的第二个IP,如10.0.0.2)。如果为空或配置了错误地址,说明Pod未正确继承VPC DNS设置。
4. CoreDNS服务访问限制
检查CoreDNS的Pod是否正常运行,且其服务的UDP/TCP 53端口是否允许Fargate安全组访问。可通过在Fargate Pod内执行telnet <coredns-cluster-ip> 53或nslookup kubernetes.default.svc.cluster.local <coredns-cluster-ip>测试连通性,若无法访问则需调整CoreDNS的网络策略或安全组规则。
5. Pod DNS策略配置错误
若Job清单中显式设置了dnsPolicy字段为Default,会导致Fargate Pod无法使用集群DNS服务。默认Kubernetes Pod的DNS策略为ClusterFirst,需确保未修改该配置,或根据场景设置为ClusterFirstWithHostNet(若启用hostNetwork)。
内容的提问来源于stack exchange,提问作者David Gard

