如何在 AWS ECS 集群上使用 docker 网络部署 Netfilex Eureka Server 和 Eureka Client

How to deploy Netfilex Eureka Server and Eureka Client with docker Network on AWS ECS cluster

我正在将我的 spring 云 eureka 应用程序迁移到 AWS ECS,目前遇到了一些问题。

我在 AWS 上有一个 ECS 集群,其中创建了两个 EC2 服务

  1. 尤里卡服务器
  2. 尤里卡客户端

每个服务都有一个任务 运行。

问题:

我如何在这两个服务之间建立 "docker network" 以便我可以将我的 eureka-client 注册到 eureka-server 的注册表?将它们放在同一个集群中似乎并不能解决问题。

我可以在本地建立一个 "docker network" 来完成这个任务。可以在 AWS 上使用 "docker network" 吗?

这里的问题在于 ECS 集群的工作方式。如果您转到仪表板并检查您的任务定义,您将看到 AWS 自动分配给资源的 IP 地址。

在 Eureka 的情况下,您需要在部署 eureka 客户端应用程序时以某种方式获取此 ip 地址,并使用它来注册到您的 eureka-server。但是当然,您的任务定义会以某种方式被破坏并重新创建,因此您很容易丢失它。

我以前做过这个,有几种方法可以实现。这是其中一种方法:

  1. 对于您打算将 ECS 任务传播为 eureka-server 或注册表的 EC2 实例,您需要分配弹性 IP 地址,以便您始终知道根据主机 IP 地址连接到哪里。
  2. 您还需要正确标记它们,以便在下一步中参考它们。
  3. 然后切换回 ECS,在部署 eureka-server 任务时,在任务定义配置中,有一个参数为 placement_constraint 这将允许您为您的任务添加一个标签,这样您就可以将它们放置在您在前面的步骤中分配弹性 IP 地址的实例中。
  4. 现在,如果这一切都很好并且您部署了所有内容,您应该能够将您的 eureka-client 应用程序引用到该 ip 并注册它们。

我知道这看起来很脏而且有点复杂,但问题是 Eureka 的 Netflix OSS 项目缺少部分,我认为这是他们内部使用的专有实现,他们不想分享。

另一种可能更酷的方法是为您的实例使用 Route53 域或别名记录,因此您也可以使用 DNS 引用它们,而不是使用弹性 ip。