Amazon web services 如何解析HAProxy配置中自定义路由的自定义代理协议v2头?

Amazon web services 如何解析HAProxy配置中自定义路由的自定义代理协议v2头?,amazon-web-services,haproxy,aws-vpc,proxy-protocol,Amazon Web Services,Haproxy,Aws Vpc,Proxy Protocol,如何解析PROXY protocol version 2标头并使用解析后的值来选择后端 具体来说,我正在使用启用代理v2的VPC PrivateLink端点从一个AWS帐户连接到另一个AWS帐户。这包括根据的端点ID 代理协议头还包括端点的ID。此信息使用自定义类型长度值(TLV)向量进行编码,如下所示 我的目标是从帐户1中的资源a连接到帐户2中的资源B。该计划是resource A->PrivateLink->NLB(启用代理v2)->HAProxy->resource B 我需要在HAPro

如何解析PROXY protocol version 2标头并使用解析后的值来选择后端

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

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

我的目标是从帐户1中的资源a连接到帐户2中的资源B。该计划是resource A->PrivateLink->NLB(启用代理v2)->HAProxy->resource B

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

我不能只使用源IP的原因:私有IP空间在我的体系结构中可能重叠。在上面的示例中,将有多个帐户充当帐户1,因此我必须基于端点ID而不是代理使用公开的源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
如果我们需要使用相同的IP为acctB的VPC路由连接,将无法区分

理想的 理想的解决方案是将其修改为以下内容(尽管我承认这是行不通的;它只是伪配置)


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

看起来AWS使用了中所述的“2.2.7.保留类型范围”,因此您需要自己解析此部分


这在lua是可能的,也许我还不是lua方面的专家;-)

我很难理解lua是从哪里来的。我看到了几种解析标头内容的方法,但没有看到如何将其合并到HAProxy配置中。代理协议在任何http标头之前,因此您需要查看是否可以拦截此步骤。我指的是代理标头,而不是http标头。似乎HAProxy应该能够提取TLV并在ACL中提供匹配。afaik没有一种获取方法。欢迎投稿。如果可能的话,我已经在haproxy的邮件列表上提出了要求。
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