2017-03-02 141 views
1

我一直在搜索互联网寻找关于如何将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。在此基础上,我公司目前有以下几种:spring-cloud-netflix eureka aws部署

标准弹簧云起动尤里卡服务器(春季云Camden.SR5,弹簧引导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 

题外话:我很惊讶,被要求eureka.client.region,但是没有它的DNS获取的服务URL去txt.us东-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的本地主机中的免费域)。

我从ec2容器实例中获得了ec2 - ### hostnames,事情似乎正在进行,但我非常担心这些主机名将在容器实例重新启动时随时更改。我已经阅读了关于route53的绑定,但是这似乎与从dns获取服务url不兼容,并且netflix自己似乎也没有很好的支持(我已阅读过netflix工程师对bugs的评论,社区捐赠的代码,并且他们没有在netflix上使用它)。我还阅读了有关EIP绑定的内容,但我不确定如何将它与ECS结合使用。我是否只创建与eureka服务器一样多的EIP,将它们放在route53 txt记录中,而eureka会自动关联?这一切似乎严重缺乏文件。

回答

3

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

难道我只是创造尽可能多的电子信息产品,因为我有灵光的服务器,把那些在 的route53 TXT记录和尤里卡会自动关联?

是的,这正是我所做的,它的工作原理。我创建了2个EIP,因为在我的环境中,每个2个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 - ### - ### - ### - ###项是基于IP地址的主机名来自EIP。例如,如果EIP地址是123.456.789.123,而您位于us-west-2,则请使用ec2-123-456-789-123.us-west-2.compute.amazonaws.com。

在ECS中的尤里卡启动,并且因为我的尤里卡客户端设置设置为从DNS获取,它会查找EIP地址并自动绑定到适当区域中的一个。微服务应用程序中的尤里卡客户端需要相同的尤里卡客户端配置,因此他们可以找到相同的尤里卡服务器主机名。

+1

你能提供一些关于你整体设计的更多信息吗?我在ECS中运行我的第一个Spring云应用程序时遇到了一些问题。一个git回购的例子会很有帮助... –