【Envoy Gateway】Policy attachment:五类策略编译到哪一层,mergeType 挂错父资源会发生什么

💡 原文中文,约13100字,阅读约需32分钟。
📝

内容提要

Envoy Gateway v1.9.0中五类策略(Security、BackendTraffic、ClientTraffic、EnvoyExtension、EnvoyPatch)的生效机制与常见失效原因。重点:mergeType仅允许在xRoute上声明,挂父资源会被拒绝;Lua默认关闭需显式启用;JWT稳定名、限流布局等xDS变更会使旧补丁失效。策略未生效时需先定位是admission拒绝、IR覆盖还是补丁错位。

🔎

延伸解读

策略未生效,先定位失败层

文章指出,策略“写了不生效”可能发生在不同层面:admission拒绝、IR覆盖、或补丁错位。例如,mergeType挂在父资源上会被admission拒绝,而Lua策略未生效可能是因为未启用enableLua。排障时应先判断是创建被拒、对象已接受但无效果,还是补丁打空,再对症下药。

mergeType 仅限 xRoute,父资源声明会被拒

v1.9.0起,mergeType字段只允许在xRoute(如HTTPRoute、GRPCRoute等)上声明,挂在Gateway或ListenerSet上会被admission拒绝。这意味着平台无法在父策略上强制向下合并,合并意图只能由子路由策略发出。升级前需检查并删除父资源上的mergeType字段,否则更新会被拒。

Lua 默认关闭,需显式启用

EnvoyExtensionPolicy中的Lua支持在v1.9.0默认关闭,必须在EnvoyGateway配置中设置extensionApis.enableLua: true才能启用。未启用时,Lua策略即使Accepted也不会生效。这是安全默认,因为Lua在Envoy进程内执行无强沙箱。注意disableLua已废弃,与enableLua互斥。

xDS 布局变化导致旧补丁失效

v1.9.0中,JWT provider名称改为稳定名、shared限流规则移至typedPerFilterConfig、Lua过滤器移至listener级,这些变化会使按旧键编写的EnvoyPatchPolicy静默失效。升级后需检查补丁是否仍匹配新资源名,否则即使策略Programmed,补丁也可能打空。

Q&A

Envoy Gateway v1.9.0 中五类策略分别编译到哪一层?

SecurityPolicy、EnvoyExtensionPolicy 编译到 XdsIR 的 HTTP 安全过滤器(HCM 链);BackendTrafficPolicy 跨 RDS 路由动作与 CDS cluster;ClientTrafficPolicy 编译到 XdsIR 的 listener/下游连接选项(LDS);EnvoyPatchPolicy 直接作用于生成的 xDS 资源。

mergeType 在 Envoy Gateway v1.9.0 中允许设置在哪些资源上?挂到父资源会怎样?

mergeType 仅允许设置在 xRoute 上(如 HTTPRoute、GRPCRoute、TCPRoute 等),挂到 Gateway、ListenerSet 等父资源会被 admission 拒绝。

Envoy Gateway v1.9.0 中 Lua 扩展默认是开启还是关闭?如何启用?

Lua 扩展默认关闭,需要在 EnvoyGateway 配置中设置 extensionApis.enableLua: true 才能启用。

Envoy Gateway v1.9.0 中 JWT 稳定名变化对 EnvoyPatchPolicy 有什么影响?

JWT provider/requirement 名称改为内容派生的稳定名,旧补丁若按路由派生的名称匹配会失效,导致补丁打空。

在 Envoy Gateway v1.9.0 中,如果策略未生效,应该从哪些方面排查?

先定位是 admission 拒绝、IR 覆盖还是补丁错位。例如:kubectl 被拒可能是 mergeType 挂父资源;Lua 无副作用可能是未启用 enableLua;对象 Accepted 但无 JWT/限流可能是最具体者获胜覆盖父策略;策略与 Patch 都 Programmed 但行为旧可能是 xDS 布局变化。

Envoy Gateway v1.9.0 中 BackendTrafficPolicy 的 mergeType 允许设置在哪些资源上?

BackendTrafficPolicy 的 mergeType 允许设置在 HTTPRoute、GRPCRoute、TCPRoute、UDPRoute、TLSRoute 上,挂到 Gateway、ListenerSet 等父资源会被拒绝。

Envoy Gateway v1.9.0 中 ClientTrafficPolicy 可以挂到哪些资源上?

ClientTrafficPolicy 只能挂到 Gateway 和 ListenerSet(均可带 sectionName),不能挂到 HTTPRoute 等路由资源。

Envoy Gateway v1.9.0 中 EnvoyPatchPolicy 默认是否开启?如何启用?

EnvoyPatchPolicy 默认关闭,需要设置 extensionApis.enableEnvoyPatchPolicy: true 才能启用。

🏷️

标签

➡️

继续阅读