我正在运行一个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)。只是不是从港口来。
答案 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中的服务。
因此,您需要放置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