私有子网未与 public 通信 - 健康检查失败

Private subnet not talking to public - health check failing

我正在尝试实现此 blog

中描述的以下架构

我有一个使用 ENI 的 Fargate 服务(私有 IP 为 10.0.241.85)运行 private子网(让我们称之为'subnet-1')。 ENI 也有一个弹性 IP,因为如果没有,它无法从 ECR 中拉取镜像。我认为这不重要吗?我服务中的容器公开了端口 3000/4000。然后,我将我的 ALB 和 NAT 网关放在 public 子网中(我们称其为“subnet-2)。 ALB 将端口 80/443 上的流量转发到必要的目标组。目标组有 2 个针对 ENI 上私有 IP 的注册任务(1 在端口 3000 上,另一个在 4000 上)。据我所知,这应该允许流量进入,对吗?

对于流出流量,subnet-1 有一个默认路由 (0.0.0.0/0) 到 subnet-2 中的 NAT 网关,这应该允许流量流出,对吗?

所有服务都在 相同 VPC 和 相同 可用性区域(如适用 )

这些服务使用了 2 个安全组:

  1. 测试
  2. api

测试(入站)

测试(出站)

api(入站)

api(出站)

我们利用临时端口在 2 个安全组之间进行通信

注意: 我在这里删除了目标,但是,是的,目标是 test 安全组

| Service | Security Groups |
|---------|-----------------|
| ENI     | test            |
|         | api             |
|---------|-----------------|
| ALB     | api             |
|---------|-----------------|

subnet-1 路由 table

subnet-2 路由 table

注意: 覆盖路由只是一个对等连接,与此无关

据我所知,这 2 个子网应该能够使用其中服务的私有 IP 进行通信,这就是我在这里所做的。

运行状况检查失败,一般消息为:

Task failed ELB health checks

我也查看了 this 博客以获得更多帮助,但无济于事。

任何帮助将不胜感激:)

如果您的任务是侦听端口 3000 和 4000,您的安全组(test 我猜,根据您的评论)将需要允许这些端口。按照现在的配置,我看不到允许的端口 3000 和 4000。

一些其他注意事项 - 私有子网中 ENI 上的弹性 IP 不会执行任何操作,因为私有子网无法直接访问互联网。如果您在没有它的情况下连接到 ECR 时遇到问题,那一定是其他问题。

此外,您的 SG 规则允许非常大的 CIDR 块,例如 0.0.0.0/0。更安全的配置将只允许需要访问的特定安全组。在这种情况下,您需要从负载均衡器的 SG ID 获取应用程序的端口(听起来像 3000 和 4000)。