【Envoy Gateway】TLS / BackendTLSPolicy / SDS:两层证书与 v1.9 破坏面

💡 原文中文,约10600字,阅读约需26分钟。
📝

内容提要

本文介绍Envoy Gateway v1.9.0的TLS与SDS机制。核心内容:Gateway listener终止客户端TLS,BackendTLSPolicy管理到后端的上游TLS,两者使用不同证书。v1.9破坏性变更包括:SDS URL必须带unix://前缀,系统CA改为共享system_ca_certificates secret,旧EnvoyPatchPolicy匹配的secret/cluster名失效。升级前需检查patch配置,避免静默失配。

🔎

延伸解读

两层 TLS 的职责分离

文章强调,南北向 TLS 实际包含两层:客户端到 Envoy 的 listener 终止,以及 Envoy 到后端的再加密。这两层使用完全不同的证书、CA 和发现方式。listener 证书由 Gateway 的 tls.certificateRefs 管理,而 BackendTLSPolicy 负责上游 TLS 的校验与 SNI 设置。理解这种分离有助于在排障时正确定位问题,避免将 listener 证书问题与后端 CA 问题混为一谈。

v1.9 升级的破坏性变更

v1.9.0 引入了多项破坏性变更:SDS URL 必须带 unix:// 前缀,系统 CA 改为共享的 system_ca_certificates secret,旧 EnvoyPatchPolicy 匹配的 secret/cluster 名失效。升级前必须检查现有 patch 配置,否则可能出现静默失配,表现为策略写了不生效,但控制面仍显示已推送。建议通过 EnvoyPatchPolicy status 或生成配置对账,而不是仅依赖 Gateway Programmed 状态。

共享系统 CA 的权衡

v1.9 默认将 WellKnownCACertificates: System 的 CA 共享为单一 SDS secret,以减少 inotify watch 数量。但这也意味着任何策略的 CA 更新都可能触发全局 warming,升级期间可能短暂中断。若需要隔离变更半径,可开启 PerResourceSystemCASecret 恢复旧行为,但定制 CA 应使用 CACertificateRefs,而非 patch 共享 secret。

Q&A

Envoy Gateway v1.9.0 中,Gateway listener 终止客户端 TLS 和 BackendTLSPolicy 管理的后端 TLS 有什么区别?

Gateway listener 终止客户端 TLS,使用 tls.certificateRefs 指定的证书,负责客户端到 Envoy 的加密;BackendTLSPolicy 管理 Envoy 到后端的上游 TLS,用于网关校验后端证书并设置 SNI。两者使用不同的证书和 CA,是两层独立的 TLS 配置。

Envoy Gateway v1.9.0 中,外部 SDS 的 URL 格式有什么破坏性变更?

v1.9.0 要求 SDS 引用 secret 的 url 必须带 unix:// 前缀,例如 unix:///var/run/secrets/workload-spiffe-uds/socket。v1.9.0-rc.0 曾接受裸文件系统路径,但正式版拒绝。

Envoy Gateway v1.9.0 中,系统 CA 的 secret 名称有什么变化?

v1.9.0 将所有使用 WellKnownCACertificates: System 的 BackendTLSPolicy 和 Backend 改为共享一个名为 system_ca_certificates 的 SDS secret,不再为每个资源生成 per-resource 的 secret(如 / -ca)。

Envoy Gateway v1.9.0 升级后,EnvoyPatchPolicy 匹配旧 secret 或 cluster 名会有什么影响?

升级后,如果 EnvoyPatchPolicy 匹配的是旧格式的 SDS cluster 名(如由 UDS 路径直接派生、无 hash 后缀)或旧的 per-resource 系统 CA secret 名,将不再命中,导致 patch 静默失效,表现为策略不生效但控制面仍推送成功。

Envoy Gateway v1.9.0 中,如何启用外部 SDS 来获取 listener 证书?

需要在 EnvoyGateway 配置中打开 extensionApis.enableSDSSecretRef,并创建一个类型为 gateway.envoyproxy.io/sds 的 Secret,其 stringData 包含 url(带 unix:// 前缀)和 secretName。同时需要通过 EnvoyProxy patch 将 UDS 挂载到 Envoy Pod。

Envoy Gateway v1.9.0 中,BackendTLSPolicy 的 CA 校验材料有哪些限制?

BackendTLSPolicy 的校验材料只能二选一:caCertificateRefs(引用同命名空间对象)或 wellKnownCACertificates: System(使用系统 CA)。不能同时指定。hostname 不允许 IP 和通配符。

Envoy Gateway v1.9.0 中,如果多个 HTTPS listener 共享同一端口,SDS 证书对 HTTP/2 有什么影响?

当多个合法 HTTPS listener 共享端口时,SDS 支持的 listener 默认使用 HTTP/1.1,以避免 HTTP/2 coalescing 问题。如果 SDS listener 省略 hostname(匹配所有主机),同端口所有合法 HTTPS listener 都会降级到 HTTP/1.1。单独一条 SDS listener 仍保留 HTTP/2。

🏷️

标签

➡️

继续阅读