我有一个在reading instructions in another StackOverFlow post之后配置的ECS Fargate集群。我已经将多个容器推送到ECR存储库中,并且可以成功启动这些容器。但是转到http://PUBLIC-IP-ADDRESS并不能访问容器公开的服务。
在我最近的测试中,我只是使用了Docker Hub中的 httpd 容器,因为它很简单并且提供了默认的网页。还是没有运气。
VPC具有两个子网-公共和私有-并根据上述链接中的说明进行构建。我将容器(作为ECS服务)附加到公共子网,并配置服务以使其成为公共IP地址。
公共子网(CIDR 10.0.1.0/24)具有此路由表:
10.0.0.0/16 local
0.0.0.0/0 igw-0ad0671cc2924857e
网络ACL入站规则
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
网络ACL出站规则
100 ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
* ALL Traffic ALL ALL 0.0.0.0/0 DENY
(这些是默认规则)
专用子网(CIDR 10.0.2.0/24)具有相同的配置,但是路由表连接到NAT网关。 NAT网关位于公共网上。
我所做的唯一与VPC配置说明不同的是安全组。创建服务时,我使用VPC随附的 default 安全组配置服务。此安全组允许所有入站和出站流量。
对于任务定义-我使用awsvpc网络模式(这是Fargate ECS),1/2 GB内存,0.25 vCPU,在容器上暴露了端口80,创建了 httpd TD >
对于服务,我将其附加到VPC,为其命名为 httpd ,将其附加到公共子网,并说使用公共IP地址。
服务和包含的任务正确启动,并且任务显示一个公共IP地址。访问该IP地址将导致漫长的等待,最终Web浏览器放弃了。 (超时)
更新-
我不知道需要负载均衡器。我试图添加负载均衡器。但这没什么。
要添加负载均衡器,需要添加更多按上述配置的公共子网。应用程序负载平衡器已连接到VPC和公共子网。它正在侦听HTTP(端口80)。
然后我为 httpd 容器重新创建了服务。在创建服务的过程中,我已尽力为负载均衡器配置它,然后服务描述给出了以下摘要:
Target Group Name Container Name Container Port
ecs-ecs-go-httpd httpd 80
答案 0 :(得分:0)
如果您要命中特定的容器,则不需要ELB。针对端口80运行TCP测试,然后查看响应是什么。
Powershell:Test-NetConnection <IP address> -port 80
重击:nc -z <IP address> <80>
如果您不能连接80多个,则将其移回各个部分:
如果仅保留VPC配置和容器映像的安全组或任务定义都不存在问题。
如果您可以使用SSH,则该问题很可能不是路由问题。如果无法通过SSH仔细检查路由表,VPC ACL和子网ACL。
从新的EC2实例
如果您可以在同一子网中具有相同安全组的EC2实例上达到80,则您已消除了网络连接的所有可能问题,可以集中精力解决ECS配置可能出了什么问题。
最后,如果您打开的内容更大,别忘了锁定安全组和ACL。