【Envoy Gateway】南北向全景:缺口、五轴坐标系与 16 篇路线
内容提要
本文介绍Envoy Gateway v1.9.0南北向控制面内核,聚焦从Gateway API对象到Envoy数据面的转换路径。提出五轴坐标系:附着/status、IR、xDS、数据面、东西向CNI,用于故障定位。强调三不变量:状态写于对象、必经IR层、推送不等于生效。规划16篇系列文章,覆盖路由、TLS、策略等,并对比Cilium Gateway、Istio等方案,提供排障与选型指南。
延伸解读
五轴坐标系:排障先定位,再下钻
文章提出五轴坐标系(附着/status、IR、xDS、Envoy数据面、东西向CNI),用于快速定位故障。例如,YAML已apply但条件未绿,优先检查附着轴;Accepted仍404且IR无路由,则问题在IR轴。这种分层方法避免盲目修改配置或重启控制器,提升排障效率。
三不变量:理解控制面与数据面的边界
文章强调三条不变量:状态以对象为准、必须经过IR层、推送不等于生效。这意味着即使status显示Accepted,也可能因IR为空或xDS NACK导致流量不通。理解这些边界有助于区分控制面与数据面问题,避免误判。
版本门:升级前需注意的破坏性变更
v1.9.0存在多个版本门:TCPRoute/UDPRoute需Gateway API v1.6 CRDs,否则静默跳过;Lua扩展默认关闭;tracing采样默认0%;Policy mergeType仅允许挂xRoute。升级时若不注意,可能导致功能静默失效或配置被拒,需提前规划。
选型参考:何时不用Envoy Gateway
文章对比了Envoy Gateway、Cilium Gateway、Istio等方案,指出三者共享Gateway API表面但不共享翻译内核。选型时需考虑失败模式是否可归因到五轴,而非仅看功能列表。若只需简单Ingress,可能无需引入Envoy Gateway。
Q&A
Envoy Gateway v1.9.0 中,为什么 Accepted=True 仍可能出现 404 或无监听器?
Accepted=True 只表示对象语义上可被控制器接受并将产生某些数据面配置,并不保证监听器已就绪或流量已通。例如,缺少 TLS 证书时监听器未 Programmed,但 Route 仍可 Accepted;此外,翻译过程中可能丢弃不兼容的 listener 或未解析的 Secret,导致 IR 中没有对应 Listener,从而出现 404 或无监听器。
Envoy Gateway 中,为什么 TCPRoute 或 UDPRoute 会静默消失?
在 v1.9.0 中,TCPRoute/UDPRoute 经 gateway.networking.k8s.io/v1 调和,如果未安装 Gateway API v1.6 CRDs,则会被静默跳过,不会报错。因此升级 Envoy Gateway 而不升级 Gateway API CRDs 会导致 L4 路由在 Provider 轴静默缺席。
Envoy Gateway 中,Policy 写了不生效可能有哪些原因?
可能原因包括:Policy 的 mergeType 仅允许挂 xRoute,如果挂到 Gateway 或 ListenerSet 父资源会被拒绝;Lua EnvoyExtensionPolicy 默认关闭,需要启用 extensionApis.enableLua;tracing client sampling 默认 0%,导致观测未生效;或者 Patch 匹配了旧 xDS 名。
Envoy Gateway 的五轴坐标系是什么?分别对应哪些可核对锚点?
五轴坐标系包括:附着/status(锚点:Accepted/Programmed/ResolvedRefs)、IR(锚点:XdsIR/InfraIR)、xDS(锚点:xDS Translator 与 go-control-plane,指标 xdsNACKTotal)、Envoy 数据面(锚点:Filter 链、cluster、warming)、入口之后东西向(锚点:Cilium 四元组:CNI 模式、KPR、加密、Gateway)。
Envoy Gateway 控制面中,IR 层的作用是什么?为什么必须经过 IR?
IR 层将 Gateway API 对象翻译成与 Envoy 资源树解耦的中间表示(XdsIR 和 InfraIR),目的是让控制面不跟外部资源的字段布局绑死。必须经过 IR 是为了实现 Provider 可替换、翻译顺序可测、status 与 IR 同一次 Translate 计算。排障时必须问“IR 里有没有”,而不是“控制器开了没有”。
Envoy Gateway 中,如何判断故障落在哪一层?
排障口诀是先点名轴,再下钻模块。具体:YAML 已 apply 但条件未绿,先问附着/status;Accepted 仍 404 且 IR 无 route,先问 IR;NACK 或旧快照,先问 xDS;监听器在上游耗尽,先问数据面;Gateway 200 后后端黑洞,先问东西向 CNI。
Envoy Gateway 与 Cilium Gateway、Istio 在控制面实现上有何不同?
Envoy Gateway 是独立控制面,将 Gateway API 译成 IR,再分别生成 xDS 与数据面舰队;Cilium Gateway 将南北向 L7 嵌进同一发行;Istio 走 istiod 的 CRD/HTTPRoute→xDS,并另开 GAMMA 东西向。三条路径共享 Gateway API 表面,但不共享翻译内核。
Envoy Gateway v1.9.0 中,三个不变量是什么?
三个不变量是:1. 意图以 Gateway API 对象及其 status 为键,不以控制器日志为键;2. Gateway API 与 Envoy 资源树之间必须经过 IR;3. “控制面已推送”不等于“Envoy 在服务”,更不等于“后端 CNI 放行”。