Kubernetes集群内部Service IP无法访问关联Nginx Pod故障问询
Kubernetes Service ClusterIP无法转发流量故障根因排查
前置已验证项(均正常)
- Pod运行状态正常
- Service selector与Pod标签完全匹配
- Pod内业务端口监听正常,可通过Pod IP直接访问服务
- Service与Pod在同命名空间,DNS解析Service域名可正常得到ClusterIP
- Service Endpoint配置正确,可直接通过Endpoint IP访问服务
可能故障根因及排查方案
1. kube-proxy组件异常,未生成正确的转发规则
kube-proxy负责维护Service到后端Pod的转发规则,组件异常会直接导致ClusterIP无法访问
- 排查步骤:
- 执行
kubectl get pods -n kube-system | grep kube-proxy,确认所有节点上的kube-proxy Pod都处于Running状态 - 若集群使用iptables转发模式:执行
iptables-save | grep <替换为你的Service ClusterIP>,确认存在指向对应Endpoint IP的DNAT规则 - 若集群使用ipvs转发模式:执行
ipvsadm -Ln | grep <替换为你的Service ClusterIP>,确认存在指向对应Endpoint IP的虚拟服务规则
- 执行
- 修复方案:kube-proxy异常时可直接删除异常Pod,DaemonSet会自动重建,重建后规则会自动刷新
2. 节点内核参数或防火墙规则拦截流量
- 排查步骤:
- 执行
sysctl net.ipv4.ip_forward,确认输出值为1,若为0说明节点未开启IP转发,流量无法跨网络栈转发 - 执行
iptables -L FORWARD -n -v,确认没有REJECT/DROP规则匹配Service ClusterIP网段(默认通常为10.96.0.0/12)
- 执行
- 修复方案:
- 临时开启IP转发:
sysctl -w net.ipv4.ip_forward=1,永久生效需修改/etc/sysctl.conf中对应配置 - 删除拦截ClusterIP网段的防火墙规则
- 临时开启IP转发:
3. CNI网络插件故障
- 排查步骤:
- 执行
kubectl get pods -n kube-system | grep -E 'calico|flannel|cni',确认所有CNI相关Pod处于Running状态 - 若Pod与发起请求的Pod不在同一节点,直接跨节点ping Pod IP,验证跨节点Pod连通性,若不通则为CNI路由配置异常
- 执行
- 修复方案:重建异常CNI Pod,根据对应CNI官方文档修正路由配置
4. kube-proxy ipvs模式依赖内核模块缺失
- 排查步骤:若集群使用ipvs转发模式,执行
lsmod | grep -E 'ip_vs|ip_vs_rr|ip_vs_wrr|ip_vs_sh|nf_conntrack',确认所有ipvs依赖模块都已加载 - 修复方案:加载缺失的内核模块后重启kube-proxy Pod即可
内容的提问来源于stack exchange,提问作者jdfolino
相关产品推荐
相关产品推荐

