私有子网未与 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 个安全组:
- 测试
- 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)。
我正在尝试实现此 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 个安全组:
- 测试
- 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)。