VPC 中的亚马逊 ELB

我们正在使用 AmazonEC2,并且我们希望将一个 ELB (负载均衡器)放到一个私有子网上的两个实例中。如果我们只是将私有子网添加到 ELB,它将不会得到任何连接,如果我们将两个子网都附加到 ELB,那么它可以访问实例,但它经常会得到超时。是否有人成功地在其 VPC 的私有子网内实现了 ELB?如果是这样的话,你能给我解释一下这个过程吗?

谢谢

37995 次浏览

我的队友和我刚刚在一个 VPC 中实现了 ELB,在不同的可用性区域中有两个私有子网。获得超时的原因是,对于添加到负载均衡器的每个子网,它都获得一个外部 IP 地址。(尝试“ dig elb-dns-name-here”,您将看到几个 IP 地址)。如果其中一个 IP 地址映射了一个私有子网,它将超时。映射到公共子网的 IP 将起作用。因为 DNS 可能会给你任何一个 IP 地址,有时它工作,有时它超时。

经过与亚马逊的一些来回,我们发现 ELB 应该只放置在“公共”子网,即子网有一个到互联网网关的路由。我们希望保持我们的网络服务器在我们的私人子网,但允许 ELB 与他们交谈。为了解决这个问题,我们必须确保每个可用性区域都有一个相应的公共子网,其中我们有私有子网。然后,我们向 ELB 添加了每个可用性区域的公共子网。

起初,这似乎没有工作,但在尝试了一切之后,我们重建了 ELB 和一切工作,因为它应该。我认为这是一个错误,或者 ELB 只是在一个奇怪的状态从这么多的变化。

我们或多或少是这样做的:

  1. WebServer-1 is running in PrivateSubnet-1 in availability zone us-east-1b with security group called web-server.
  2. WebServer-2在 PrivateSubnet-2中运行,位于可用性区 us-east-1c,安全组名为 web-server。
  3. Created a public subnet in zone us-east-1b, we'll call it PublicSubnet-1. We ensured that we associated the routing table that includes the route to the Internet Gateway (ig-xxxxx) with this new subnet. (If you used the wizard to create a public/private VPC, this route already exists.)
  4. 在我们东1c 区创建了一个公共子网,我们称之为公共子网2。我们确保将包含 Internet 网关(ig-xxxxx)路由的路由表与这个新的子网相关联。(如果使用向导创建公共/私有 VPC,则此路由已经存在。)
  5. Created a new ELB, adding to it PublicSubnet-1 and PublicSubnet-2 (not the PrivateSubnet-X). Also, picked the instances to run in the ELB, in this case WebServer-1 and WebServer-2. Made sure to assign a security group that allows incoming port 80 and 443. Lets call this group elb-group.
  6. 在 web-server 组中,允许来自 elb-group 的端口80和443的通信量。

我希望这能有所帮助!

我们已经在一个私有子网中实现了 ELB,所以所有 ELB 需要公有的说法并不完全正确。你确实需要一个 NAT。为私有 ELB 创建一个私有子网,打开 VPC DNS,然后确保私有路由表被配置为通过 NAT。子网安全组也需要设置,以允许通信之间的 ELB 和应用程序,应用程序到数据库子网。

由于无法到达负载平衡器,Bean}健康检查不会起作用,但是对于需要公众无法到达的服务来说,这是一个很好的折衷方案。

Suggested reading to get your VPC architecture started: http://blog.controlgroup.com/2013/10/14/guided-creation-of-cloudformation-templates-for-vpc/.

必须添加以下设置。

  1. 公共子网区域 b = 服务器 NAT
  2. 私有子网区域 c = 服务器 Web
  3. 公共子网区 c = ELB

关键在于路由:

  1. 连接到 NAT 的路由器与网关 A 相连。
  2. 到服务器 Web 的路由器连接到 NAT。
  3. 到公共子网的路由器连接网关 A。

ELB 详情:

1. 分区: 公共子网分区 c 2.Instance: Server Web 3. 安全组: 启用端口

Http://docs.amazonaws.cn/en_us/elasticloadbalancing/latest/developerguide/userscenariosforvpc.html

这里的关键是理解,您不是在向 ELB“添加子网/可用性区域”,而是指定将 ELB 实例放入哪些子网。

是的,ELB 是一个软件负载平衡器,当您创建 ELB 对象时,一个定制的负载平衡 EC2实例将被放入您指定的所有子网中。因此,为了使 ELB (它的实例)可访问,必须将它们放到通过 IGW 配置了默认路由的子网中(很可能您将这些子网归类为公共子网)。

So as already was answered above, you have to specify "public" networks for ELB, and those networks should be from the AZs where your EC2 instances are running. In this case ELB instances will be able to reach your EC2 instances (as long as security groups are configured correctly)