首页 > 解决方案 > 为 AWS Application Load Balancer 使用静态 ip

问题描述

我们的要求是

  1. 将静态 IP 分配给 ALB,因为我们的许多客户已将其列入防火墙白名单。
  2. X-Forwarded-For HTTP 标头应该包含客户端 IP 地址,因为我们有一个类似https://www.whatismyip.com/的服务正在运行,我们的数千个 IOT 设备已经在使用它。

尝试了以下解决方案,但它没有执行 #2,我们在 X-FF https://aws.amazon.com/blogs/networking-and-content-delivery/using-static中看到内部 NLB ip 而不是客户端 IP -ip-addresses-for-application-load-balancers/

是否有任何负载均衡器可以执行 #1 和 #2,或者 AWS 可以根据要求实现这一点?任何帮助/指针表示赞赏,谢谢!

标签: amazon-web-servicesamazon-ec2load-balancingaws-application-load-balancer

解决方案


AWS Global Accelerator 允许您将区域资源(例如负载均衡器和 EC2 实例)关联到两个静态 IP 地址。

https://aws.amazon.com/global-accelerator/

最初,Global Accelerator 不保留客户端的 IP 地址,但随后的增强使这成为可能。

客户端 IP 地址保留

今天,我们宣布 AWS Global Accelerator 的一项重要新功能。如果您要将流量路由到 Application Load Balancer,则用户客户端的 IP 地址现在可用于在端点上运行的代码。

https://aws.amazon.com/blogs/aws/new-client-ip-address-preservation-for-aws-global-accelerator/

使用此功能, 的行为X-Forwarded-For是正确的,因为 ALB 看到了客户端 IP。

这也有可能提高端到端性能,因为从 Global Accelerator 分配给您的静态地址是从 Internet 路由到 AWS 边缘网络上的多个边缘站点(全球服务 CloudFront 和 Route 53 所在的位置) ,尽管 Global Accelerator 不直接使用这些服务中的任何一项;相比之下,其他一些边缘服务(如 S3 Transfer Acceleration 和“边缘优化”API Gateway 实际上在后台使用 CloudFront)。从边缘入口处,流量通过 AWS 光纤到达您的 ALB 区域,然后响应返回到边缘并传出到查看器,从而消除了公共 Internet 的一些可变性和变幻莫测。

对于那些熟悉网络和 NAT 通常如何工作(并且受到限制)的人来说,这种描述似乎是不可能的和/或魔法,但秘诀是通过称为 Hyperplane 的内部 AWS 服务与 VPC 网络互连,该服务还允许网络负载均衡器和 NAT 网关通过地址转换和有状态的流来发挥它们的魔力。

这是在 ALB 外部正确X-Forwarded-For处理静态 IPv4 地址的唯一官方方法,并且非常适合由于您无法控制的因素而对静态地址有不灵活要求的环境。

上面提到的“两个”静态地址是为了冗余。将分配两个。您并不严格需要同时使用它们,但最好是这样做。


推荐阅读