如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例

Posted

技术标签:

【中文标题】如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例【英文标题】:How do I connect a public-facing load balancer to EC2 instances in a private VPC 【发布时间】:2019-03-26 15:02:49 【问题描述】:

背景

我想将 laravel 应用程序部署到 Elastic Beanstalk。该设置包括一个具有两个私有子网和两个公有子网的 VPC。 EC2、RDS 等都在私有子网中。

只有 ELB 在公共的。并且应该将所有内容路由到私有的。

问题

如果我尝试通过 ELB 连接,我会收到 TIMEOUT 错误。

我不确定这是配置问题(VPC/子网)还是应用程序 (EB) 错误。

我猜,这些请求似乎通过并正确路由。因为如果我检查 Elastic Beanstalk 日志,例如 httpd/access.log

我看到了通过 ELB 发出的请求。

13:38:20 10.0.2.52 (94.79.175.190) - - [22/Oct/2018:13:38:19 +0000] "GET /loadbalancertest HTTP/1.1" 307 307 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/69.0.3497.100 Safari/537.

不过,健康检查似乎工作正常。并且应用状态OK。

基础设施

1 个 VPC 2 个私有子网 2 个公共子网

ELB

ELB 位于两个公共子网中。

ELB 安全组设置

入站:HTTP / TCP / 80 / 0.0.0.0/0

出站:HTTP / TCP / 80 / 0.0.0.0/0


EC2 实例(由 EB 创建)

VPC 安全组设置

入站:HTTP / TCP / 80 / sg-03xxxxx (ELB SG)

出站:所有流量/0.0.0.0/0

【问题讨论】:

【参考方案1】:

看起来您的 ELB 配置正确。

您的后端配置有问题。 HTTP 服务返回 HTTP 状态 307,这是您的健康检查的临时重定向(除非我读错了您的日志文件 - 您永远无法确定自定义日志格式是什么)。奇怪的是您的日志文件中有307 307。第一个 307 是 HTTP 状态,第二个是请求返回的字节数。

连接到您的一个后端实例,然后使用 curl 连接到另一个后端实例并验证运行状况检查 URL 是否正常工作。然后验证默认主页是否也正常工作。

【讨论】:

以上是关于如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mySQL 工作台连接到 AWS 私有子网 VPC 中的 RDS

用于微服务的私有子网 ecs 连接上负载均衡器的 AWS API 网关

aws 弹性负载均衡器和限制

AWS VPC:将 NAT 和 Internet 网关与负载均衡器和私有子网一起使用时的奇怪行为

如何从私有 AWS ALB 公开 API 端点

VPC 中的 Amazon ELB