首页/云/云与容器速查/服务访问超时(跨命名空间/策略)排查

服务访问超时(跨命名空间/策略)排查

TCP 连不上表现为超时或 connection refused:refused 多为无进程监听/无端点,timeout 多为网络链路被策略或路由拦截。两者指向不同层。

云与容器速查云更新于 2026-10-13

服务访问不通的两种形态

服务访问不通有两种表现,指向完全不同的层次:连接被拒绝通常是目标端口没有进程监听或服务没有可用端点;连接超时则多为链路被策略或路由拦截。先分清属于哪一种,后续排查才有方向,否则会在错误的层次上浪费时间。

基本信息

连接被拒绝目标端口无监听,或服务没有可用端点
连接超时链路被网络策略、安全组或路由黑洞拦截
跨命名空间确认服务名写法与策略双向放行
验证工具临时排查容器里的 nc 与 dig 双验证
DNS 先行解析失败与网络不通的报错相似,先分清
方向性单向放行不等于双向可达

现象与层次

现象所在层次下一步
连接被拒绝服务或端点查端点与容器是否在监听
连接超时网络策略或路由查策略、安全组与网段路由
解析失败DNS查解析链路与搜索域
间歇失败负载或连接数看后端健康与连接池配置
只有部分 Pod 失败节点或策略差异对比失败与正常 Pod 的节点

排查命令

排查命令
kubectl run tmp --rm -it --image=nicolaka/netshoot -- sh   # 起临时排查容器
# 容器内依次执行:
dig +short db.dev.svc.cluster.local                        # 先确认解析
nc -vz db.dev 3306                                         # 再确认端口可达
curl -m 5 -sS http://web.dev/                              # 最后确认应用响应
kubectl get endpoints db -n dev                            # 端点是否为空
kubectl get networkpolicy -n dev                           # 是否有策略拦截

典型使用场景

  • 新服务上线后调用方报超时,需要判断是解析、策略还是后端问题
  • 跨命名空间调用失败,服务名写法与策略都可能有问题
  • 部分 Pod 能通、部分不通,怀疑节点或策略不一致
  • 业务告警前的连通性验证,避免把问题带到业务层
网络策略通常是命名空间级默认放行:只加一条允许规则不会拒绝其他流量,要默认拒绝必须显式声明拒绝全部的策略。
端点为空时同样表现为连接被拒绝或超时:先用端点状态确认后端是否真的注册上了,这一步最容易被跳过。
连接被拒绝多数不是防火墙问题,而是没有后端在监听端口;方向搞反会一直在网络层绕圈。

易错点

  • 把拒绝当成防火墙问题:其实是没有后端在监听端口
  • 测试 Pod 与目标不在同一命名空间:策略差异导致结论不可复现
  • 忽略端点状态:后端没注册上还在查网络
  • 只看单向连通:出方向放行不代表回程可达
  • 用业务容器做验证:镜像里没有排查工具,反而拖长排查时间

数据来源与参考

  • Kubernetes Docs:Network Policies
  • Kubernetes Docs:Service

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