在日常后端和运维协作中,Kubernetes 上的 502 问题很常见:接口偶发不可用,网关返回 502,应用日志里又不一定能直接看到异常。很多时候,问题并不在某一行代码,而是在 Ingress、Service、Pod、健康检查、超时配置、滚动发布策略之间来回传递。

这篇文章记录一个偏实战的排查方式:使用 Gemini 3.5-flash 辅助整理 Kubernetes 502 问题的日志、配置和验证步骤。它适合做结构化分析、生成排查清单、整理复盘文档,但不适合直接替代工程师判断根因。真正的结论仍然要回到日志、配置、监控和复现实验。

一、问题背景:发布后接口偶发 502

假设有一个 Spring Boot 服务部署在 Kubernetes 中,对外通过 Nginx Ingress 暴露接口。某次版本发布后,业务方反馈接口偶发 502,持续时间不长,但在流量高峰时会出现。

简化后的链路如下:

text

Client  ↓Nginx Ingress  ↓Service  ↓Pod: order-service  ↓Spring Boot 应用

现象包括:

  • 发布后 5 分钟内 502 明显增多;
  • 重试后大多能成功;
  • 应用日志没有大量业务异常;
  • Ingress 日志中能看到 upstream 相关错误;
  • Pod 没有频繁重启,但 readiness 状态曾短暂波动。

这类问题很容易陷入“猜测式排查”:有人怀疑代码,有人怀疑网关,有人怀疑发布策略,还有人怀疑资源不足。我的做法是先让 AI 帮忙把信息整理成排查框架,而不是直接问“为什么 502”。

二、先把日志和配置整理成结构化输入

给 Gemini 3.5-flash 的第一段 Prompt 可以这样写:

text

你是一名 SRE / 后端排障工程师,请协助分析 Kubernetes 中服务发布后偶发 502 的问题。
已知现象:1. 服务名:order-service;2. 技术栈:Spring Boot + Kubernetes + Nginx Ingress;3. 发布后 5 分钟内 502 增多;4. 重试后大多成功;5. 应用日志没有明显业务异常;6. Ingress 日志出现 upstream prematurely closed connection;7. Pod 未频繁重启;8. readinessProbe 曾短暂失败;9. 当前怀疑方向包括:健康检查、滚动发布、应用启动耗时、Ingress 超时、资源不足。
请不要直接给最终结论。请按以下格式输出:- 已确认事实;- 缺失信息;- 按网络层、Ingress、Service、Pod、应用、发布策略分类的排查方向;- 建议补充的 kubectl 命令;- 最小验证实验清单。

这个 Prompt 的重点是约束模型输出:先区分事实和猜测,再按层次拆解。Gemini 3.5-flash 在这种“日志 + 配置 + 表格化输出”的任务上比较合适,尤其适合把零散信息整理成排查清单。

三、从 AI 输出中整理排查表

模型输出后,可以人工整理成类似下面的表格:

排查方向 可能问题 需要查看的信息 验证方式
Ingress upstream 连接提前关闭 Ingress 日志、超时配置 查看 502 时间点日志
Service Endpoint 更新不及时 Endpoints 变化 kubectl get endpoints -w
Pod readiness 波动 Pod 事件、探针结果 kubectl describe pod
应用 启动未完成即接流量 启动日志、健康接口 延长 readiness 初始延迟
发布策略 新旧 Pod 切换过快 Deployment 配置 检查 maxUnavailable
资源 CPU 抖动导致响应慢 Metrics、HPA 事件 查看 CPU、内存曲线

这里要注意,AI 只能帮助“列出可能路径”,不能直接证明哪一个就是根因。比如 upstream prematurely closed connection 可能与应用主动关闭连接有关,也可能与 Pod 正在下线、探针波动、超时配置相关。

四、检查 Deployment 与探针配置

排查 Kubernetes 502 时,Deployment 配置是重点。下面是一段常见配置示例:

yaml

apiVersion: apps/v1kind: Deploymentmetadata:  name: order-servicespec:  replicas: 4  strategy:    type: RollingUpdate    rollingUpdate:      maxSurge: 1      maxUnavailable: 1  template:    spec:      containers:        - name: order-service          image: registry.example.com/order-service:1.2.3          ports:            - containerPort: 8080          readinessProbe:            httpGet:              path: /actuator/health/readiness              port: 8080            initialDelaySeconds: 10            periodSeconds: 5            timeoutSeconds: 2            failureThreshold: 3          livenessProbe:            httpGet:              path: /actuator/health/liveness              port: 8080            initialDelaySeconds: 30            periodSeconds: 10            timeoutSeconds: 2            failureThreshold: 3

