【问题标题】:How do I use proxy protocol version 2 to get client's real IP address with AWS Network Load Balancer?如何使用代理协议版本 2 通过 AWS 网络负载均衡器获取客户端的真实 IP 地址?
【发布时间】:2021-02-03 19:46:18
【问题描述】:

目前,我们将请求通过 AWS 网络负载均衡器,然后传递到 AWS 应用程序负载均衡器。但是,我们正在尝试保留请求的原始 IP 地址,但这已被删除。我们正在尝试启用代理协议 v2,但这会导致错误。 AWS ALB 是否使用代理协议 v2?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 load load-balancing


    【解决方案1】:

    AWS ALB 是否使用代理协议 v2?

    不,它没有。代理协议仅适用于 NLB 和 CLB,因为它们在第 4 层运行(CLB 具有 TCP 侦听器)。ALB 是第 7 层,它使用X-Forwarded-For, X-Forwarded-Proto, and X-Forwarded-Port 来保存 IP 源信息。

    【讨论】:

    • 感谢您的回答!因此,如果我将流量从我的 NLB 转发到我的 ALB 并进入我的应用程序,我该如何保留 IP 源信息?
    • @devops54 如果您不想使用我在答案中列出的标题,那么我认为 ALB 没有其他方法。
    • 对不起,我不是说标题不好。相反,如何让标头从 Client-> NLB -> ALB 传播?如何让 NLB 传递将在 X-Forwarded-For 标头中的 IP?
    • @devops54 你不应该做任何事情。 ALB 添加它们。你试过了吗?
    • 是的,内部10.x 来自 NLB,而不是实际 IP 地址
    【解决方案2】:

    从本文档看来,您是在目标群体中进行的: https://docs.amazonaws.cn/en_us/elasticloadbalancing/latest/network/elb-ng.pdf

    具体来说: 使用新控制台启用代理协议 v2

    1. 打开 Amazon EC2 控制台https://console.amazonaws.cn/ec2/
    2. 在导航窗格的负载平衡下,选择目标组。
    3. 选择目标组的名称以打开其详细信息页面。
    4. 在“组详细信息”页面的“属性”部分中,选择“编辑”。
    5. 在编辑属性页面上,选择代理协议 v2。
    6. 选择保存更改。

    甚至通过脚本(取自https://docs.cloudbees.com/docs/cloudbees-ci/latest/eks-install-guide/eks-prerequisites-helm-install),例如:

    #!/bin/bash -eu
    export AWS_PAGER=""
    hostname=$(kubectl get -n ingress-nginx services ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    loadBalancerArn=$(aws elbv2 describe-load-balancers  --query "LoadBalancers[?DNSName==\`$hostname\`].LoadBalancerArn"  --output text)
    targetGroupsArn=$(aws elbv2 describe-target-groups --load-balancer-arn $loadBalancerArn --query TargetGroups[\*].TargetGroupArn --output text)
    for targetGroupArn in $targetGroupsArn; do
      aws elbv2 modify-target-group-attributes --target-group-arn $targetGroupArn --attributes Key=proxy_protocol_v2.enabled,Value=true --output text
    done
    

    【讨论】:

    • 问题不是如何启用,问题是当 NLB 配置为代理协议 v2 时,为什么 ALB 会中断流量。即,NLB 未设置为保留客户端 IP 地址(因为它们通过 IP 定位 ALB,因为很可能在不同的 VPC 中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2013-08-01
    • 2019-06-21
    • 1970-01-01
    • 2015-12-12
    • 2021-11-21
    相关资源
    最近更新 更多