【问题标题】:Link between two containers in two different ECS clusters两个不同 ECS 集群中的两个容器之间的链接
【发布时间】:2020-11-23 16:02:34
【问题描述】:

我正在寻找从 ECS 集群“B”中运行的另一个容器访问 ECS 集群“A”中容器中运行的服务的最佳方式。 我不想公开任何端口。

目前我找到了一种让它在同一个 VPC 中工作的方法 - 通过将集群“B”实例的安全组添加到集群“A”安全组的入站规则,之后集群“A”的服务可用在“私人 IP 地址”在“B”中运行的容器中。

但这需要添加此安全规则(不方便),并且不适用于不同的区域。也许有更好的解决方案涵盖这两种情况 - 相同的 VPC 和区域以及不同的 VPC 和区域?

【问题讨论】:

    标签: amazon-web-services amazon-ecs


    【解决方案1】:

    对于您的问题,最灵活的解决方案是依赖某种服务发现。 AWS 原生的将使用 Route 53 Service Registry 或 AWS Cloud Map。后者较新,也是文档中推荐的。查看这两个链接:

    你可以选择像 Consul 这样的开源解决方案。

    如果您只需要链接两个单独的容器,那么所有这些都可能是多余的。在这种情况下,您可以创建一个可以部署为 Lambda 的小脚本,用于查询 AWS API 并检索目标信息。


    编辑:由于您想在同一个服务上公开多个端口,您还可以使用负载均衡器并为您的服务声明多个目标组。这样您就可以通过负载均衡器在容器之间进行通信。请注意,这可能会导致成本增加,因为流量会通过磅。

    这是一个讨论这种方法的答案:https://stackoverflow.com/a/57778058/7391331

    【讨论】:

    • 谢谢,我试过使用 Route 53,但似乎不符合我的需求 - 看起来它允许每个服务“公开”一个端口,但在我的情况下,我只有一个服务(在每个集群中)和它下面的多个任务(容器),我想为一项服务“公开”多个端口。看起来 Route 53 和 AWS Cloud Map 都解决了“服务发现”而不是“容器发现”,也许我应该考虑将我的集群更改为拥有 1 个服务 - 1 个任务 - 1 个容器而不是 1 个服务和多个容器,这对我虽然:(
    • 为什么不方便?我更喜欢它,因为我可以重新部署单个元素。如果一切都在一个任务定义中,一切都将被重新部署。顺便说一句,我为我的答案添加了另一种选择
    • 不方便,因为对于某些容器我有多个端口要暴露,所以即使我做 1 个服务 - 1 个容器也无济于事。我会尝试你提到的其他方法,谢谢
    • AWS 云地图非常适合这个用例。一个服务包含多个实例(ECS或容器中的任务)。每个实例都由 IP 和端口(以及其他有用的属性,如 AVAILABILITY_ZONE)标识。它不限于每个服务一个实例(端口)。如果您使用的是 ECS,请随时为您的集群启用 Service Discovery
    【解决方案2】:

    为避免添加自定义安全规则,您可以简单地在区域之间执行一些 VPC 对等,这应该允许区域 A 中的 VPC 1 中的实例,查看区域 B 中的 VPC 2 中的实例。This document 描述了如何建立这种连接.同一文档还提供了有关如何链接同一区域中的 VPC 的参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多