【问题标题】:Linking containers between task definitions in AWS ECS?在 AWS ECS 中的任务定义之间链接容器?
【发布时间】:2016-04-03 16:54:19
【问题描述】:

我正在尝试在 AWS ECS 中设置具有关联数据库的基本 Web 应用程序。在本地,我在不同的容器中进行了这些设置,在 ECS 上,我希望有单独的任务定义,以便我可以分别扩展这两个。

  1. 我在 ECS 中成功注册了我的第一个任务定义为david_mongodb。它有一个名为 david_mongodb 的容器。
  2. 然后我尝试将我的第二个任务定义注册为david_web,它有一个名为david_web 的容器,它通过david_mongodb:db 链接数据库。
  3. 当我点击“创建”时,它返回一个错误:

    Unable to create Task Definition
    Linked container 'david_mongodb:db' doesn't exist.
    

似乎任务定义在其他任务定义中看不到容器名称?我正在考虑将 david_webdavid_mongodb 容器放在同一个任务定义中会起作用,但我不想这样做:它会阻止我单独扩展 Web 应用程序或数据库。 This overview 似乎证实了我的架构是值得推荐的……

那么如何链接不同任务定义中的容器呢?还是有其他巧妙的处理方式?

【问题讨论】:

  • 我不相信网络模式能解决这个问题。您仍然需要发现任务所在的节点(和 IP)。
  • 问题和这个答案之间没有联系,控制网络模式与链接在不同容器中运行的任务没有直接关系。
  • 自2017年11月起,我们也可以在其他任务中使用私有IP地址连接容器,只要将任务定义为awsvpc网络模式即可。在此宣布:aws.amazon.com/blogs/compute/…

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


【解决方案1】:

ECS 任务定义中的链接类似于Docker links,并且仅在容器是同一任务定义的一部分时才起作用(作为单个任务定义的一部分的容器一起放置在同一主机上)。为了在不同任务定义中的容器之间进行通信,您需要一种机制来发现容器所在的位置(什么主机)以及通信端口。

ECS 通过service 功能与 Elastic Load Balancing(应用程序负载均衡器、网络负载均衡器和经典负载均衡器)集成,其中任务将自动在 ELB 中注册并在 ELB 中适当地取消注册。

ECS 还与 Route 53 Auto Naming 集成,以使用 ASRV 记录进行基于 DNS 的服务发现。您的服务任务可以自动输入和从 DNS 记录中删除。

Service Discovery for Amazon ECS Using DNS 描述了一种不同的方法,其中 Lambda 函数通过 CloudWatch Events 侦听 ECS 事件流并更新 Route 53 DNS 记录。 该方法已被描述的 Route 53 自动命名功能取代以上。

如果您想避免使用负载平衡器和 DNS,另一种模式可能是 ambassador container(有一个名为 ecs-task-kite 的示例使用 ECS API)或者您可能对覆盖网络感兴趣(Weave 有一个相当详细的getting started guide他们的解决方案)。

Nathan Peck 正在跟踪与 ECS 相关的许多不同主题,包括服务发现 here

【讨论】:

  • 很高兴知道。是否有规定的沟通机制?想到了 DNS+ELB,但有没有不需要 ELB 的解决方案?
  • 我更新了我的答案,详细介绍了可能的方法(ELB、大使容器和覆盖网络)。
  • 以 ELB 为例,自动将容器注册到 ELB 是否与在 Docker 中链接容器具有相同的效果?我相信链接会在容器内创建带有其他容器的 IP 和端口的环境变量。 ELB 会做一个类似的技巧,通过链接它们对已经在工作的容器透明吗?或者是否需要做任何其他事情才能获得等效的行为?
  • 我不确定是否理解,但看起来 ELB 仅适用于 http。我看不到如何在那里注册数据库。
  • 使用带有 ELB 的服务不会在其他任务中自动创建环境变量;您需要自己传递它或使用 Route 53 将众所周知的 DNS 名称映射到负载均衡器。应用程序负载平衡器 (ALB) 仅适用于 HTTP/S + websockets,但经典负载平衡器 (ELB) 适用于 HTTP/S 或任意 TCP。见:aws.amazon.com/elasticloadbalancing
【解决方案2】:

您现在可以参考networking between Amazon ECS services in a VPC 上的官方最佳实践指南,讨论采用服务发现、ELB 或服务网格与 ECS 进行服务到服务通信时的注意事项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2019-04-08
    • 2021-11-29
    • 2017-12-30
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多