如何以高度可用的方式将静态 IP 地址与 Application Load Balancer 一起使用?

sea*_*ean 8 load-balancing amazon-web-services amazon-elastic-ip elastic-beanstalk

我正在监督客户的集成,他们的供应商需要将多个 IP 地址列入白名单。原始服务器是一个 Elastic Beanstalk 实例,由应用程序负载均衡器前置,并通过 Route53 进行所有调整。

这是行不通的,因为您无法根据定义为 Application Load Balancer 分配静态 IP(我确实需要第 7 层功能)。

我不能仅通过代码和额外的 EC2 实例将特定请求代理给供应商,因为这是一种双向集成。

我已经通读了这篇文章,但坦率地说,这似乎是一种黑客行为,而不是我在生产环境中会做的事情。

似乎我需要将 NLB 与 ALB 进行某种组合,但同样,参考文章介绍了大量移动部件。

编辑

  • 我正在使用 VPC
  • 实例本身位于私有子网中
  • ALB 位于公共子网中,并且都具有必要的路由来进行通信
  • 我几乎可以肯定我是在兜圈子想说服自己 Static IP !== Single Point of Failure

Mic*_*bot 10

目前只有一种方法可以将静态 IP 地址与 Application Load Balancer (ALB) 相关联——AWS Global Accelerator。

静态任播 IP – Global Accelerator 使用静态 IP 地址作为在任意数量的 AWS 区域中托管的应用程序的固定入口点。这些 IP 地址是来自 AWS 边缘站点的任播,这意味着这些 IP 地址是从多个 AWS 边缘站点公布的,从而使流量能够尽可能靠近您的用户进入 AWS 全球网络。您可以将这些地址与区域 AWS 资源或终端节点相关联,例如网络负载均衡器、应用程序负载均衡器和弹性 IP 地址。在修改或替换端点时,您无需进行任何面向客户端的更改或更新 DNS 记录。

https://aws.amazon.com/blogs/aws/new-aws-global-accelerator-for-availability-and-performance/

Global Accelerator 从两个网络区¹ 分配两个静态 IP,这些 IP 是您的部署所独有的——不共享。这些是通过 AWS 边缘网络(CloudFront、Route 53 和 S3 Transfer Acceleration 均在同一网络运行的同一网络)上多个位置的对等连接发布到 Internet 上的——它有更多的存在点,而不仅仅是 AWS 区域和 AWS - 与区域的管理光纤连接)。然后,您将端点(ALB、NLB、EIP 或 EC2 实例(无 EIP))与 Global Accelerator 实例相关联,来自请求到达的边缘位置的流量通过 NAT 传输到您的平衡器。

Global Accelerator 最初推出时,是依靠Source NAT 将全局地址绑定到VPC 设备,因此您无法使用客户端源IP 或X-Forwarded-For来自ALB的标头来实时确定客户端IP 地址;但是,这已经发生了变化——X-Forwarded-For现在在大多数 AWS 区域将 ALB 与 Global Accelerator一起使用时,可以正确识别客户端 IP 地址。

客户端 IP 地址保留在端点是 ALB 或 EC2 实例(没有 EIP)时有效。它不适用于 EIP 端点或网络负载均衡器;对于这些情况,您只能稍后使用流日志将它们相互关联,流日志会捕获源/目标元组以及您的应用程序将看到的中间 NAT 地址。


重要的是,ALB 仅是入站的(连接只会从外到内建立,而不管数据传输的最终方向如何),因此如果您的服务器也在启动连接,则您需要一个单独的静态源地址解决方案——NAT网关

每个可用区有一个 NAT 网关,放置在公共子网中,可以作为可用区内一个或多个私有子网的默认网关,以便这些子网上的所有实例在联系 Internet 时都使用相同的源 IP。NAT 网关不是物理位置的黑匣子——它是网络基础设施的一个特性,因此它本质上是故障安全的,不被视为单个可用区内的单点故障。您可以跨可用区共享单个 NAT 网关,但是如果在该可用区中发生灾难性事件,您确实会出现单点故障(并且与放置一个每个可用区中的 NAT 网关)。NAT 网关不需要更改应用程序,因为它不是代理——它' sa 网络地址转换器,对于位于配置为使用它的子网上的实例是透明的。每个 NAT 网关都有一个静态 EIP。


¹网络区域新的 AWS 术语,随 Global Accelerator 引入。它描述了两个 IP 地址在内部由不同的基础设施处理的事实。


小智 5

这是令人沮丧的,因为没有好的方法可以做到这一点,特别是如果您正在为网站提供服务并且想知道谁访问您的网站,

选项 1:AWS Global Accelerator - 可以使用,但会剥离客户端 IP,因此您无法了解人们来自哪里。

选项 2:这个非常晦涩的方法: https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/ 简而言之,需要 ELB以及 ALB 等,它们会破坏流程中的某些功能并需要采取严厉的方法。

截至 2019 年 5 月,这些是实现这一目标的主要方法。