2012-02-13 52 views
63

我们正在使用Amazon EC2,并且我们希望将ELB(负载平衡器)放在私有子网上的两个实例中。如果我们只是将私有子网添加到ELB,那么它将不会获得任何连接,如果我们将两个子网都连接到ELB,那么它可以访问这些实例,但它往往会得到超时。是否有人在其VPC的私有子网内成功实施了ELB?如果是这样,你可以向我解释一下程序吗?VPC中的Amazon ELB

感谢

回答

164

我的队友和我已经实现ELB的VPC在不同可用性区域2个私人子网。获取超时的原因是,您为每个添加到负载均衡器的子网获取一个外部IP地址。 (尝试'挖掘elb-dns-name-here',你会看到几个IP地址)。如果其中一个IP地址映射一个私有子网,它将超时。映射到您的公有子网的IP将起作用。由于DNS可能会给你任何一个IP地址,有时它可以工作,有时会超时。

经过一番与亚马逊的来回之后,我们发现ELB应该只放置在'公共'子网中,即具有到Internet网关的路由的子网。我们希望将我们的Web服务器保留在我们的私有子网中,但允许ELB与他们交谈。为了解决这个问题,我们必须确保我们有一个相应的公有子网,用于我们拥有私有子网的每个可用区域。然后,我们向ELB添加了每个可用区域的公有子网。

起初,这似乎不起作用,但在尝试了一切之后,我们重新创建了ELB,并且所有事情都按照原样进行了。我认为这是一个错误,或者ELB由于许多变化而处于一种奇怪的状态。

这里或多或少我们所做的事情:

  1. 的WebServer-1在PrivateSubnet-1在可用区美东-1B与安全组,也就是Web服务器上运行。
  2. WebServer-2在可用区us-east-1c的PrivateSubnet-2中运行,并带有名为web-server的安全组。
  3. 在us-east-1b区域创建一个公共子网,我们称之为PublicSubnet-1。我们确保将包含到因特网网关(ig-xxxxx)的路由的路由表与这个新的子网相关联。 (如果您使用向导创建公共/私有VPC,则此路由已存在。)
  4. 在区域us-east-1c中创建公有子网,我们将其称为PublicSubnet-2。我们确保将包含到因特网网关(ig-xxxxx)的路由的路由表与这个新的子网相关联。 (如果您使用该向导创建公共/专用VPC,则此路线已存在。)
  5. 创建新的ELB,并添加到PublicSubnet-1和PublicSubnet-2(不是PrivateSubnet-X)。另外,选择要在ELB中运行的实例,在这种情况下是WebServer-1和WebServer-2。确保分配一个允许传入端口80和443的安全组。我们称这个组为elb-group。
  6. 在Web服务器组中,允许来自elb组的端口80和443的流量。

我希望有帮助!

+0

是的,我们得出了同样的结论,我只是忘了更新它。感谢您的答案:) – 2012-03-25 02:20:53

+1

这是一个很好的相关信息的来源: https://forums.aws.amazon.com/thread.jspa?messageID=453594񮯚 – 2013-05-22 15:03:43

+4

我很遗憾,我只有一个upvote给。谢谢!试图弄清楚这一点,我在最后2个小时里把头靠在墙上。 – Cfreak 2013-06-21 05:34:55

2

我们在私人子网中实施了ELB,所以ELB需要公开的声明并不完全正确。你确实需要一个NAT。为私有ELB创建私有子网,打开VPC DNS,然后确保私有路由表配置为通过NAT。还需要设置子网安全组,以允许ELB与App之间以及App与数据库子网之间的通信。

Beanstalk健康检查将无法正常工作,因为它们无法到达负载均衡器,但对于需要在公众范围之外的服务,这是一个很好的折衷方案。

建议阅读以启动您的VPC架构:http://blog.controlgroup.com/2013/10/14/guided-creation-of-cloudformation-templates-for-vpc/

2

您必须添加以下设置。

  1. 公共子网范围b =服务器NAT
  2. 专用子网区C =服务器Web
  3. 公共子网区C = ELB

诀窍是路由:

  1. 的路由器到NAT与网关A连接。
  2. 到Server Web的路由器连接到NAT 。
  3. 路由器公共子网与网关A.附上

ELB细节:

1.Zone:公共子网C区 2.Instance:服务器Web 3.Security组:启用端口

http://docs.amazonaws.cn/en_us/ElasticLoadBalancing/latest/DeveloperGuide/UserScenariosForVPC.html

+0

我还发现这些说明很有用:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2 – BatteryAcid 2017-03-03 05:43:44

9

这里的关键是理解,你是不是“添加子网/可用性区域”,以ELB,而是指定什么子网把ELB实例进入。

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

因此,如上所述,您必须为ELB指定“公共”网络,并且这些网络应该来自您的EC2实例正在运行的AZ。在这种情况下,ELB实例将能够到达您的EC2实例(只要安全组配置正确)

+0

您在第一句话中提出了一个重要观点。 AWS控制台在这方面并不直观。如果您在公有子网中部署ELB,那么当您没有从您的私有子网中看到EC2实例时,会导致人们相信您做错了什么。 – 2016-02-13 21:31:01