当前位置: 首页 > 知识库问答 >
问题:

spring-cloud-网飞尤里卡aws部署

田德运
2023-03-14

我一直在互联网上搜索有关将spring-cloud-Netflix eureka服务器部署到aws的正确方法的指导。我们一直在使用docker来提供同时使用spring-cloud和nodejs的微服务,所以我一直在尝试将我的spring-boot spring-cloud eureka应用程序部署到ECS。spring-cloud留档中的信息非常有限,但我在这里找到了一些相当有用的信息:https://www.slideshare.net/ToddMiller34/spring-cloud-into-production.基于此,我目前有以下信息:

标准SpringCloudStarter eureka服务器(SpringCloudCamden.SR5,SpringBoot 1.5.1)具有

@Bean
@Autowired
@Profile("aws")
public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils) {
    EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils);
    AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
    config.setHostname(info.get(AmazonInfo.MetaDataKey.publicHostname));
    config.setIpAddress(info.get(AmazonInfo.MetaDataKey.publicIpv4));
    config.setDataCenterInfo(info);
    return config;      
}

来自云配置存储库的相关配置:

eureka:
  instance:
    non-secure-port: ${server.port}
  environment: test
  client:
    eurekaServerDNSName: test.mydomain.com
  datacenter: cloud
  client:
    region: us-west-2
    registerWithEureka: true
    fetchRegistry: true
    eurekaServerURLContext: eureka
    eurekaServerPort: 8761
    useDnsForFetchingServiceUrls: true

题外话:我很惊讶尤里卡.client.region是必需的,但是没有它,服务网址的dns获取就变成了 txt.us-east-1...默认情况下。

route53私有托管区域中的txt记录:

txt.us-west-2.test.mydomain.com = "us-west-2a.test.mydomain.com" "us-west-2b.test.mydomain.com"
txt.us-west-2a.test.mydomain.com = "ec2-123-456-789-123.us-west-2.compute.amazonaws.com"
txt.us-west-2b.test.mydomain.com = "ec2-987-654-321-123.us-west-2.compute.amazonaws.com"

我将一些eureka.server.bindingStrategy设置为‘route 53 ’,但这不起作用(从Route53Binder第135行给我一个无法在localhost中找到空闲域的错误)。

我从ec2容器实例中获得了ec2-##。我读过有关route53绑定的文章,但这似乎与从dns获取服务URL不兼容,而且netflix本身似乎也不太支持(我读过netflix工程师对错误的评论,称route53 binder是社区捐赠的代码,他们在netflix不使用它)。我也读过EIP绑定,但我不确定如何在ECS中使用它。我是否只需要创建与eureka服务器相同数量的EIP,并将它们放入route53 txt记录中,eureka将自动关联?这一切似乎都非常缺乏文档。

共有1个答案

苏伟志
2023-03-14

回答我自己的问题,以防其他人遇到这个问题,这很有帮助。

我是否只是创建与我有尤里卡服务器一样多的EIP,把它们放在route53 txt记录中,尤里卡会自动关联?

是的,这正是我所做的,并且有效。我创建了2个EIP,因为我的环境中的2个AZ中的每一个中只有1个eureka实例。EIP只是ip地址。然后我将它们放在我的路由53 txt记录中,如下所示:

txt.us-west-2.test.mydomain.com = "us-west-2a.test.mydomain.com" "us-west-2b.test.mydomain.com" 
txt.us-west-2a.test.mydomain.com = "ec2-123-456-789-123.us-west-2.compute.amazonaws.com" 
txt.us-west-2b.test.mydomain.com = "ec2-987-654-321-123.us-west-2.compute.amazonaws.com"

在这种情况下,ec2-###-###-###-### 条目是基于EIP的IP地址的主机名。例如,如果EIP地址是123.456.789.123,并且您在us-West-2中,则使用ec2-123-456-789-123.us-west-2.compute.amazonaws.com.

ECS中的Eureka启动,因为我的eureka客户端设置设置为从dns获取,它会找到EIP地址并自动绑定到适当区域中的一个。微服务html" target="_blank">应用程序中的Eureka客户端需要相同的eureka客户端配置,因此它们可以找到相同的eureka服务器主机名。

云配置yml文件的相关部分:

application.yml
==================
eureka:
  datacenter: cloud
  environment: production
  client:
    fetchRegistry: true
    eurekaServerURLContext: eureka
    region: us-west-2
    eurekaServerPort: 8761
    useDnsForFetchingServiceUrls: true
    eurekaServerDNSName: test.mydomain.com

eureka-server.yml
======================
eureka:
  server:
    renewalPercentThreshold: 0.49 

请注意,在TXT记录查找例程中使用了eurekaServerDNSName。在这种模式下(eureka.client.usednsforfetchingServiceURL),spring cloud eureka服务器和客户端似乎使用txt.${eureka.client.region}。${eureka.client.eurekaServerDNSName}

查找此记录:txt.us-west-2.test.mydomain.com = “us-west-2a.test.mydomain.com” “us-west-2b.test.mydomain.com”

然后使用该dns查找的结果找到实际指向基于EIP的域名的其他2个:txt.us-west-2a.test.mydomain.com="ec2-123-456-789-123.us-west-2.compute.amazonaws.com"txt.us-west-2b.test.mydomain.com="ec2-987-654-321-123.us-west-2.compute.amazonaws.com"

这就是它们如何填充eureka服务器集群节点成员的。如果您需要添加另一台服务器,您需要调配另一个EIP,添加到route53记录,并在ECS中启动一台新服务器,它将绑定到您刚才添加的地址。

 类似资料:
  • 我试图通过Spring.io上的教程链接来设置Spring Cloud Eureka。本教程使用的是Spring Boot 1.5.9.RELEASE。但是http://mvnrepository.com/.上没有Spring Cloud Starter Eureka的版本,所以我尝试了1.4.0和2.0.0.M2。我得到了 我做错了什么? 我使用Gradle作为构建工具。

  • 我正在寻找一个好的发现服务,用于不断增长的私有托管微服务架构。 Netflix的Eureka看起来很有希望。它说它“主要用于AWS云中定位服务”,但我不知道它是否可以在AWS之外使用。粗略地看一下POM,就会发现项目中包含AWS依赖项。 Eureka(或其有用的子集)可以在AWS之外用作发现服务吗?

  • 我们目前正在使用spring boot和netflix组件建立一个微服务架构,为了部署,我们计划使用aws kubernetes(EKS)设置。我们在选择是使用Netflix在Kubernetes上的Eureka&ribbon服务进行服务发现还是使用Kubernetes自己的服务发现机制时处于两难境地。我看到使用k8s服务发现的优点是水平伸缩变得容易。对此的任何想法都将对我们把它带向正确的方向真的

  • 我正在尝试使用Spring和Spring Boot学习微服务,并学习部署到云平台。我计划创建一个Angular 2前端应用程序,它与我部署的微服务进行通信。现在,我正在浏览Spring cloud services Eureka、Zuul、Recural breakers等。 null

  • 我有一个运行着application.yml的eureka服务器 在客户端,我有 有没有办法加快注销过程?看来我加快速度的努力不起作用

  • 我使用Netflix的Eureka注册了许多微服务,并且我正在使用Spring Cloud Config。但是,当我更新时,我需要重新启动应用程序以应用新属性。 重新启动应用程序有点烦人,所以我搜索了它,发现通过使用Netflix Eureka获得注册的微服务,并使用spring boot actuator刷新它,但我没有获得注册的微型服务。 简而言之:我如何使用网飞尤里卡注册微服务?