【Envoy Gateway】xDS Translator 与 Infra:推送不等于在服务

💡 原文中文,约11700字,阅读约需28分钟。
📝

内容提要

本文介绍Envoy Gateway v1.9.0中xDS Translator将XdsIR编译为LDS/RDS/CDS/EDS/SDS资源,Infra Manager将InfraIR转化为Envoy部署舰队。强调“已推送”不等于“在服务”,需区分IR、快照、ACK和warming四层。系统错误不发半棵树,NACK时Envoy守旧配置,排障需先确认基础设施再查xDS指标。

🔎

延伸解读

「已推送」的四层拆解

文章强调「控制面已推送」不等于「Envoy 在服务」,需区分 IR 层、xDS 快照层、ACK/NACK 层和数据面 warming 层。IR 层指 Gateway API 是否生成对应 IR;xDS 层指快照是否写入;ACK 只表示资源通过校验,但 warming 还需等待依赖资源齐备。理解这四层有助于避免误判流量切换状态。

系统错误与用户 patch 错误的区别

xDS Translator 是 best-effort 翻译,系统级错误(如扩展 hook 失败)会导致整个快照不更新,Envoy 继续使用旧配置;而 EnvoyPatchPolicy 的 JSON patch 失败被视为用户错误,不阻断其余资源进入快照。排障时需区分这两类错误,避免误以为快照未更新是 patch 问题。

Infra 与 xDS 是并行管线

Infra Manager 负责将 InfraIR 转化为 Envoy 部署(Deployment、Service 等),与 xDS 快照并行,互不替代。没有舰队,xDS 无消费者;有舰队但无对应 IR key 的快照,代理拿到的是空或旧配置。排障时应先确认基础设施是否就绪,再检查 xDS 指标。

NACK 与 known-good 配置

当 Envoy 返回 NACK 时,会增加 xdsNACKTotal 指标,并继续服务上一份 known-good 配置。重新拉起的代理会加载被拒配置并失败。因此,NACK 时用户侧可能无感,但流量仍停留在旧图。监控该指标有助于及时发现配置问题。

Q&A

Envoy Gateway中xDS Translator的作用是什么?

xDS Translator将XdsIR编译为Envoy xDS服务器消费的资源,包括LDS、RDS、CDS、EDS和SDS,生成go-control-plane快照。

Envoy Gateway中Infra Manager负责什么?

Infra Manager消费InfraIR,负责管理Envoy数据面的生命周期,包括创建Deployment、Service等资源,并支持Kubernetes、Host和Remote三种provider。

为什么说“已推送”不等于“在服务”?

因为“已推送”只表示配置已进入快照或Envoy已ACK,但Envoy可能仍在warming,或NACK后继续使用旧配置,所以需要区分IR、快照、ACK和warming四层。

Envoy Gateway如何处理xDS翻译错误?

系统级翻译错误会导致不更新快照,Envoy继续使用上一份配置;而EnvoyPatchPolicy的JSON patch错误被视为用户错误,不会阻断其他资源进入快照。

Envoy Gateway中NACK时会发生什么?

当Envoy NACK时,会增加xdsNACKTotal指标,并记录错误日志,Envoy继续服务上一份known-good配置;重新拉起的代理会加载被拒配置并失败。

Envoy Gateway中xDS Server使用什么协议?

xDS Server基于go-control-plane实现Delta xDS,同时支持SotW和Incremental回调,但官方设计以Delta xDS为主。

Envoy Gateway中如何排查配置未生效的问题?

先确认Infra是否就绪(如Deployment、Service存在),再检查xDS指标(如xdsNACKTotal)和日志,最后检查数据面warming、证书等。

Envoy Gateway中EnvoyProxy CR的作用是什么?

EnvoyProxy CR挂在GatewayClass或Gateway上,用于自定义默认基础设施,如Service类型、副本数、bootstrap片段等。

🏷️

标签

➡️

继续阅读