【Envoy Gateway】L4 路由:不升 v1.6 CRDs,TCP/UDP 会静默消失
内容提要
Envoy Gateway v1.9.0 升级后,若未安装 Gateway API v1.6 CRDs,TCPRoute/UDPRoute 会被静默跳过,不返回错误提示。v1.6 起这些路由为 Standard v1,standard channel 中 v1alpha2 不再服务,清单需改用 v1。失败表现为无流量或连接失败,应先检查 CRD 版本与 channel。
延伸解读
静默跳过的本质:控制器不报错,流量直接消失
升级 Envoy Gateway 到 v1.9.0 后,如果 Gateway API CRDs 未同步升级到 v1.6,TCPRoute/UDPRoute 会被静默跳过,不会返回 HTTP 500,控制器也不保证弹出错误提醒。这是因为控制器只 watch v1 版本的资源,旧 CRD 下对象根本不会进入 informer,翻译输入集为空。排障时不能依赖错误事件,而应主动检查 CRD 版本和 channel。
standard 与 experimental channel 的差异:v1al
Gateway API v1.6.1 的 standard channel 中,TCPRoute/UDPRoute 的 v1alpha2 版本已不再 served(served: false),而 experimental channel 仍服务 v1alpha2。因此,如果使用 standard channel,清单必须改用 v1;若仍写 v1alpha2,apiserver 会直接拒绝。发行说明中“both versions are served”仅适用于 experimental channel,升级时需根据
升级检查清单:先查 CRD,再查流量
升级后若 TCP/UDP 入口无流量,不要先查 HTTP 状态码,而应依次检查:CRD 是否已升级到 v1.6.x 且 v1 版本 served;清单 apiVersion 是否已改为 v1;存储版本是否已迁移到 v1(避免未来删除 v1alpha2 时被硬挡)。同时注意,同集群 HTTPRoute 正常工作不代表 L4 路由也被 reconcile,因为两者 watch 的 API 版本不同。
Q&A
Envoy Gateway v1.9.0 升级后,如果未安装 Gateway API v1.6 CRDs,TCPRoute 和 UDPRoute 会怎样?
如果未安装 v1.6 CRDs,TCPRoute 和 UDPRoute 会被静默跳过,不会返回错误提示,表现为无流量或连接失败。
Gateway API v1.6 中 TCPRoute 和 UDPRoute 的 API 版本是什么?
Gateway API v1.6 中 TCPRoute 和 UDPRoute 已进入 Standard,API 版本为 gateway.networking.k8s.io/v1,v1alpha2 已弃用。
在 standard channel 的 v1.6.1 CRD 中,v1alpha2 是否仍然被服务?
在 standard channel 的 v1.6.1 CRD 中,v1alpha2 的 served 为 false,即不再被服务,清单必须改用 v1。
Envoy Gateway v1.9 只 reconcile 哪个版本的 TCPRoute/UDPRoute?
Envoy Gateway v1.9 只 reconcile gateway.networking.k8s.io/v1 版本的 TCPRoute/UDPRoute。
TCPRoute 和 UDPRoute 在 v1.6 中进入 Standard 后,v1alpha2 清单是否还能继续使用?
在 experimental channel 中,v1alpha2 仍可 apply,但存储版本为 v1;在 standard channel 中,v1alpha2 不再被服务,清单必须改为 v1。
当 TCPRoute 未翻译时,客户端会看到什么现象?
客户端会看到连接失败、超时、RST,或端口通了但协议无响应;UDP 报文可能直接消失,没有 TCP 握手可抓。
升级 Envoy Gateway 到 v1.9 后,检查清单的第一项应该是什么?
检查 Gateway API CRDs 是否已升级到 v1.6.x,并确认 TCPRoute/UDPRoute 的 v1 版本是否 served。
TLSRoute 在 v1.6 中的 API 版本是什么?
TLSRoute 自 v1.5.0 起已在 Standard,API 版本为 gateway.networking.k8s.io/v1。