首页 > 解决方案 > 如何使用代理协议版本 2 通过 AWS 网络负载均衡器获取客户端的真实 IP 地址?

问题描述

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

标签: amazon-web-servicesamazon-ec2loadload-balancing

解决方案


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

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

  1. 在https://console.amazonaws.cn/ec2/打开 Amazon 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

推荐阅读