spring-cloud-netflix eureka aws部署

问题描述 投票:3回答:1

我一直在寻找关于将spring-cloud-netflix eureka服务器部署到aws的正确方法的互联网。使用spring-cloud和nodejs的微服务我们一直在使用docker,所以我一直在尝试将我的spring-boot spring-cloud eureka应用程序部署到ECS。 spring-cloud文档中的信息非常有限,但我在这里找到了一些非常有用的信息:https://www.slideshare.net/ToddMiller34/spring-cloud-into-production。基于此,我目前有以下内容:

标准spring-cloud-starter-eureka-server(弹簧云Camden.SR5,spring-boot 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;      
}

来自cloud config repo的相关配置:

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

除此之外:我很惊讶eureka.client.region是必需的,但没有它,默认情况下,dns fetch for service urls转到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设置为'route53',但这不起作用(给我一个错误,无法从Route53Binder第135行在localhost中找到一个免费域)。

我从ec2容器实例中获得了ec2 - ###主机名,但事情似乎正在发挥作用,但我非常担心这些主机名在容器实例重新启动时会发生变化。我已经阅读了关于route53绑定的内容,但这似乎与从dns获取服务URL似乎不兼容,并且netflix本身似乎也没有很好地支持(我已经阅读了netflix工程师对于bug53绑定器的bug的评论社区捐赠的代码,以及他们不在netflix上使用它。我也读过有关EIP绑定的内容,但我不确定如何使用ECS。我是否只创建了与eureka服务器一样多的EIP,将它们放在route53 txt记录中,eureka会自动关联吗?这一切似乎都非常缺乏文档。

netflix-eureka amazon-ecs spring-cloud-netflix
1个回答
4
投票

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

我是否只创建了与eureka服务器一样多的EIP,将它们放在route53 txt记录中,eureka会自动关联吗?

是的,这正是我所做的,而且它有效。我创建了2个EIP,因为在我的环境中,每个AZ中只有1个eureka实例。 EIP只是IP地址。然后我把它们放在我的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"

在这种情况下,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地址并自动绑定到相应区域中的一个。微服务应用程序中的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 

请注意,eurekaServerDNSName用于TXT记录查找例程。在这种模式下(eureka.client.useDnsForFetchingServiceUrls),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“

这就是他们如何填充尤里卡服务器集群节点成员。如果您需要添加另一台服务器,则需要配置另一个EIP,添加到route53记录,然后在ECS中启动一个新服务器,该服务器将绑定到您刚刚添加的地址。

© www.soinside.com 2019 - 2024. All rights reserved.