Skip to content
Kubernetes 发布与排障主线 · 第 1 篇 / 共 4 篇
领域运维与部署
专题Kubernetes 专题
当前序列Kubernetes 发布与排障主线
阅读位置第 1 篇 / 共 4 篇当前专题第 2 个序列 / 共 3 个序列

Ingress、Service 和集群网络链路怎么串起来看

很多人学 Kubernetes 网络时,脑子里会堆一堆名词:

  • Ingress
  • Service
  • ClusterIP
  • NodePort
  • Pod IP
  • CNI

但一到线上排障,还是会问:

“一个公网请求到底是怎么打到 Pod 上的?”

如果这条链路没有在脑中串起来,后面排查 404、502、超时、只在某个节点失败这类问题会非常痛苦。

先说结论

  • 一个外部请求通常会经历:DNS / LB -> Ingress Controller -> Service -> Endpoint -> Pod
  • Ingress 负责七层路由,Service 负责稳定服务发现和转发抽象,Pod 才是最终处理请求的实例
  • 线上排障一定要按链路分层查,不要一上来只盯 Pod
  • 大部分 404、502、超时问题,本质上都卡在这条链路某一层的映射不对或健康状态不对

先把一条请求路径串起来

如果你访问 api.example.com/order/create,在典型 K8s 集群里,一条请求大概会这么走:

  1. 域名解析到外部负载均衡或入口地址
  2. 流量进入 Ingress Controller
  3. Ingress 根据 host / path 规则匹配到某个 Service
  4. Service 根据 selector 找到后端 Endpoint
  5. 请求被转发到某个 Pod IP
  6. Pod 内业务进程真正处理请求

你可以把这条链理解成:

  • Ingress 决定“去哪个服务”
  • Service 决定“去这组 Pod 中的哪一个”
  • Pod 决定“是否真能处理成功”

Ingress 在解决什么

Ingress 主要负责七层入口治理:

  • 域名路由
  • 路径路由
  • TLS 证书
  • 重写、转发规则

它本身不是数据面实现,真正执行这些能力的是 Ingress Controller,例如 Nginx Ingress。

所以写了 Ingress 规则,不代表就自动生效。
还要看对应的 controller 是否正常接管。

Service 在解决什么

Service 的核心价值是给一组 Pod 一个稳定的访问抽象。

因为 Pod 会重建、IP 会变化,调用方不可能永远记住某个 Pod IP。
Service 通过 selector 和 Endpoint 机制,把“Pod 在变”这件事屏蔽掉。

常见的几种类型:

  • ClusterIP: 集群内访问
  • NodePort: 通过节点端口暴露
  • LoadBalancer: 云环境下申请外部负载均衡

很多 Ingress 最终也是把流量转给 ClusterIP Service。

Endpoint 为什么常常是排障关键

Service 只是一个抽象名字,真正后面有没有 Pod,要看 Endpoint。

如果出现:

  • Service 在
  • Pod 也在
  • 但请求还是打不过去

很常见的一种情况就是:

  • selector 配错
  • readiness 没通过
  • Endpoint 为空

这时问题不在 Ingress,也不在 DNS,而在 Service 根本没有后端。

一条排障思路应该怎么走

1. 先看入口有没有进来

确认 DNS、外部 LB、Ingress Controller 是否正常。

2. 再看 Ingress 规则有没有匹配

重点看:

  • host
  • path
  • pathType
  • rewrite
  • backend service 名字和端口

3. 再看 Service 是否有后端

确认:

  • selector 是否正确
  • Endpoint 是否存在

4. 最后看 Pod 是否真能处理

包括:

  • 进程端口是否监听
  • readiness / liveness 是否正常
  • 应用内部是否报错

几个高频故障现象怎么定位

1. 404

先看是 Ingress 返回的 404,还是应用返回的 404。

前者多半是:

  • host/path 没匹配上
  • rewrite 规则不对

后者多半说明流量已经到应用了,只是应用路由本身没命中。

2. 502 / 503

常见于:

  • Ingress 找到 Service,但 Service 没有可用 Endpoint
  • Pod 启动了,但 readiness 没通过
  • 应用端口和 Service targetPort 不一致

3. 超时

常见要分几层看:

  • 入口到 Ingress 慢
  • Ingress 到 Service / Pod 慢
  • Pod 内部依赖 DB / Redis / RPC 慢

不要看到超时就只怪网络。

为什么只看 Pod 常常会误判

因为 Pod Running 不等于流量一定能打通。

可能出现:

  • Pod 正常运行,但 readiness 没过,没进 Endpoint
  • Pod 端口和 Service targetPort 配错
  • Ingress 指向了错误的 Service

所以 Kubernetes 网络问题往往是“映射链路问题”,不是“单个实例挂了”。

一个更顺手的心智图

你可以这样记:

  • 域名层: 请求能不能到集群入口
  • 路由层: Ingress 有没有把请求导向对的 Service
  • 服务层: Service 有没有选中正确 Pod
  • 实例层: Pod 是否真可用

排障时就沿这四层一层层缩小范围。

总结

Ingress、Service 和集群网络链路最重要的,不是记住名词,而是把请求路径真正串起来:

外部入口 -> Ingress -> Service -> Endpoint -> Pod

一旦这条链在脑子里清楚了,Kubernetes 大多数网络类问题都会从“很玄学”变成“可定位的分层问题”。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读RollingUpdate、Blue Green、Canary 怎么选适合把网络、发布策略、持久化和 Pod 故障排查放到一起看。Kubernetes 专题 · Kubernetes 发布与排障主线同一序列 · 顺着当前主线继续读StatefulSet、PVC、StorageClass 怎么理解适合把网络、发布策略、持久化和 Pod 故障排查放到一起看。Kubernetes 专题 · Kubernetes 发布与排障主线同专题其他序列 · 共享标签:部署交付节点污点、亲和性和拓扑 spread 怎么组合适合把命名空间、回滚、PDB、HPA、Mesh 和调度约束放在一条 Kubernetes 治理主线上整理。Kubernetes 专题 · Kubernetes 编排约束与交付治理同专题其他序列 · 共享标签:部署交付Deployment 回滚到底依赖了什么信息适合把命名空间、回滚、PDB、HPA、Mesh 和调度约束放在一条 Kubernetes 治理主线上整理。Kubernetes 专题 · Kubernetes 编排约束与交付治理跨专题关联 · 同场景:部署交付标签基数为什么会拖垮 Prometheus适合把 Prometheus、Grafana、标签治理和告警分级放在一起看。可观测性专题 · 指标与告警体系设计跨专题关联 · 同场景:部署交付多环境发布怎么设计:开发、测试、预发、生产不只是名字不同适合沿着流水线设计、自动部署、发布策略、数据库变更和多环境治理这条线往下读。CI/CD 与发布治理专题 · CI/CD 与发布治理
继续阅读Kubernetes 发布与排障主线当前序列第 1 篇 / 共 4 篇当前专题第 2 个序列 / 共 3 个序列
往前看
上一序列Kubernetes 核心对象与资源治理从第 1 篇开始:Pod、Deployment、Service 到底怎么协作
往后看
下一篇RollingUpdate、Blue Green、Canary 怎么选继续当前序列下一章下一序列Kubernetes 编排约束与交付治理从第 1 篇开始:Namespace、Label 和 Annotation 该怎么分工

把零散经验整理成可查、可复用、可持续更新的企业级知识门户