2017-03-02 2 views
1

J'ai parcouru Internet à la recherche de conseils sur la bonne façon de déployer spring-cloud-netflix eureka server à aws. Nous avons beaucoup utilisé le docker pour les microservices en utilisant à la fois spring-cloud et nodejs, donc j'ai essayé de déployer mon appli spring-boot spring-cloud eurecca à ECS. Il y a très peu d'informations dans la documentation de Spring-Cloud, mais j'ai trouvé quelques informations assez utiles ici: https://www.slideshare.net/ToddMiller34/spring-cloud-into-production. Sur cette base, j'ai actuellement les suivantes:spring-cloud-netflix eureka aws déploiement

standard printemps-nuage-démarreur eureka-serveur (printemps-nuage Camden.SR5, printemps-démarrage 1.5.1) avec

@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;  
} 

pièces pertinentes configuration de repo config nuage:

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 

côté: Je suis surpris que eureka.client.region était nécessaire, mais sans elle les dns chercher pour urls de service est allé à txt.us-est-1 ... par défaut .

route53 records txt dans la zone privée organisée:

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" 

J'ai eu quelques eureka.server.bindingStrategy réglé sur « route53 », mais cela ne fonctionne pas (me donne une erreur de ne pas être en mesure de trouver un domaine gratuit dans localhost de la ligne 135 de Route53Binder). J'ai reçu les noms d'hôte ec2 - ### des instances de conteneur ec2, et les choses semblent fonctionner, mais je crains fort que ces noms d'hôtes ne changent à chaque redémarrage des instances de conteneur. J'ai lu à propos de la liaison route53, mais cela ne semble pas compatible avec l'extraction des URL de service de DNS et ne semble pas bien supporté par netflix eux-mêmes (j'ai lu les commentaires sur les bogues par les ingénieurs de netflix que le classeur route53 code donné par la communauté, et qu'ils ne l'utilisent pas sur netflix). J'ai également lu sur la liaison EIP, mais je ne suis pas sûr de savoir comment l'utiliser avec ECS. Est-ce que je crée juste autant d'EIP que j'ai des serveurs d'eureka, placez-les dans les dossiers de t53 de route53 et eureka s'associera automatiquement? Tout cela manque cruellement de documentation.

Répondre

3

répondre à ma propre question au cas où quelqu'un d'autre tombe sur ceci et c'est utile.

Ai-je simplement créer autant de PIE que j'ai serveurs eurêka, mettre ceux les dossiers de txt route53 et eureka associera automatiquement?

Oui, c'est exactement ce que j'ai fait, et cela fonctionne. J'ai créé 2 EIP parce que j'ai seulement 1 instance eureka dans chacune des 2 AZ de mon environnement. Les EIP sont juste des adresses IP. Je mets alors ceux dans mes route53 dossiers de txt, comme ceci:

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" 

Dans ce cas, l'EC2 - ### - ### - ### - ### entrées sont hostnames basées sur les adresses IP de EIP. Par exemple, si l'adresse EIP est 123.456.789.123 et que vous êtes dans us-west-2, utilisez ec2-123-456-789-123.us-west-2.compute.amazonaws.com. Eureka dans ECS démarre et parce que mes paramètres de client eureka sont définis pour aller chercher à partir de DNS, il trouve les adresses EIP et se lie automatiquement à un dans la zone appropriée. Les clients Eureka dans les applications de microservice ont besoin de la même configuration de client eureka, afin qu'ils puissent trouver les mêmes noms d'hôte de serveurs eureka.

+1

pourriez-vous fournir un peu plus d'informations sur votre conception globale? J'ai un peu de mal à faire fonctionner ma première application Spring Cloud dans ECS.Un exemple de repo git serait très utile ... –