为 AWS 负载均衡器分配静态 IP 地址

Assigning Static IP Address to AWS Load Balancer

如何为 ELB 分配静态 IP 地址。好像不行。

有些在线文章要求创建 Route 53 记录,但这需要更改域的 CNAME,这也会重定向电子邮件流量。我只想更改 A 记录而不是 CNAME。

有些文章还提到我可以使用EC2实例作为反向代理。但是单个代理是否能够处理大量流量?

有什么解决办法吗?

AWS 的弹性负载均衡器实际上在两个层面上具有弹性,如下所述: http://shlomoswidler.com/2009/07/elastic-in-elastic-load-balancing-elb.html

第一层是负载均衡器本身。为了确保 ELB 可以扩展到您拥有的任何卷并突增到您突然遇到的任何卷,AWS 分配了一个 'static' DNS 主机名(例如 MyDomainELB-918273645.us-east-1.elb.amazonaws.com ).该主机名指向多个 IP 地址。您可以通过 运行

看到(从命令行)
$ host MyDomainELB-918273645.us-east-1.elb.amazonaws.com
MyDomainELB-918273645.us-east-1.elb.amazonaws.com 172.31.7.2
MyDomainELB-918273645.us-east-1.elb.amazonaws.com 172.31.11.33

ELB 中的第二种弹性形式显然是 ELB 将查询定向到池中的一个 EC2 实例。

因此,您可以看到,尝试为负载均衡器分配静态 IP 地址会弄巧成拙。

使用 EC2 实例作为反向代理似乎也会弄巧成拙,因为您会在进入 ELB 之前造成瓶颈。还不如创建自己的负载均衡器。

推荐的解决方案(您已经指出)是创建一个指向 ELB 主机名(不会更改)的 CNAME。

i.e. my-app.mycompany.com -> MyDomainELB-918273645.us-east-1.elb.amazonaws.com

这将允许您在域内的 ELB 后面集成可扩展的应用程序。

我不确定我是否完全理解为什么您不能在您的 DNS 中创建 CNAME 或者这与引导电子邮件流量有什么关系,您能解释一下吗?

A​​WS 中的一项新功能(我相信它是在 Re:Invent 2017 年宣布的)允许使用网络负载均衡器 (NLB) 的静态 IP。 NLB 只能处理第 4 层 (TCP) 而不能处理 HTTP 细节(第 7 层)。

您可以为每个可用区分配一个弹性 IP 地址。

有关详细信息,请参阅 AWS blog post or the NLB documentation

"Classic Load Balancer" 和 "Application Load Balancer" 不支持静态 IP。如果您只需要那些提供的功能,则必须回退到上述 CNAME 解决方案。

AWS 支持最近发布了一篇关于利用 NLB 为经典负载均衡器和应用程序负载均衡器提供静态 IP 的主题的博客 - https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/

post

描述的解决方案总结

We end up with a TCP listener on a NLB that accepts traffic and forwards it to an internal ALB. The ALB terminates TLS, examines HTTP headers, and routes requests based on your configured rules to target groups with your instances, servers, or containers. The AWS Lambda function keeps everything in sync by watching the ALB for IP address changes and updating the NLB target group. In the end we’ll have a few static IP addresses that are easy for whitelisting, and we won’t lose any of the benefits of ALB. Note that we will be sending all of the traffic through two load balancers

与网络负载均衡器不同,应用程序负载均衡器 (ALB) 不支持弹性 IP,但这还不是最糟糕的部分。如果您将 Route 53 与 ALB 一起使用,DNS 会自动将 TTL 设置为 60 秒。这似乎给我们的机构(主要是政府)客户 运行 旧 Windows DNS 服务器带来了问题。他们无法跟上 ALB 的监听器在如此短的时间内更改其 public-facing IP 的速度。较旧的 DNS 基础架构不遵守或无法处理这种激进的 TTL。

虽然我不喜欢它,但 AWS 建议在应用程序负载均衡器之前放置一个网络负载均衡器,根据此处:https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/

我发现设置 AWS Global Accelerator 非常直接和简单。它创建了 2 个静态 IP 地址和一个指向我的应用程序负载均衡器的静态 DNS。

配置全球加速器

  1. 将侦听器设置为 TCP 端口 80、443

  2. Select 您的负载均衡器端点 (AWS Global Accelerator Configuration)

  3. 为您的 dns 添加 cname 记录指向它创建的静态 dns (mywebsite.com > globalacceleratorDNS.com)。如果任何客户需要 白名单,给他们它创建的 2 个静态 IP

定价为每月 18 美元 + 每 GB 数据传输几美分。 我很确定它比 NLB、Nat 网关、弹性 IP 设置便宜。

https://docs.aws.amazon.com/global-accelerator/latest/dg/about-accelerators.html

对于小流量,设置 EC2 实例 运行 Nginx 作为转发代理可能是一个解决方案。

因此您可以使用 EC2 的静态 IP 地址转发解析 ALB 的 DNS 名称的流量。

然而,这是一种 hack,但使用 Global Accelerator 或 NLB 在我看来也像 hack :-)