我有一个场景,我需要通过像 HAProxy 或 nginx 这样的代理将 TCP 流量路由到一组动态的后端服务器(确切地说是 Kubernetes pod,但出于本文的目的,我们可以忽略它)。流量需要根据客户端在 TCP 有效负载中提供的密钥(称为routing_key )进行路由。
我看到 nginx 和 HAProxy 都支持一致的哈希。但是,根据我根据 HAProxy 的手册(参见“平衡”部分)可以看出,没有办法基于 TCP 有效负载执行一致的散列。基于负载的负载平衡似乎仅限于 L7 HTTP 参数,如 Header 和 URI 参数。这篇文章概述了一种基于与 TCP 有效负载匹配的字符串进行静态平衡的方法,但我的情况更加动态,因此更倾向于使用真正一致的散列方法。
Nginx 似乎提供了更多的灵活性,您可以将散列值设置为任意变量,如此处所示。这似乎适用于 L7(“后端”节)和 L4(“流”节)。但是,我对你是什么以及不允许对变量做什么有点模糊。有没有人有将变量设置为从 TCP 有效负载中提取的值并将其用于一致散列的示例?
最后的奖励问题:routing_key值实际上是一个 AES-GCM 加密值。代理服务器将有权访问用于解密此值的密钥。是否可以让 nginx 从 TCP 有效负载中获取路由密钥值,使用已知密钥对其进行解密,然后将其用于一致的散列?这会涉及创建一个 nginscript 模块吗?