将 Envoy 配置为二级代理

Envoy 是一个生产就绪的代理,但是,当在多级部署中使用 Envoy 作为“二级”代理时,可能需要调整专为边缘用例定制的默认设置。

../../_images/multilevel_deployment.svg

总之,如果您运行的是 1.11.1 或更高版本的二级 Envoy,并且终止了 HTTP/2 或更高版本,我们强烈建议您通过设置其下游的 HTTP 消息验证选项 为 true 来更改二级 Envoy 的 HttpConnectionManager 配置。

如果存在无效请求并且未设置此选项,则相关 Envoy 将重置整个连接。此行为已在 1.11.1 安全版本中更改,以提高边缘 Envoy 的安全性。不幸的是,由于无法保证边缘代理会像 Envoy 的堆栈那样严格地执行 HTTP 标准合规性,因此这会导致以下问题。如果一个客户端发送的请求通过了一级代理的验证检查,并且它被转发到上游多路复用连接(可能与其他客户端共享),则二级 Envoy 上的严格执行将重置该连接上的所有流,导致与共享该 L1-L2 连接的客户端的服务中断。如果恶意用户了解哪些流量将绕过一级检查,他们可以在一级机群中喷洒“不良”流量,从而对其他用户的流量造成严重中断。

此配置选项也对无效 HTTP/1.1 有一些影响,但影响略微不那么严重。对于 Envoy L1,无效的 HTTP/1 请求也会导致连接重置。如果该选项设置为 true,并且请求已完全读取,则连接将保持并可用于后续请求。