VPC 中的 Amazon ELB
Posted
技术标签:
【中文标题】VPC 中的 Amazon ELB【英文标题】:Amazon ELB in VPC 【发布时间】:2012-03-04 16:15:29 【问题描述】:我们正在使用 Amazon EC2,我们希望将 ELB(负载均衡器)放置到私有子网上的 2 个实例。如果我们只是将私有子网添加到 ELB,它不会获得任何连接,如果我们将两个子网都附加到 ELB,那么它可以访问实例,但它通常会超时。是否有人在其 VPC 的私有子网中成功实施了 ELB?如果是这样,您能否向我解释一下程序?
谢谢
【问题讨论】:
【参考方案1】:这里的关键是理解,您不是向 ELB “添加子网/可用区”,而是指定将 ELB 实例放入哪些子网。
是的,ELB 是一个软件负载均衡器,当您创建 ELB 对象时,一个自定义负载均衡 EC2 实例会放入您指定的所有子网中。因此,要访问 ELB(其实例),必须将它们放入具有通过 IGW 配置的默认路由的子网中(很可能您将这些子网归类为公共子网)。
正如上面已经回答的那样,您必须为 ELB 指定“公共”网络,这些网络应该来自运行您的 EC2 实例的可用区。在这种情况下,ELB 实例将能够访问您的 EC2 实例(只要安全组配置正确)
【讨论】:
您在第一句话中提出了重要的观点。 AWS 控制台在这方面并不直观。如果您将 ELB 部署在公有子网中,那么当您在私有子网中看不到 EC2 实例时,就会让人相信您做错了什么。【参考方案2】:您必须添加以下设置。
-
公共子网区域 b = 服务器 NAT
私有子网区域 c = 服务器 Web
公共子网区域 c = ELB
诀窍是路由:
-
到 NAT 的路由器连接到网关 A。
到服务器 Web 的路由器连接到 NAT。
到公共子网的路由器连接到网关 A。
ELB 详细信息:
1.Zone:公共子网区域 c 2.Instance:服务器Web 3.安全组:启用端口
http://docs.amazonaws.cn/en_us/ElasticLoadBalancing/latest/DeveloperGuide/UserScenariosForVPC.html
【讨论】:
我还发现这些说明很有帮助:docs.aws.amazon.com/AmazonVPC/latest/UserGuide/…【参考方案3】:我们在私有子网中实现了 ELB,因此所有 ELB 都需要公开的说法并不完全正确。你确实需要一个 NAT。为私有 ELB 创建一个私有子网,打开 VPC DNS,然后确保将私有路由表配置为通过 NAT。还需要设置子网安全组以允许 ELB 和 App 之间以及 App 到 DB 子网之间的流量。
Beanstalk 健康检查无法工作,因为它们无法到达负载平衡器,但对于需要在公共范围之外的服务来说,这是一个很好的折衷方案。
启动您的 VPC 架构的建议阅读:http://blog.controlgroup.com/2013/10/14/guided-creation-of-cloudformation-templates-for-vpc/。
【讨论】:
【参考方案4】:我和我的队友刚刚在一个 VPC 中实施了 ELB,该 VPC 具有位于不同可用区的 2 个私有子网。您获得超时的原因是,对于您添加到负载均衡器的每个子网,它都会获得一个外部 IP 地址。 (尝试 'dig elb-dns-name-here' 你会看到几个 IP 地址)。如果这些 IP 地址之一映射私有子网,它将超时。映射到您的公共子网的 IP 将起作用。因为 DNS 可能会为您提供任何一个 IP 地址,所以有时它可以工作,有时它会超时。
在与 amazon 反复讨论后,我们发现 ELB 只能放置在“公共”子网中,即具有通往 Internet 网关的路由的子网。我们希望将 Web 服务器保留在我们的私有子网中,但允许 ELB 与它们通信。为了解决这个问题,我们必须确保每个可用区都有一个对应的公共子网,其中我们有私有子网。然后,我们将每个可用区的公共子网添加到 ELB。
起初,这似乎不起作用,但在尝试了一切之后,我们重新创建了 ELB,一切正常。我认为这是一个错误,或者 ELB 只是因为如此多的变化而处于奇怪的状态。
这或多或少是我们所做的:
-
WebServer-1 在可用区 us-east-1b 的 PrivateSubnet-1 中运行,安全组名为 web-server。
WebServer-2 在可用区 us-east-1c 的 PrivateSubnet-2 中运行,安全组名为 web-server。
在区域 us-east-1b 中创建了一个公共子网,我们将其命名为 PublicSubnet-1。我们确保将包含到 Internet 网关 (ig-xxxxx) 的路由的路由表与这个新子网相关联。 (如果您使用向导创建了公共/私有 VPC,则此路由已存在。)
在区域 us-east-1c 中创建了一个公共子网,我们将其命名为 PublicSubnet-2。我们确保将包含到 Internet 网关 (ig-xxxxx) 的路由的路由表与这个新子网相关联。 (如果您使用向导创建了公共/私有 VPC,则此路由已存在。)
创建了一个新的 ELB,向其中添加了 PublicSubnet-1 和 PublicSubnet-2(不是 PrivateSubnet-X)。此外,选择要在 ELB 中运行的实例,在本例中为 WebServer-1 和 WebServer-2。确保分配一个允许传入端口 80 和 443 的安全组。让我们将此组称为 elb-group。
在 web-server 组中,允许来自 elb-group 的端口 80 和 443 的流量。
希望对你有帮助!
【讨论】:
这是一个很好的相关信息来源:forums.aws.amazon.com/thread.jspa?messageID=453594񮯚 我很遗憾我只能投赞成票。谢谢!在过去的 2 个小时里,我一直在用头撞墙,试图弄清楚这一点。 如果我可以投票一百万次,我会的。谢谢你! 那么您的网络服务器同时在公共网络和私有网络中? 我面临着完全相同的问题,但我仍然感到震惊。如果我添加 PublicSubnet-X(不是 PrivateSubnet-X),那么我附加到 ELB 的实例将获得OutOfService
,因为我在公共子网中没有任何实例,实例计数显示为 0。如果我同时添加两者,则实例正在运行通常,但后来我面临超时问题。我错过了什么吗?有人可以帮忙吗?以上是关于VPC 中的 Amazon ELB的主要内容,如果未能解决你的问题,请参考以下文章
CodeBuild 与 Amazon Virtual Private Cloud 结合使用
如何通过 Amazon ElasticSearch 托管服务,对 VPC 中的网络流量进行实时监控
如何使用 AWS CloudFormation 创建 Amazon VPC?