我构建了以下基础结构以与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 |
+-------------+--------+
因此,几乎所有事情似乎都在起作用。我正在启动的容器是来自docker hub的httpd:2.4
映像。
RUNNING
状态。由于上述几点,我正在假设这是路由或安全组问题。
问题是,当我尝试浏览在容器上运行的站点时,通过单击应用程序负载平衡器DNS名称(xxxx.AWS_REGION.elb.amazonaws.com
),出现“无法访问此站点”错误。
对于为什么会发生这种情况的任何解释都将得到好评。
请让我知道是否有更多信息会有所帮助,我会尽力提供。