没有链路和端口映射,如何让容器在 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 中相互通信?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Application Load Balancer 用于具有多个端口映射的 ECS 服务?