Wir haben einen Teil unseres Systems auf eine mikroserviceorientierte Architektur umgestellt. Um dies auszuführen, haben wir entschieden, sie als Andock-Container auszuführen. Unsere Architektur ist im Moment wie folgt:Docker zu VM Networking
a) Mehrere Web-Server, Hosting der noch monolithischen PHP-Anwendung
b) 3 neue VMs, die
- Ein laufen wird "Alarmierung" Micro
- A mongo DB Instanz
- Ein kundenspezifische Microregister (basierend auf redis)
Also, mein Problem ist wie folgt:
Unsere aktuelle Infrastruktur ist alles im Bereich 10.0.0.0/24. Docker spinnt Instanzen im Bereich 172.x.1.x
. Wie bekomme ich die Web-Server (läuft unter 10.0.0.0/24
), um eine Verbindung zu den Diensten herzustellen, die in der "Registrierung" registriert sind, zB 172.17.1.3
?
Ich habe über viele Erweiterungen gelesen, wie Schwarm, komponieren, etc. Aber das scheint nicht das Netzwerkproblem zu lösen.
Sie könnten sagen: "Nun, Sie haben bereits den relevanten Port des Alerting-Dienstes verfügbar, verbinden Sie einfach mit der IP-Adresse dieser VM", aber das Problem ist, wenn der Dienst (dh die NodeJS-Anwendung im Docker-Container) startet oben registriert es seinen exponierten Port mit der Dienst- "Registrierung". Die Registrierung verwendet die anfragende IP-Adresse, um eine Art Pfad aufzubauen. Der Dienst wird gestartet und in der "Registrierung" als 172.17.1.5:3001
registriert. Wenn dies der einzige Weg ist, gibt es keine Möglichkeit, die Host IP-Adresse der Dienste zu erhalten?
Irgendwelche Vorschläge? Hoffe, das macht Sinn!
Danke für jede Hilfe!
Danke für Ihre Antwort! Ich könnte mich vertippt haben, ich wollte nicht, dass die Docker-Instanz registriert wird. Was ich meine ist, dass wenn sich die Anwendung, die in docker läuft, startet, registriert sie sich mit einer "microservice-Registrierung".Von anderen Clients kann ich einfach {registry IP}/find? Key = alerting aufrufen, und das gibt die IP und den Port zurück, wo der Client auf die "alarmierende" Anwendung zugreifen kann. Wenn das Sinn macht? Meine Frage wurde entsprechend aktualisiert. – iLikeBreakfast
@iLikeBreakfast meine Antwort steht. Registry oder nicht, das Schlüsselelement hier ist: Wird Ihr Container innerhalb eines Docker-Daemons auf einem Rechner ausgeführt, oder laufen sie auf einem anderen Host, jeder mit einem eigenen Docker-Daemon? – VonC
Ich würde sie gerne auf verschiedenen Daemons laufen. Ich denke, es wird leichter skalierbar sein, wenn wir das gerade jetzt machen. Also 3 Container, die auf 3 verschiedenen VMs laufen. Unabhängig davon, wie würde eine externe Anwendung eine Verbindung zum internen Containernetzwerk herstellen? Ist das überhaupt möglich? Hat '10.0.0.2' zum Beispiel eine Verbindung zum Container' 172.17.1.23'? – iLikeBreakfast