2016-07-27 8 views
0

Ich benutze Federwolke Eureka für Microservice-Registrierung in einer dockerisierten Umgebung auf aws.Spring-Cloud Brixton, Eureka und Docker mit ephemeren Ports

Da ich Dockers Ephemeral-Port-Mapping verwenden, ist der auf dem Container-Host exponierte Port unbekannt. Um das zu überwinden, habe ich eine benutzerdefinierte EurekaInstanceConfigBean, die den Docker-Daemon auf dem Host nach dem zugewiesenen Port fragt, damit ich das verwenden kann, um sich bei eureka zu registrieren.

Das alles funktioniert gut, bis die Registrierung beginnt. Die EurekaDiscoveryClientConfiguration enthält eine @EventListener(EmbeddedServletContainerInitializedEvent.class), die den externen Port überschreibt, den ich in meinem benutzerdefinierten EurekaInstanceConfigBean zugewiesen habe, und setzt es zurück auf den lokalen Port innerhalb des Containers.

Ich denke, der Zuhörer Zweck ist die automatische Port-Zuweisung im Falle von server.port=0 zu unterstützen, aber in meinem Setup ist es Dinge zu brechen.

Die Frage ist: Kann ich irgendwie die EurekaDiscoveryClientConfiguration stoppen, um meinen manuell eingestellten Port zu überschreiben? Kann ich irgendwie meine eigene EurekaDiscoveryClientConfiguration verwenden?

Antwort

0

Sie könnten Host-Netzwerk verwenden, und daher verwendet der Andock-Container den Netzwerk-Stack des Hosts, der den Dienst über seine IP-Adressen zugänglich macht.

Ich benutze dies mit docker-komponieren. Die Dienste haben alle zufällige Ports trotz der Edge-Dienste, die als Reverse-Proxy arbeiten (in meinem Fall zuul basiert). Diese Edge-Dienste haben stabile Ports.

+0

Hallo Patrick, mein Problem ist das Setzen des Ports in der Config Bean, so dass ich mit Eureka registrieren kann. Wie auch immer, ich habe jetzt die 'EurekaInstanceConfigBean' mit einer Version überschrieben, die' setNonSecurePort' ignoriert und einen alternativen Setter enthüllt - das funktioniert, fühlt sich aber hackig an ... –

Verwandte Themen