我正在尝试实现此 blog 中描述的以下架构
我有一个使用 ENI(私有(private) IP 为 10.0.241.85)的 Fargate 服务,在私有(private)子网(我们称之为“子网”)中运行-1')。 ENI 还具有弹性 IP,因为如果没有,则无法从 ECR 中提取镜像。我认为这并不重要?我的服务中的容器暴露了端口 3000/4000。然后,我将 ALB 和 NAT 网关置于公共(public)子网中(我们称之为“subnet-2”)。 ALB 将端口 80/443 上的流量转发到必要的目标组。目标组有 2 个针对 ENI 上的私有(private) IP 的注册任务(1 个在端口 3000 上,另一个在 4000 上)。据我所知,这应该允许流量进入,对吗?
对于流出流量,subnet-1 有一条通往 中 NAT 网关的默认路由 (0.0.0.0/0) subnet-2,这应该允许流量流出,对吗?
所有服务都位于相同 VPC 和相同可用区(如果适用)
我有 2 个安全组供这些服务使用:
- 测试
- API
我们利用临时端口在两个安全组之间进行通信
注意:我在此处删除了目的地,但是,是的,目的地是测试安全组
| Service | Security Groups |
|---------|-----------------|
| ENI | test |
| | api |
|---------|-----------------|
| ALB | api |
|---------|-----------------|
注意:所覆盖的路由只是对等连接,因此与此无关
据我所知,这两个子网应该能够使用其中服务的私有(private) IP 进行通信,这就是我在这里所做的。
运行状况检查失败,并显示以下通用消息:
Task failed ELB health checks
我还查看了this博客寻求更多帮助,但无济于事。
任何帮助将不胜感激:)
最佳答案
如果您的任务正在监听端口 3000 和 4000,则您的安全组(我猜,根据您的评论,test
)将需要允许这些端口。按照现在的配置,我没有看到允许的端口 3000 和 4000。
其他一些注意事项 - 私有(private)子网中 ENI 上的弹性 IP 不会执行任何操作,因为私有(private)子网无法直接访问互联网。如果您在没有它的情况下连接到 ECR 时遇到问题,则一定存在其他问题。
此外,您的 SG 规则允许非常大的 CIDR block ,例如 0.0.0.0/0
。更安全的配置将只允许需要访问的特定安全组。在这种情况下,您需要从负载均衡器的 SG ID 获取应用程序的端口(听起来像 3000 和 4000)。
关于amazon-web-services - 私有(private)子网不与公共(public)网络通信 - 运行状况检查失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57292250/