You need to enable JavaScript to run this app. K8s Service配置externalIP后访问外部IP出现超时问题
优惠活动
大模型
产品
解决方案
定价
更多

K8s Service配置externalIP后访问外部IP出现超时问题

ExternalIP配置的Service访问超时排查

原始配置与问题现象

我配置了如下Kubernetes Service:

apiVersion: v1
kind: Service
metadata:
  name: hedgehog
  labels:
    run: hedgehog
spec:
  ports:
  - port: 3000
    protocol: TCP
    name: restful
  - port: 8982
    protocol: TCP
    name: websocket
  selector:
    run: hedgehog
  externalIPs:
    - 1.2.4.120

配置中指定了externalIP字段,执行kubectl get services命令时,能在EXTERNAL-IP列看到这个IP。但执行curl http://1.2.4.120:3000请求直接超时。已经确认应用本身运行没问题——对应Pod里跑的jar包,在容器内直接访问localhost:3000能正常返回响应。

排查与解决路径

这个问题和应用本身没关系,基本都是对externalIPs的工作机制理解错了,按下面的步骤查基本就能定位原因:

  • 先搞懂externalIPs的基本逻辑:Kubernetes根本不会自动帮你在集群节点上绑定、对外公告这个IP地址。这个字段的唯一作用,就是告诉节点上的kube-proxy组件:只要收到目的IP是1.2.4.120、端口匹配Service定义的流量,就转发到对应的后端Pod上。所有前置的网络连通性配置,全要你自己在集群底层网络弄好。
  • 先核对IP的绑定状态:登录集群所有节点,执行ip addr看网卡配置,确认1.2.4.120真的绑在某个节点的网卡上,而且网卡是正常UP的。如果这个IP根本没绑到任何节点的网卡,外部发过来的流量会直接被上游路由丢掉,肯定超时。
  • 再核对访问控制规则:逐台节点查防火墙、安全组配置,确认3000、8982端口的入站流量是放行的,没有被iptables、firewalld、云平台安全组拦下来。
  • 接着核对kube-proxy的规则有没有生成:在任意节点执行iptables-save | grep 1.2.4.120,看有没有对应的DNAT规则,能把这个IP的3000端口流量导到后端Pod的IP上。如果没看到对应规则,就查kube-proxy的日志,看为啥没把Service的转发规则同步到节点上。
  • 最后核对后端端点状态:执行kubectl get endpoints hedgehog,看输出的端点列表里有没有匹配的Pod IP和3000端口条目。如果端点列表是空的,说明Service的标签选择器根本没选中正在运行的Pod,就算转发规则正常,也因为没有可转发的后端导致超时。

常见踩坑提醒

  • 别以为在Service里填了externalIPs,Kubernetes就会自动帮你完成IP绑定、路由公告这些底层网络操作,这些配置全要你在集群外部的网络层提前准备好。
  • 如果用的是公网IP,还要确认上游路由已经把这个IP的流量指到了集群节点的公网网卡,不然路由链路本身就是断的。

内容的提问来源于stack exchange,提问作者zendevil.eth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 23:06:02