VPC中的Amazon ELB

Kev*_*ock 71 amazon-ec2 vpc amazon-web-services amazon-elb amazon-vpc

我们正在使用Amazon EC2,我们希望将ELB(负载均衡器)放在私有子网上的2个实例上.如果我们只是将私有子网添加到ELB,它将不会获得任何连接,如果我们将两个子网连接到ELB然后它可以访问实例,但它通常会超时.有没有人在他们的VPC私有子网内成功实施ELB?如果是这样,你能解释一下这个程序吗?

谢谢

小智 183

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

在与亚马逊进行一些来回之后,我们发现ELB应该只放在"公共"子网中,即具有到Internet网关的路由的子网.我们希望将我们的Web服务器保留在私有子网中,但允许ELB与它们通信.为了解决这个问题,我们必须确保我们拥有私有子网的每个可用区域都有相应的公有子网.然后,我们向ELB添加了每个可用区的公共子网.

起初,这似乎不起作用,但在尝试了一切后,我们重新创建了ELB,一切都按预期工作.我认为这是一个错误,或者ELB只是因为这么多的改变而处于一种奇怪的状态.

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

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

我希望有所帮助!

  • 我很遗憾我只有一个赞成.谢谢!在过去的两个小时里,我正试图将头撞到墙上. (5认同)
  • 如果我可以百万次投票,我愿意.谢谢你这么! (2认同)

RSH*_*RSH 16

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

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

因此,正如上面已经回答的那样,您必须为ELB指定"公共"网络,并且这些网络应该来自运行EC2实例的AZ.在这种情况下,ELB实例将能够访问您的EC2实例(只要正确配置了安全组)


小智 5

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

Beanstalk 运行状况检查将无法工作,因为它们无法到达负载均衡器,但对于需要不在公共范围内的服务,这是一个很好的折衷方案。

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