1

如何解析 PROXY 协议版本 2 标头并使用解析的值来选择后端?

具体来说,我正在使用启用了 PROXY v2 的 VPC PrivateLink 端点从一个 AWS 账户连接到另一个账户。这包括根据文档的端点 ID 。

代理协议标头还包括端点的 ID。此信息使用自定义类型-长度-值 (TLV) 向量进行编码,如下所示。

我的目标是从账户 1 中的资源 A 连接到账户 2 中的资源 B。计划是资源 A -> PrivateLink -> NLB(启用 PROXY v2)-> HAProxy -> 资源 B。

我需要在 HAProxy 前端检测 VPC PrivateLink 端点 ID 以选择正确的后端。如何才能做到这一点?我不清楚如何在 HAProxy 配置中调用自定义解析器,或者这是否可能?是吗?如果是这样,如何做到这一点?

我不能只使用源 IP 的原因:私有 IP 空间可能在我的架构中重叠。在上面的示例中,将有多个帐户充当帐户 1,因此我必须根据端点 ID 而不是 PROXY 使用暴露的源 IP 进行目标路由。

例子

不好

这是我们目前的情况。在其中,无法区分来自不同 VPC 的具有相同私有 IP 地址空间的两个入站连接。

frontend salt_4506_acctA_front
        bind 10.0.1.32:4506 accept-proxy
        mode tcp
        default_backend salt_4506_acctA_back

backend salt_4506_acctA_back
        balance roundrobin
        mode tcp
        server salt-master-ecs 192.168.0.88:32768

如果我们需要为 acctB 的 VPC 使用相同的 IP 路由连接,则无法区分。

理想的

一个理想的解决方案是将其修改为以下内容(尽管我认识到这不起作用;它只是伪配置)。

frontend salt_4506_acctA_front
        bind *:4506 accept-proxy if endpointID == vpce-xxxxxxx1
        mode tcp
        default_backend salt_4506_acctA_back

backend salt_4506_acctA_back
        balance roundrobin
        mode tcp
        server salt-master-ecs 192.168.0.88:32768

基于端点 ID 的目的地路由的任何其他替代 HAProxy 的选项也是可以接受的,但 HAProxy 似乎是显而易见的候选者。

4

1 回答 1

1

看起来 AWS 使用https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt中描述的“2.2.7。保留类型范围”,因此您需要自己解析这部分。

这在 lua 中是可能的,也许我不是 lua 专家,但是 ;-)

于 2018-01-11T11:25:56.880 回答