如果 Spring Boot 启动较慢,或者应用启动后还需要加载缓存、初始化连接池、预热字典数据,那么 initialDelaySeconds: 10 可能偏短。Pod 刚被加入 Service Endpoint,但应用还不能稳定处理请求,就可能出现偶发 502。

可以让 Gemini 3.5-flash 帮忙检查配置中的风险点:

text

请检查下面的 Kubernetes Deployment 配置,重点关注可能导致发布后偶发 502 的配置项。
要求:1. 不要直接给最终结论;2. 按 readinessProbe、livenessProbe、滚动发布策略、资源限制、优雅下线分类;3. 每类输出风险点、原因、建议验证方式;4. 不要编造不存在的字段。

这种 Prompt 适合用于配置 Review,尤其适合发现一些容易忽略的点,比如:

  • readiness 探针是否过早通过;
  • liveness 是否误杀启动较慢的进程;
  • maxUnavailable 是否导致可用副本短暂不足;
  • 是否缺少 preStop
  • 是否配置了合理的 terminationGracePeriodSeconds
  • 容器是否设置了 CPU request/limit。

五、补充优雅下线配置

如果 502 主要出现在发布或扩缩容时,优雅下线值得重点检查。一个常见改法是加入 preStop,给 Ingress 和 Service 一点时间完成 Endpoint 摘除:

yaml

lifecycle:  preStop:    exec:      command:        - /bin/sh        - -c        - "sleep 15"
terminationGracePeriodSeconds: 45

这不是万能解法,但能降低正在处理请求的 Pod 被过快终止的概率。是否需要 sleep 15sleep 30,要结合请求耗时、网关配置、业务 SLA 和实际压测结果决定。

同时,应用侧也要支持优雅关闭。例如 Spring Boot 可以检查:

yaml

server:  shutdown: graceful
spring:  lifecycle:    timeout-per-shutdown-phase: 30s

如果应用不支持优雅关闭,只在 Kubernetes 层 sleep,也可能只是延缓问题,而没有真正处理好连接释放、线程池关闭和正在执行的请求。

六、常用命令:把排查动作落到实处

AI 生成排查建议后,最好转成固定命令清单,方便团队复用。

bash

# 查看 Pod 状态kubectl get pod -n prod -l app=order-service -o wide
# 查看 Pod 事件和探针失败记录kubectl describe pod -n prod <pod-name>
# 观察 Endpoints 变化kubectl get endpoints -n prod order-service -w
# 查看发布历史kubectl rollout history deployment/order-service -n prod
# 查看发布状态kubectl rollout status deployment/order-service -n prod
# 查看 Ingress 日志,按时间过滤kubectl logs -n ingress-nginx <ingress-pod-name> | grep "order-service"
# 查看应用日志kubectl logs -n prod <pod-name> -c order-service --since=30m

如果有 Prometheus / Grafana,还应补充:

  • Ingress 5xx 曲线;
  • Pod CPU / Memory;
  • JVM GC 情况;
  • 请求耗时 P95 / P99;
  • readiness 失败次数;
  • Pod 重启次数;
  • HPA 扩缩容事件。

日志和监控要按同一时间窗口对齐,否则很容易把不同时间段的问题混在一起。

七、多模型对比:不同模型适合不同环节

在 Kubernetes 排障这类任务里,不同模型可以承担不同角色:

模型 更适合的任务 使用注意
Gemini 3.5-flash 日志整理、配置表格化、排查步骤生成 输入要包含明确现象和配置片段
ChatGPT 排障思路扩展、脚本草稿、解释报错 生成命令需结合集群环境核对
Claude 长文档、长日志、复盘报告整理 适合长上下文,但细节仍需验证
DeepSeek 中文技术解释、K8s 概念拆解、排查路径梳理 适合学习和复盘,不替代实测

多模型交叉验证的意义,不是让模型投票决定根因,而是减少盲区。比如一个模型提醒 readiness,另一个模型提醒优雅下线,第三个模型提醒 Ingress 超时。最后仍然要通过实验确认。

