2017-03-02 3 views
1

Ich habe das internet auf der suche nach leitfaden auf dem richtigen weg zu spring-cloud-netflix eureka server zu aws garen. Wir haben Docker schon ziemlich oft für Microservices benutzt, sowohl mit Spring-Cloud als auch mit Nodejs, also habe ich versucht, meine Spring-Boot-Federwolke-Eureka-App auf ECS zu installieren. Es gibt sehr begrenzte Informationen in der Spring-Cloud-Dokumentation, aber ich habe hier einige ziemlich nützliche Informationen gefunden: https://www.slideshare.net/ToddMiller34/spring-cloud-into-production. Auf dieser Grundlage habe ich zur Zeit folgend:spring-cloud-netflix eureka aws einsatz

Standard-Federwolke-Starter-Heureka-Server (Federwolke Camden.SR5, Feder-boot 1.5.1) mit

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

relevanten Aspekten der Konfiguration von 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 

beiseite: ich war überrascht, dass eureka.client.region erforderlich war, ohne sie jedoch die dns für Service-Urls holen ging nach 1 txt.us-Ost-... von Default .

route53 TXT-Datensätze in privaten Hosting-Zone:

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" 

Ich hatte einige eureka.server.bindingStrategy auf ‚route53‘, aber das funktioniert nicht (gibt mir eine Fehlermeldung über nicht in der Lage zu finden eine freie Domain in localhost von Route53Binder Zeile 135).

Ich habe die ec2 - ### Hostnamen von den ec2 Container-Instanzen, und die Dinge scheinen zu funktionieren, aber ich bin sehr besorgt, dass diese Hostnamen sich ändern werden, wenn die Container-Instanzen neu gestartet werden. Ich habe gelesen, über route53 Bindung, aber das scheint nicht kompatibel mit Service-URLs von dns holen und auch nicht gut von Netflix selbst unterstützt werden (Ich habe Kommentare zu Fehlern von Netflix-Ingenieure gelesen, dass die Route53-Binder war Community-gespendeter Code, und dass sie nicht bei Netflix verwendet werden). Ich habe auch über EIP-Bindung gelesen, aber ich bin nicht sicher, wie man das mit ECS benutzt. Erstelle ich so viele EIPs, wie ich Eureka-Server habe, lege diese in die route53-txt-Datensätze und assoziiere Eureka automatisch? Das alles scheint in Dokumentation zu fehlen.

Antwort

3

Ich beantworte meine eigene Frage für den Fall, dass jemand anderes darauf stößt und es hilfreich ist.

Muss ich einfach erstellen Sie so viele EIPs wie ich Heureka-Server haben, die route53 TXT-Datensätze die in setzen und EUREKA automatisch assoziieren?

Ja, genau das habe ich gemacht, und es funktioniert. Ich habe 2 EIPs erstellt, weil ich nur 1 Eureka-Instanz in jeder 2 AZ in meiner Umgebung habe. Die EIPs sind nur IP-Adressen. Ich habe dann die in meinen route53 txt Aufzeichnungen setzen, wie folgt aus:

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" 

In diesem Fall wird die EC2 - ### - ### - ### - ### Einträge sind auf den IP-Adressen Host-Namen basierend von EIP. Wenn die EIP-Adresse beispielsweise 123.456.789.123 lautet und Sie sich in us-west-2 befinden, verwenden Sie ec2-123-456-789-123.us-west-2.compute.amazonaws.com.

Eureka in ECS startet und weil meine Eureka-Client-Einstellungen abholen von DNS festgelegt sind, findet es die EIP-Adressen und bindet automatisch an eine in der entsprechenden Zone. Eureka-Clients in Microservice-Anwendungen benötigen die gleiche Eureka-Client-Konfiguration, damit sie dieselben Hostnamen für Eureka-Server finden können.

+1

könnten Sie ein wenig mehr Informationen zu Ihrem Gesamtdesign liefern? Ich habe ein paar Probleme damit, meine erste Spring Cloud App in ECS laufen zu lassen.Ein Beispiel git Repo wäre sehr hilfreich ... –