【Envoy 数据面】生产排障:五条坐标系上的失败清单

💡 原文中文,约5400字,阅读约需13分钟。
📝

内容提要

本文介绍Envoy数据面代理生产排障方法,强调先选坐标系再查admin,避免空转。将常见症状映射到请求路径、线程快照、匹配改写、xDS一致性、上游资源五轴,并给出可核对的admin/观测入口。核心观点:ACK、warming、流量切换是三件事,黑洞多落在中间;无上游、证书、池耗尽、泄漏各有排除树;Hot restart不迁移既有连接,drain参数是发布风险。

🔎

延伸解读

先定坐标系,再查admin

排障时若从产品名或面板名入手,容易在sidecar、网关与业务之间空转。文章建议先选坐标系(请求路径、线程快照、匹配改写、xDS一致性、上游资源),再查admin。这样多数故障能快速落入有限几格,避免盲目排查。

ACK不等于流量已切换

控制面显示已推送,但客户端仍可能503或走旧路由。ACK、warming、流量切换是三件事,黑洞多落在warming空窗。发布门禁应检查数据面就绪,而非仅看ACK计数。

证书问题常被误报为上游故障

TLS握手失败时,upstream stats可能几乎不动,容易被误判为上游故障。应先按路径轴分侧,再查SDS订阅、warming listener、时钟与中间CA。

Hot restart不迁移连接

Hot restart解决的是代码或配置重载并尽量保listen,但不迁移既有连接。drain参数是发布风险,需核对drain时长、parent shutdown及双进程残留。

Q&A

Envoy 生产排障时,应该先做什么?

排障时应先选择坐标系(请求路径、线程快照、匹配改写、xDS一致性、上游资源五轴),再查 admin,避免在控制面文案与业务之间空转。

Envoy 中 ACK、warming 和流量切换有什么区别?

ACK 表示控制面已推送,warming 表示依赖资源尚未就绪,流量切换是实际生效。三者是独立事件,黑洞多发生在 warming 空窗期,发布门禁应检查数据面就绪,而非仅看 ACK。

Envoy 返回 503 或提示无上游时,应该按什么顺序排查?

按排除树顺序:Route 名对 → Cluster 在 config_dump 中存在 → 有 endpoint → 有健康主机 → 池未溢出。任一步断裂,先查对应 admin 或统计,而不是怀疑业务代码。

控制面显示路由已推送,但流量仍走旧路由,可能是什么原因?

可能原因包括:ADS/xDS 流未连接或 NACK 上升、Route 资源 version 未出现在本机 config_dump、Listener/VirtualHost/Route 命名不匹配、仍有旧 listener 在服务、客户端打到另一条入口。应以数据面 config_dump 为准,而非控制面文案。

Envoy 证书问题为什么常被误报为上游故障?

因为证书问题发生在匹配轴或下游 TLS 阶段,上游 stats 可能几乎不动。应先通过路径轴分侧,再查 SDS 订阅、warming listener、时钟与中间 CA。

Envoy Hot restart 对现有连接有什么影响?

Hot restart 不迁移既有连接,旧进程在 drain 期内结束或切断连接。drain 时长若短于业务最长请求,可能导致长连接突断。需核对 drain 参数、parent shutdown 及双进程残留。

Envoy 连接泄漏(fd 只升不降)可能由哪些原因导致?

可能原因包括:下游不关连接(客户端保活过量)、上游半开(重试放大)、过滤器持有(自定义/Wasm/ext_proc 不结束流)、健康检查争用、限流/鉴权外呼变慢。需对照下游活跃连接、上游活跃连接与 pending 请求来定位。

🏷️

标签

➡️

继续阅读