如何在AWS ECS集群上通过Docker Network部署Netfilex Eureka Server和Eureka Client

时间:2018-11-21 07:08:24

标签: amazon-ec2 amazon-ecs netflix-eureka spring-cloud-netflix

我正在将自己的spring cloud eureka应用程序迁移到AWS ECS,但目前遇到一些麻烦。

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

  1. Eureka服务器
  2. Eureka客户端

每个服务上都有一个正在运行的任务。

问题:

我如何在这两项服务之间建立一个“ docker网络”,以便我可以将我的eureka客户端注册到eureka服务器的注册表?将它们放在同一个群集中似乎并不能解决问题。

在本地,我能够建立一个“泊坞窗网络”来完成此任务。可以在AWS上使用“码头工人网络”吗?

1 个答案:

答案 0 :(得分:2)

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

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

我之前已经做过,有几种方法可以实现。这是方法之一:

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

我知道这看起来很脏而且很复杂,但问题是Eureka的Netflix OSS项目缺少某些部分,我相信这是其内部使用的专有实现方式,他们不想共享。

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