如何解析 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 似乎是显而易见的候选者。