无法访问AWS ECS EC2实例中的端口

时间:2019-10-04 08:23:09

标签: amazon-web-services docker amazon-ec2 port amazon-ecs

我正在运行一个AWS ECS服务,该服务正在运行具有多个容器的单个任务。 任务以awsvpc网络模式运行。 (EC2,而不是Fargate)

容器端口已映射到ECS任务定义中。

我在EC2容器实例安全组中添加了入站规则(例如:TCP 8883->从任何位置访问)。也在VPC网络安全组中。

当我尝试从远程PC使用实例的公用IP访问端口时,我得到connection refused

例如:nc -z <PublicIP> <port>

当我通过SSH进入EC2实例并尝试netstat时,我可以看到SSH端口22正在侦听,但容器端口却没有(例如:8883)。 另外,当我在实例中执行docker ps时,“端口”列为空。

我不知道我错过了什么配置。请帮助。

PS:可从远程PC到达目的地(公共IP)。只是不是从港口来。

1 个答案:

答案 0 :(得分:2)

  

我正在运行一个AWS ECS服务,该服务正在运行一个任务   有多个容器。任务以awsvpc网络模式运行。 (EC2,   不是Fargate)

Ec2,而不是Fargate ,这是针对不同课程的另一匹马。针对 awsvpc网络模式运行的任务具有自己的弹性网络接口(ENI),主要的私有IP地址和内部的DNS主机名。那么您将如何使用AWS EC2公共IP访问该容器?

  

awsvpc网络模式提供的任务联网功能使   Amazon ECS的任务与Amazon EC2的网络属性相同   实例。在任务中使用awsvpc网络模式时   定义,从该任务定义启动的每个任务   获得自己的弹性网络接口(ENI),主要的专用IP   地址和内部DNS主机名。任务联网功能   简化了容器网络,并提供了更多控制方式   容器化的应用程序彼此通信   您的VPC中的服务。

task-networking

因此,您需要放置LB,然后在LB后面配置服务。

  

为这些服务创建任何目标组时,必须选择   ip作为目标类型,而不是实例。这是因为使用   awsvpc网络模式与ENI关联,而不与Amazon关联   EC2实例。

所以配置有问题或对网络模式之间的了解不足。我建议阅读此article

  

当我在实例中执行docker ps时,“端口”列为空。

因此,如果端口列为空,则可能是以下情况。

  

主机和awsvpc网络模式提供最高的网络连接   容器的性能,因为它们使用的是Amazon EC2网络   堆栈而不是网桥提供的虚拟化网络堆栈   模式。在主机和awsvpc网络模式下,暴露的容器端口   直接映射到相应的主机端口(对于主机   网络模式)或连接的弹性网络接口端口(用于   awsvpc网络模式),因此您无法利用动态主机   端口映射。

请记住以下几点:

  

适用于ECS优化的AMI的最新版本。它   选择加入后仅影响新容器实例的创建   awsvpcTrunking。它仅影响使用awsvpc网络模式创建的任务   和EC2启动类型。使用AWS Fargate启动类型创建的任务   总是有专用的网络接口,无论您有多少   发射。

optimizing-amazon-ecs-task-density-using-awsvpc-network-mode