news 2026/7/2 2:05:06

K8s Service ClusterIP不通但Pod IP直连正常Readiness Probe引发的诡异故障

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
K8s Service ClusterIP不通但Pod IP直连正常Readiness Probe引发的诡异故障

K8s Service ClusterIP 不通但 Pod IP 直连正常:Readiness Probe 引发的诡异故障

1. 问题现象

  • 应用 A 通过 Service ClusterIP(10.96.x.x:8080)调用应用 B,持续报 connection refused 或超时
  • 直接 curl Pod IP(172.17.x.x:8080)却是通的
  • kubectl get svc显示 Service 存在,CLUSTER-IP 正常分配
  • kubectl get endpoints显示对应的 Endpoints 列表里有这个 Pod IP

2. 排查过程

Step 1 —— 确认 Pod 本身没问题

kubectlexec-it<pod-a>--curlhttp://<pod-b-ip>:8080/health# ✅ 200 OK

Pod 直接通信正常,排除应用层问题。

Step 2 —— 确认 Service 和 Endpoints

kubectl get svc app-b-svc-oyaml kubectl get endpoints app-b-svc-oyaml

Endpoints 里 Pod IP 存在,说明 selector 匹配没问题。

Step 3 —— 检查 kube-proxy 规则

# iptables 模式iptables-save|grepapp-b-svc# IPVS 模式ipvsadm-Ln|grep<ClusterIP>

发现 iptables 规则存在,但 KUBE-SVC-xxx 链只配了 --probability 给旧 Pod IP,新 Pod 的 DNAT 规则缺失。

Step 4 —— 关键线索:kubectl describe ep

kubectl describe endpoints app-b-svc

输出:

Subsets: Addresses: 192.168.1.10 NotReadyAddresses: <empty>

但实际上 Pod B 有两个副本,新 Pod 的状态是 Running 但 Readiness gate 未就绪——这时候 Pod 不会出现在 Endpoints 的 Addresses 列表中,而旧 Pod 已经销毁了。

Step 5 —— 深挖 Readiness Probe

kubectl get pod app-b-xxx-oyaml|grep-A10readinessProbe

发现 readinessProbe 指向的/actuator/health/readiness返回 503——因为 Pod 启动后需要约 60s 加载配置,但探针initialDelaySeconds只设了 10s。

3. 根因

Readiness Probe 配置不当,导致 Pod 长时间处于 Running but NotReady 状态:

  1. 滚动更新时,新 Pod 启动慢,readiness 一直失败
  2. kube-proxy 不会将 NotReady 的 Pod 写入 iptables/IPVS 转发规则
  3. 旧 Pod 已被终止,但新 Pod 还没 Ready → Service 背后短时间内无可用 Endpoint
  4. 正好在这个窗口期,所有发往 Service ClusterIP 的请求全部失败

这解释了"诡异的矛盾"——Pod IP 直连通(Pod 在运行),但 ClusterIP 不通(kube-proxy 没有将流量转发到它)。

4. 解决方案

治本:调整探针参数

readinessProbe:httpGet:path:/actuator/health/readinessport:8080initialDelaySeconds:60# 给足启动时间periodSeconds:10failureThreshold:5# 容错 50s

治标:滚动更新加保护

strategy:type:RollingUpdaterollingUpdate:maxUnavailable:0# 确保至少有一个 Ready PodmaxSurge:1# 先启动新 Pod 再杀旧 Pod

监控补全

# PromQL 告警:Service Endpoint 数低于预期count(kube_endpoint_address_available) by (endpoint) < 1

5. 复盘总结

  1. Pod Running ≠ 能接流量:Readiness Probe 是 Service 流量的唯一准入标准
  2. 启动慢的应用不能忽略 initialDelaySeconds:Java/Spring Boot 等重框架启动 30-60s 很常见
  3. 滚动更新 + 短探针 = 流量黑洞:新 Pod 被 kube-proxy 排除、旧 Pod 已销毁 → 无 Pod 可用
  4. 排查 ClusterIP 不通的优先步骤describe endpoints→ 看 NotReadyAddresses → 查 Readiness Probe

应用场景:Kubernetes 1.26+、Java/Spring Boot 微服务

关键词:K8s Service、ClusterIP、Readiness Probe、kube-proxy、Endpoints、滚动更新

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 2:03:19

AI 辅助:高性能 RPC 框架设计:延迟预算要从协议层开始

AI 辅助&#xff1a;高性能 RPC 框架设计&#xff1a;延迟预算要从协议层开始 一、RPC 不是套一层 HTTP 就结束 高性能 RPC 框架要处理连接复用、序列化、压缩、超时、重试、负载均衡、背压和可观测性。业务看到的是一次函数调用&#xff0c;底层其实是一整套网络系统。如果协议…

作者头像 李华
网站建设 2026/7/2 2:03:16

生产级 Go 代码 Review 清单——从命名规范到并发安全的系统性审查

生产级 Go 代码 Review 清单——从命名规范到并发安全的系统性审查 一、Code Review 的投入产出比&#xff1a;为什么必须系统化 在 Go 项目的生产环境中&#xff0c;Code Review 的投入产出比常常被低估。根据 GitHub 发布的 Octoverse 报告数据&#xff0c;团队在引入系统性 …

作者头像 李华
网站建设 2026/7/2 2:01:28

【信息科学与工程学】【制造工程】第八十三篇 计算机系统集成制造01

编号 类型 领域 子领域 / 内容 问题 问题的数学分析 时序流程 参数列表及参数的数值范围及数值分析及常量/常数 1 优化问题 计算机系统集成制造 柔性作业车间调度 (Flexible Job Shop Scheduling, FJSP) 给定一组工件和一组机器,每个工件包含若干工序,每道工序可…

作者头像 李华
网站建设 2026/7/2 2:01:07

M95M04 EEPROM与TM4C1294微控制器的嵌入式存储方案

1. 项目背景与核心需求在嵌入式系统开发中&#xff0c;用户偏好、日程设置和自定义配置的持久化存储是一个常见但关键的需求。传统方案如EEPROM或Flash存储往往面临容量限制、擦写寿命和性能瓶颈等问题。而M95M04这颗4Mbit的串行EEPROM与TM4C1294NCPDT这款ARM Cortex-M4微控制器…

作者头像 李华
网站建设 2026/7/2 2:00:50

JSON转SQL实际应用场景案例

介绍 JSON 转 SQL 是数据工程工作中最常见的需求之一。从数据迁移到数据分析&#xff0c;它解决了"JSON 数据如何进入数据库"这个核心问题。本文整理 9 个实战案例。 实际应用场景 1. 从第三方 API 导入数据到数据库 调用外部 API 获取 JSON 数据后&#xff0c;转…

作者头像 李华