ChatGPT解决这个技术问题 Extra ChatGPT

VPC 中私有子网中 EC2 实例的 Amazon ELB

我正在使用 Amazon EC2,并且我想将面向 Internet 的 ELB(负载均衡器)放置到私有子网上的 2 个实例中。我将 VPC 与公共子网和私有子网一起使用。

如果我只是将私有子网添加到 ELB,它不会获得任何连接。

如果我将两个子网都附加到 ELB,那么它可以访问实例,但它通常会超时。 (参考截图 1)

如果我只附加到公有子网,那么我附加到 ELB 的实例会出现服务中断,因为我在公有子网中没有任何实例,实例计数显示为 0。(请参阅屏幕截图 2)

https://i.stack.imgur.com/X0W63.png

https://i.stack.imgur.com/QEn2k.png

我的问题实际上是对 this question 的扩展。在接受了答案中提到的所有 6 个步骤之后,我仍然感到震惊,我附加到 ELB 的实例得到了服务中断。我什至尝试在 EC2 实例和 ELB 的安全组中允许端口,但它没有帮助。

请帮忙,我对此感到头疼。


B
Ben Whaley

您引用的另一个 SO 问题是正确的。双重/三重检查以下

您只需将公有子网附加到 ELB,确保这些子网的可用区与您的实例所在的私有子网的可用区一致。

确保您的实例的安全组允许从负载均衡器的安全组进行访问

负载均衡器安全组应具有允许运行状况检查到达实例的出口规则

确保您的运行状况检查在实例本地运行。例如,如果您在 ELB 中的健康检查是 HTTP:8080/health_check,那么您可以在实例上 curl xxxx:8080/health_check(其中 xxxx 是实例的私有 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 对齐。
跨区域确保一个区域内的负载均衡器接口将流量发送到其他 AZ 中的实例。 Docs
此要求的原因是 AWS 在与 ELB 关联的每个子网中放置了一个 ELB“节点”。这些节点的网络接口具有公共 IP,需要能够与 Internet 通信,因此需要位于具有 IGW 路由的子网中。
j
jouell

另一个 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 或安装软件的方法。