Amazon web services 如何使用代理协议版本2通过AWS网络负载平衡器获取客户端的真实IP地址?

Amazon web services 如何使用代理协议版本2通过AWS网络负载平衡器获取客户端的真实IP地址?,amazon-web-services,amazon-ec2,load,load-balancing,Amazon Web Services,Amazon Ec2,Load,Load Balancing,目前,我们正在通过AWS网络负载平衡器将请求传递给AWS应用程序负载平衡器。然而,我们正试图保留请求的原始IP地址,但这被剥离了。我们正在尝试启用代理协议v2,但这会导致错误。AWS ALB是否使用代理协议v2 AWS ALB是否使用代理协议v2 不,没有。代理协议仅适用于NLB和CLB,因为它们在第4层中操作CLB和TCP侦听器。ALB是第7层,用于保存IP源信息。从本文档中可以看出,您是在目标组上执行此操作的: 具体而言: 使用新控制台启用代理协议v2 打开位于的Amazon EC2控制台

目前,我们正在通过AWS网络负载平衡器将请求传递给AWS应用程序负载平衡器。然而,我们正试图保留请求的原始IP地址,但这被剥离了。我们正在尝试启用代理协议v2,但这会导致错误。AWS ALB是否使用代理协议v2

AWS ALB是否使用代理协议v2


不,没有。代理协议仅适用于NLB和CLB,因为它们在第4层中操作CLB和TCP侦听器。ALB是第7层,用于保存IP源信息。

从本文档中可以看出,您是在目标组上执行此操作的:

具体而言: 使用新控制台启用代理协议v2

打开位于的Amazon EC2控制台。 在导航窗格的负载平衡下,选择目标组。 选择目标组的名称以打开其详细信息页面。 在“组详细信息”页面的“属性”部分中,选择“编辑”。 在“编辑属性”页面上,选择代理协议v2。 选择保存更改。 或者甚至通过从中提取的脚本,例如:


谢谢你的回答!因此,如果我将流量从NLB转发到ALB,然后再转发到我的应用程序中,我如何保存IP源信息?@devops54如果您不想使用我在回答中列出的标头,那么我认为ALB没有其他方法。对不起,我不是说标头不好。相反,如何从Client->NLB->ALB获取要传播的头文件?我怎样才能让NLB在IP上传递,而IP将位于X-Forwarded-For标头中?@devops54您不应该做任何事情。ALB添加了它们。你试过了吗?是的,一个内部的10.x从NLB而不是实际的IP地址传来
#!/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