VPC 中私有子网中 EC2 实例的 Amazon ELB
Posted
技术标签:
【中文标题】VPC 中私有子网中 EC2 实例的 Amazon ELB【英文标题】:Amazon ELB for EC2 instances in private subnet in VPC 【发布时间】:2014-04-27 19:47:52 【问题描述】:我正在使用 Amazon EC2,我想将面向 Internet 的 ELB(负载均衡器)放置到私有子网上的 2 个实例。我正在使用具有公共子网和私有子网的 VPC。
如果我只是将私有子网添加到 ELB,它将无法获得任何连接。 如果我将两个子网都连接到 ELB,那么它可以访问实例,但它通常会超时。 (请参阅屏幕截图 1) 如果我只连接到公共子网,那么我连接到 ELB 的实例会出现服务中断,因为我在公共子网中没有任何实例,实例计数显示为 0。(请参阅屏幕截图 2)屏幕截图 1: 已连接两个子网
屏幕截图 2: 仅附加了公共子网
我的问题实际上是对this question 的扩展。在接受了答案中提到的所有 6 个步骤之后,我仍然感到震惊,我附加到 ELB 的实例得到了服务中断。我什至尝试在 EC2 实例和 ELB 的安全组中允许端口,但它没有帮助。
请帮忙,我对此感到头疼。
【问题讨论】:
【参考方案1】:您提到的另一个 SO 问题是正确的。双重/三重检查以下
您只需将公有子网附加到您的 ELB,确保这些子网的可用区与您的实例所在的私有子网的可用区一致。 确保您的实例的安全组允许从负载均衡器的安全组进行访问 负载均衡器安全组应具有允许运行状况检查到达实例的出口规则 确保您的运行状况检查在本地实例上运行。例如,如果您在 ELB 中的健康检查是HTTP:8080/health_check
,则在实例上您可以curl x.x.x.x:8080/health_check
(其中x.x.x.x
是实例的私有 IP)并获得 200 响应码。
公有子网路由表应将 0.0.0.0/0
路由到连接到您的 VPC 的互联网网关。
私有子网路由表应将 0.0.0.0/0
路由到公有子网中的 NAT 实例或网关
【讨论】:
我在屏幕截图 1 中注意到健康实例位于 AZ ap-southeast-1b 中。确保您的 ELB 的公共子网位于同一区域中。例如。 ELB 的公共子网位于 ap-southeast-1b 中,私有子网位于 ap-southeast-1b 中。如果区域不匹配,它将无法工作。 @BenWhaley 是正确的。稍微扩展一下:您的 ELB 应仅位于公共子网中,并且仅位于与您的实例相同的可用区中的子网上。 那么ELB上的“CrossZone”设置是不是允许ELB和实例在不同的AZ?它似乎并没有真正为我工作。无论如何都不是大问题,因为我会确保 AZ 对齐。 跨区域确保一个区域内的负载均衡器接口将流量发送到其他可用区的实例。 Docs 此要求的原因是 AWS 在与 ELB 关联的每个子网中放置了一个 ELB“节点”。这些节点的网络接口具有公共 IP,需要能够与 Internet 通信,因此需要位于具有 IGW 路由的子网中。【参考方案2】:另一个 SO 问题也帮助了我。对我来说,我一直忘记我需要将软件安装到服务器(即 Apache),如果您不创建 NAT GW 或其他允许软件安装的方法,它将失败。如果你想尝试一种没有太多麻烦的自动化方式,你可以试试脚本:
https://github.com/jouellnyc/AWS/tree/master/create_aws_vpc3
请注意,已经有很多好的文档和讨论,但是:
我从 ELB 获得的 HTTP 代码:
504 - 可能是安全组 - 允许访问实例的端口 80 503 - 可能是错误的目标组设置 502 - 可能 Apache/Server 未运行 b/c 它未安装,因为没有 nat gw 或安装软件的方法。【讨论】:
以上是关于VPC 中私有子网中 EC2 实例的 Amazon ELB的主要内容,如果未能解决你的问题,请参考以下文章
如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例
通过 Ubuntu 堡垒到私有子网中的 EC2 实例的 SSH 隧道