摘要
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 比例