首页/网络/协议速查/健康检查与状态码约定
HTTP 方法与状态码91 条

健康检查与状态码约定

负载均衡/K8s 探针通过状态码判断实例是否可服务:2xx(多数实现含 3xx)视为健康,4xx/5xx 按探针配置判定。

协议速查网络更新于 2026-10-13

健康检查靠状态码说话

负载均衡、网关与 Kubernetes 无法直接理解业务状态,它们只能反复请求一个约定好的路径,再按 HTTP 状态码判断实例是否可用。因此健康接口的返回码就是运维契约:200 到 399 通常算健康,4xx 与 5xx 按探针配置分别处理。设计这个接口的关键是分清「进程活着」与「能对外提供服务」。

基本信息

Kubernetes 探针httpGet 默认 200 到 399 视为成功,可用 successThreshold 与 failureThreshold 调整判定次数
负载均衡多数要求 200;个别设备不接受 204,健康接口返回 204 可能被误判为不可用
探针类型liveness 决定是否重启、readiness 决定是否进入后端、startup 决定启动期宽限
响应体探针只看状态码,正文应精简,避免每次探测都做重活

探针分工

探针探测目标失败后果
liveness进程是否卡死重启容器,连续失败会反复重启
readiness是否能接收流量从后端摘除,不重启
startup应用是否启动完成启动期内屏蔽 liveness 判定
网关主动检查上游连通与响应时间摘除节点或切主备

健康端点示例

健康端点示例
# 简单探活:进程能响应即可
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/healthz
# 就绪检查:关键依赖可用才返回 200
curl -s http://127.0.0.1:8080/readyz
# K8s 探针片段(httpGet 默认 200-399 成功)
# livenessProbe: { httpGet: { path: /healthz, port: 8080 }, periodSeconds: 10, failureThreshold: 3 }

典型使用场景

  • 容器编排里区分「重启」与「摘流量」,避免依赖抖动引发全量重启
  • 负载均衡后端摘除:就绪检查探测数据库或下游连通性
  • 灰度发布时用就绪状态控制新版本何时接流量
  • 排查「实例一直不健康」:先手工请求探针路径,判断是网络问题还是依赖问题
liveness 探针里放重逻辑(全链路依赖检查)会造成「一挂全挂」:某个次要依赖抖动就让所有实例同时重启,故障被放大。liveness 只探自身,依赖检查放 readiness。
探针频率过高等于自己打的 DDoS:给健康接口设足够的超时与失败阈值,避免瞬时延迟直接触发摘除,形成反复摘挂的抖动。

易错点

  • 健康检查接口带缓存:故障时仍返回缓存的 200,探测形同虚设,应显式设置 no-store 并跳过 CDN 缓存
  • 把依赖检查放进 liveness:数据库抖动导致全部实例被重启,故障从「降级」变成「全站不可用」
  • 健康接口要求认证:负载均衡与探针通常不带凭据,会被 401 拦下而永远判定不健康
  • 只做 TCP 端口探测:进程还在监听但业务线程池已满时判定为健康,实际请求全部超时,应改做 HTTP 层语义检查

数据来源与参考

  • Kubernetes 文档:Configure Liveness/Readiness Probes
  • RFC 9110 §15(状态码语义)

相关工具

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