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

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

我正在将 Spring Cloud Eureka 应用程序迁移到 AWS ECS,但目前在执行此操作时遇到了一些问题。

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

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

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

问题:

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

在本地我能够建立一个“docker网络”来完成这个任务。 AWS 上有可能有一个“docker 网络”吗?

最佳答案

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

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

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

  1. 对于您打算将 ECS 任务分散为 eureka 服务器或注册表的 EC2 实例,您需要分配弹性 IP 地址,以便您始终知道通过主机 IP 地址连接到何处。
  2. 您还需要正确标记它们,以便在下一步中引用它们。
  3. 然后切换回 ECS,在部署 eureka-server 任务时,在任务定义配置中,有一个参数 placement_constraint 这将允许您向任务添加标签,以便您可以将这些标签放置在您在前面的步骤中分配弹性 IP 地址的实例中。
  4. 现在,如果一切顺利并且您部署了所有内容,您应该能够将您的 eureka 客户端应用程序引用到该 IP 并注册它们。

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

另一种可能更酷的方法是为您的实例使用 Route53 域或别名记录,这样您就可以使用 DNS 来引用它们,而不是使用弹性 IP。

关于amazon-ec2 - 如何在AWS ECS集群上使用docker网络部署Netfilex Eureka Server和Eureka Client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53406890/

相关文章:

amazon-web-services - EC2实例没有公共(public)DNS

amazon-web-services - 设置 Tableau Server 以在 AWS GovCloud 上运行

amazon-web-services - 将图像从 EC2 容器注册表部署到 Elastic Beanstalk 凭据?

amazon-web-services - 在 AWS ECS 上的 Docker 镜像中运行 CloudWatch 代理失败

spring-mvc - 访问 Spring Boot Zuul Service 路由的身份验证

sockets - 如何从 AWS EC2 实例 ping 到我的本地机器?

ubuntu - 如何在 AWS ec2 中使用 chromedriver(python)?

amazon-ecs - AWS ECS集群请使用elb配置容器

java - 找不到回退方法 : fallback

netflix-zuul - com.netflix.zuul.exception.ZuulException : Forwarding error while calling microservice api