求助:EKS私有集群内Pod无法访问互联网问题解决
排查EKS私有集群Pod无法访问互联网的步骤
以下是针对你遇到的问题(节点能访问互联网但Pod不行,未使用第三方网络插件)的排查和解决步骤:
1. 确认私有子网路由表配置
- 登录AWS控制台,找到EKS集群对应的VPC,检查Pod所在私有子网的路由表:
- 必须存在
0.0.0.0/0指向NAT网关的路由条目。如果缺失,Pod的出站流量无法通过NAT网关访问互联网。 - 注意:节点能访问互联网不代表Pod所在子网的路由配置正确,需单独确认。
- 必须存在
2. 检查Amazon VPC CNI的SNAT配置
- 查看kube-system命名空间下的aws-node daemonset配置:
kubectl describe daemonset aws-node -n kube-system - 找到
AWS_VPC_K8S_CNI_EXTERNALSNAT环境变量:- 如果该值为
true,Pod会使用自身的弹性网卡IP而非节点IP做SNAT,此时需要确保Pod所在子网的路由表指向NAT网关,且NAT网关能处理Pod的IP段流量。 - 建议保持默认值
false,此时Pod会复用节点的SNAT规则,只要节点能上网,Pod就能通过节点访问互联网。
- 如果该值为
3. 验证安全组规则
- 节点安全组:确认出站规则允许
0.0.0.0/0(所有协议)的流量。因为默认情况下Pod会使用节点的安全组,节点安全组的出站限制会直接影响Pod。 - 如果启用了Security Groups for Pods功能,需额外检查Pod关联的安全组是否允许出站互联网访问。
4. 排查DNS解析问题
- 先测试Pod的DNS解析是否正常,运行临时Pod执行域名解析:
kubectl run -it --rm busybox --image=busybox:1.28 -- nslookup google.com - 如果解析失败:
- 检查CoreDNS Pod状态:
kubectl get pods -n kube-system -l k8s-app=kube-dns,确保所有CoreDNS Pod正常运行。 - 查看CoreDNS配置:
kubectl edit configmap coredns -n kube-system,确认forward . /etc/resolv.conf规则未被修改,确保CoreDNS能正常转发DNS请求。
- 检查CoreDNS Pod状态:
5. 检查Pod的路由配置
- 进入节点,找到目标Pod的PID:
kubectl get pod <pod-name> -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -d'/' -f3 - 使用
nsenter进入Pod的网络命名空间查看路由:nsenter -t <pod-pid> -n ip route - 确认存在默认路由(
default via <node-ip>),且该路由能指向NAT网关。
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

