内部和面向 Internet 的 Elastic Load Balancing
Elastic Load Balancing both internal and internet-facing
我们正尝试在 AWS 中使用 Elastic Load Balancing 自动缩放,以便我们可以根据需要进行缩放。
我们的应用程序由几个较小的应用程序组成,它们都在同一个子网和同一个 VPC 上。
我们想将我们的 ELB 放在我们的一个应用程序和其他应用程序之间。
问题是我们希望负载平衡器在使用 API 的不同应用程序之间 内部 和 面向互联网[=29] 工作=] 因为我们的应用程序仍然有一些用法应该在外部完成,而不是通过 API.
我读过这个 question 但我无法从那里弄清楚如何去做,它没有真正指定任何步骤或者我可能理解得很好。
我们可以同时拥有内部和外部的 ELB 吗?
郑重声明,我只能通过 VPN 访问此网络。
弹性负载均衡器不可能同时拥有 public IP 地址和私有 IP 地址。这是一个或另一个,但不是两个。
如果你想让你的ELB有一个私有IP地址,那么它就不能监听来自互联网的请求。
如果您的 ELB 面向 public,您仍然可以使用 public 端点从内部 EC2 实例调用它。但是,有一些注意事项:
- 流量将退出您的 VPC 并重新进入。私有 IP 地址不会为您提供实例到 ELB 的直接连接。
- 您也不能在安全组规则中使用安全组。
有 3 种备选方案:
- 复制 ELB 和 EC2 实例,一个专用于私有流量,一个专用于 public 流量。
- 有 2 个共享相同后端 EC2 实例的 ELB(一个 public,一个私有)。
- 不要将 ELB 用于私有或 public 流量,而是在单个 EC2 上使用弹性 IP 地址(如果 public)或私有 IP 地址(如果私有)实例.
我不同意@MattHouser 的回答。实际上,在 VPC 中,您的 ELB 的所有内部接口都列在具有 Public IP 和主要私有 IP 的网络接口中。
我已经测试了我的 public ELB 的私有 IP,它的工作方式与外部 IP 完全一样。
问题是:这些 IP 没有像私有 ELB DNS 那样以最新的方式在任何地方列出。所以你必须自己做。
我为此制作了一个小的 POC 脚本,其中包含一个内部 Route53 托管区域:https://gist.github.com/darylounet/3c6253c60b7dc52da927b80a0ae8d428
标准的 AWS 解决方案是为此设置一个额外的内部 ELB。
看起来 @DaryL 有一个有趣的解决方法,但如果 DNS 未更新,它可能会失败 5 分钟。也没有办法为内部 IP 设置单独的安全组,因为它们共享 ELB 的 ENI 和外部 IP 的安全性。
我遇到了同样的挑战,我可以确认目前最好的解决方案是拥有两个不同的 ALB,一个面向 Internet,另一个在内部。您可以将两个 ALB 附加到一个 AutoScaling 组,以便您可以访问同一个集群。
确保两个 ALB 的网络选项(子网、安全组)相同,以便两者访问相同的集群实例。 Autoscaling 和 Launch Configuration 可与连接到同一 AutoSacling 组的两个 ALB 无缝协作。这也适用于从 ElasticBeanstalk 环境创建的 ALB。
我创建了一个 Lambda 函数来检查哪些私有 IP 被设置为负载均衡器,并在它发生变化时更新 Route53 记录:https://github.com/Bramzor/lambda-sync-private-elb-ips
使用该功能,您可以轻松将ELB用于私网流量。我个人使用它通过 VPC 区域间对等互连将多个区域相互连接,而无需额外的 ELB。
我们正尝试在 AWS 中使用 Elastic Load Balancing 自动缩放,以便我们可以根据需要进行缩放。
我们的应用程序由几个较小的应用程序组成,它们都在同一个子网和同一个 VPC 上。
我们想将我们的 ELB 放在我们的一个应用程序和其他应用程序之间。
问题是我们希望负载平衡器在使用 API 的不同应用程序之间 内部 和 面向互联网[=29] 工作=] 因为我们的应用程序仍然有一些用法应该在外部完成,而不是通过 API.
我读过这个 question 但我无法从那里弄清楚如何去做,它没有真正指定任何步骤或者我可能理解得很好。
我们可以同时拥有内部和外部的 ELB 吗?
郑重声明,我只能通过 VPN 访问此网络。
弹性负载均衡器不可能同时拥有 public IP 地址和私有 IP 地址。这是一个或另一个,但不是两个。
如果你想让你的ELB有一个私有IP地址,那么它就不能监听来自互联网的请求。
如果您的 ELB 面向 public,您仍然可以使用 public 端点从内部 EC2 实例调用它。但是,有一些注意事项:
- 流量将退出您的 VPC 并重新进入。私有 IP 地址不会为您提供实例到 ELB 的直接连接。
- 您也不能在安全组规则中使用安全组。
有 3 种备选方案:
- 复制 ELB 和 EC2 实例,一个专用于私有流量,一个专用于 public 流量。
- 有 2 个共享相同后端 EC2 实例的 ELB(一个 public,一个私有)。
- 不要将 ELB 用于私有或 public 流量,而是在单个 EC2 上使用弹性 IP 地址(如果 public)或私有 IP 地址(如果私有)实例.
我不同意@MattHouser 的回答。实际上,在 VPC 中,您的 ELB 的所有内部接口都列在具有 Public IP 和主要私有 IP 的网络接口中。 我已经测试了我的 public ELB 的私有 IP,它的工作方式与外部 IP 完全一样。
问题是:这些 IP 没有像私有 ELB DNS 那样以最新的方式在任何地方列出。所以你必须自己做。
我为此制作了一个小的 POC 脚本,其中包含一个内部 Route53 托管区域:https://gist.github.com/darylounet/3c6253c60b7dc52da927b80a0ae8d428
标准的 AWS 解决方案是为此设置一个额外的内部 ELB。 看起来 @DaryL 有一个有趣的解决方法,但如果 DNS 未更新,它可能会失败 5 分钟。也没有办法为内部 IP 设置单独的安全组,因为它们共享 ELB 的 ENI 和外部 IP 的安全性。
我遇到了同样的挑战,我可以确认目前最好的解决方案是拥有两个不同的 ALB,一个面向 Internet,另一个在内部。您可以将两个 ALB 附加到一个 AutoScaling 组,以便您可以访问同一个集群。
确保两个 ALB 的网络选项(子网、安全组)相同,以便两者访问相同的集群实例。 Autoscaling 和 Launch Configuration 可与连接到同一 AutoSacling 组的两个 ALB 无缝协作。这也适用于从 ElasticBeanstalk 环境创建的 ALB。
我创建了一个 Lambda 函数来检查哪些私有 IP 被设置为负载均衡器,并在它发生变化时更新 Route53 记录:https://github.com/Bramzor/lambda-sync-private-elb-ips
使用该功能,您可以轻松将ELB用于私网流量。我个人使用它通过 VPC 区域间对等互连将多个区域相互连接,而无需额外的 ELB。