我已经构建了以下基础设施以用于 AWS Fargate。
ECS 管理私有子网中的容器,流量通过公有子网通过面向 Internet 的 ALB 路由到它们。
通过 NAT 网关控制对私有子网中容器的 Internet 访问。
我创建了一个 git repo 来演示手头的问题
https://github.com/GreenyMcDuff/aws-fargate-public
警告:运行它会花钱
需要 Terraform v0.11.7 或更高版本
以下是安全组规则:
alb-sg
+----------------+----------+------+------------+
| Ingress/Egress | Protocol | Port | Source |
+----------------+----------+------+------------+
| Ingress | TCP | 80 | 0.0.0.0/0 |
| Egress | All | All | 0.0.0.0/0 |
+----------------+----------+------+------------+
ecs-tasks-sg
+----------------+----------+---------+-----------+
| Ingress/Egress | Protocol | Port | Source |
+----------------+----------+---------+-----------+
| Ingress | TCP | 80 | 0.0.0.0/0 |
| Ingress | TCP | 1-65535 | alb-sg-id |
| Egress | All | All | 0.0.0.0/0 |
+----------------+----------+---------+-----------+
这是路由表
公共路由表
+-------------+--------+
| Destination | Target |
+-------------+--------+
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | igw-id |
+-------------+--------+
私有路由表
+-------------+--------+
| Destination | Target |
+-------------+--------+
| 10.0.0.0/16 | local |
| 0.0.0.0/0 | nat-id |
+-------------+--------+
所以几乎一切似乎都在工作。我要启动的容器是 httpd:2.4
来自 docker hub 的图像。
- 图片下载成功
- 容器启动并进入
RUNNING
正常状态。 - elb 健康检查通过
- 我在我的公共子网中启动了一个 Windows EC2 实例,对其进行 RDP,并在 Internet Explorer 中浏览了容器 ip,我得到了预期的页面
由于上述几点,我假设这是一个路由或安全组问题。
问题是,当我尝试浏览在容器上运行的站点时,通过点击 Application Load Balancers DNS 名称 ( xxxx.AWS_REGION.elb.amazonaws.com
),我收到“无法访问此站点”错误。
任何关于为什么会发生这种情况的解释都会受到极大的欢迎。
请让我知道是否有更多信息会有所帮助,我会尽力提供。