八、AI 输出如何验证

1. 对照官方文档和集群版本

Kubernetes、Ingress Controller、Spring Boot 的配置项会随版本变化。AI 给出的字段名、默认值、行为描述必须对照当前版本文档确认。

重点核对:

  • Ingress 注解是否适用于当前 Controller;
  • readiness / liveness 行为是否理解正确;
  • Spring Boot 优雅关闭配置是否适用于当前版本;
  • Deployment 滚动更新参数是否符合预期。

2. 对照发布前后监控

不要只看“现在好了没”,而要比较:

text

发布前 30 分钟:5xx、P99、Pod 数量、CPU、内存发布中 10 分钟:5xx 峰值、readiness 失败次数、Endpoint 变化发布后 30 分钟:错误率是否回落、是否仍有偶发异常

如果修改探针后 502 下降,但 P99 明显升高,也说明问题可能只是表现形式变化了。

3. 做小流量验证

对于生产环境配置修改,不建议一次性全量调整。可以先在测试环境或灰度环境验证:

text

实验 A:readiness initialDelaySeconds 从 10 调整为 30实验 B:增加 preStop sleep 15实验 C:maxUnavailable 从 1 调整为 0实验 D:增加启动预热接口检查

每次只改一个变量,才容易判断哪个调整真正有效。

九、多模型工具的判断标准

如果团队准备把多模型 AI 工具纳入日常研发或运维流程,可以从这些角度判断:

  1. 是否方便把同一段日志交给不同模型对比;
  2. 是否支持较长上下文,能处理日志、YAML、配置说明;
  3. Markdown 表格输出是否稳定,方便沉淀到知识库;
  4. 是否便于保存 Prompt 模板,形成团队排障规范;
  5. 是否支持人工复核流程,而不是只给一个结论;
  6. 是否方便做脱敏处理,避免上传内部敏感信息。

工具只是流程的一部分。真正有价值的是把一次排障沉淀成下次能复用的 SOP。

十、风险边界:哪些内容不要直接提交给 AI

在排查线上问题时,尤其要注意数据安全和公司规范。以下内容不建议直接提交:

  • 完整生产日志;
  • 用户手机号、邮箱、地址、订单号;
  • 内部域名、IP、访问密钥;
  • 私有镜像仓库地址和凭据;
  • 客户名称、合同信息;
  • 未公开的架构图;
  • 完整业务代码和配置文件。

更稳妥的做法是先脱敏,只保留必要字段:

text

真实域名:api.company-a.com    → example-api真实用户ID:893728193          → user_xxx真实订单号:202501010001       → order_xxx真实IP:10.12.33.45            → internal_ip_1

AI 不需要知道你的完整生产环境,也能帮助整理排查思路。

十一、FAQ:常见误区

1. AI 能直接判断 Kubernetes 502 的根因吗?

不建议这样使用。AI 可以根据日志和配置列出可能方向,但根因必须通过日志、监控、配置对照和实验验证。

2. AI 生成的 YAML 能直接上线吗?

不能。YAML 配置强依赖集群版本、Ingress Controller、资源规格和业务特性。上线前必须经过测试环境验证和 Code Review。

3. 单一模型够不够?

日常整理日志、生成排查清单,一个模型通常够用。对于线上故障复盘、复杂配置变更,可以用多个模型交叉查看,减少遗漏点。

4. Prompt 怎么写更稳定?

不要只写“帮我分析 502”。更好的写法是提供现象、时间窗口、架构链路、关键日志、配置片段,并要求模型区分“已确认事实”和“可能原因”。

5. 公司日志能不能直接发给 AI?

不建议直接发送完整日志。应先脱敏、截取必要片段,并遵守团队的数据安全规范。

十二、总结

Gemini 3.5-flash 在 Kubernetes 502 排查中的价值,主要体现在三点:把零散日志整理成结构化信息,把怀疑方向转成排查清单,把一次故障处理沉淀成可复用的验证流程。

比较稳妥的用法是:先选一个具体问题,比如发布后 502、Pod readiness 波动、接口超时;再用清晰 Prompt 约束输出格式;随后用日志、监控、配置和灰度实验验证。重要任务可以引入多模型交叉检查,但最终结论必须由工程证据支撑,不能把 AI 当成最终决策者。

更多推荐