cat case/PM-2026-0312B.md

Slack 全球中断:Istio 1.22 熔断误配全员剔除

P0 · 1820 万用户无法收发消息

摘要

2026-03-12 09:14–11:42 UTC,Slack 因 Istio 1.22 熔断(离群检测)配置误配,将健康的 chat-api pod 全部剔除,全球 1820 万用户无法收发消息,中断 2 小时 27 分。

时间线

  • 09:14 UTC :: 单 pod 数据库瞬断返回 503
  • 09:15 UTC :: 用户反馈无法发送消息
  • 09:22 UTC :: chat-api 5xx 达 100%
  • 09:45 UTC :: 定位为 Istio 熔断误配
  • 09:52 UTC :: 回滚 DestinationRule 至稳定版
  • 11:42 UTC :: 全部功能恢复

根因

迁移到 Istio 1.22 的 DestinationRule 中离群检测参数被误配:consecutive_5xx_errors=1(默认 5)、max_ejection_percent=100%(默认 10%)、ejection 间隔与基础剔除时间也被收紧。一个 pod 的瞬断 503 即触发剔除,在负载下其余 pod 也返 5xx,90 秒内 42 个 pod 全被剔除,零健康端点。

放大因素

未配置 Istio 离群剔除事件告警,仅依赖端到端 5xx,使根因定位延迟 23 分钟;瞬断被误判为数据库故障。

缓解措施

回滚至 Istio 1.21 兼容的 DestinationRule;将离群参数恢复为安全默认值;预发环境镜像生产 pod 数与流量并做故障注入测试;新增剔除率超 5% 的告警。

经验教训

服务网格的熔断参数属「故障放大器」,一个默认值的错配可在秒级清空整个实例池;所有网格配置变更必须做范围校验与 staging 故障注入。

检查清单

  • 服务网格配置变更加入参数范围校验
  • 为离群检测剔除事件配置独立告警
  • staging 必须镜像生产规模并做故障注入
  • 熔断默认值走保守基线,禁止放宽 ejection 比例