没有链路和端口映射,如何让容器在 ECS 中相互通信?

Posted

技术标签:

【中文标题】没有链路和端口映射,如何让容器在 ECS 中相互通信?【英文标题】:How to make containers communicate with each other in ECS without link and port mapping? 【发布时间】:2017-05-24 06:47:49 【问题描述】:

我没有找到一个解决方案,使不同任务定义中的两个容器可以相互通信。因此,我按照answer 将两个容器链接在相同的任务定义中,效果很好。首先感谢您的回答。

但是,当我阅读 ECS 文档时,我发现 following paragraph 让我很困惑:

并置在单个容器实例上的容器可以相互通信,而无需链接或主机端口映射。使用安全组和 VPC 设置在容器实例上实现网络隔离。

但我无法找到更多文档来实现这一点。我知道 docker 社区尝试使用--network 并弃用了--link。我不确定 AWS 是否会做出一些改变来以某种方式启用这些功能。

有人可以帮助我了解如何实现这一目标吗?由于容器名称和 IP 始终由 ECS 动态分配,如果在不同的任务定义中没有链接和端口映射,我如何从一个容器与另一个容器通信?

【问题讨论】:

现在您是否有机会知道答案并分享您的解决方案? @apines,只是一个粗略的想法。如果您仍想保留其余调用,则需要使用网关或 ALB 来执行此操作。否则,重新考虑架构以使用某种通知系统,如 Kafka 【参考方案1】:

根据您的使用案例,您可以利用 ECS 的服务发现功能,服务发现将提供一个端点(url)以在不同服务之间私下通信。

在服务发现中,ECS 负责在每次启动或停止新任务时将容器的动态 IP 和端口更新到 DNS 记录。

参考文档: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html

【讨论】:

以上是关于没有链路和端口映射,如何让容器在 ECS 中相互通信?的主要内容,如果未能解决你的问题,请参考以下文章

AWS ECS Fargate 和端口映射

基于portmap CNI插件来实现端口映射

如何将 Application Load Balancer 用于具有多个端口映射的 ECS 服务?

如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?

如何针对单个 ECS 服务附加两个目标组

AWS 目标组在同一个 ECS 任务上注册 2 个目标?