
Ich habe einen Fargate-Cluster auf AWS eingerichtet. Mein Cluster hat FolgendesDienstleistungen:
- Server-A (Port 3000)
- Server-B (Port 4000)
Jeder Dienst befindet sich im selben VPC und hat dieselbe Sicherheitsgruppe (beliebige Ports, beliebige Quelle, beliebiges Ziel). Das VPC ist vom Internet isoliert.
Nun möchte ich, dass Server A eine HTTP-Abfrage an Server B sendet. Ich gehe davon aus, dass es wie in Docker Swarm einen privaten DNS gibt, der den Dienstnamen seiner privaten IP zuordnet. Dann wäre es ganz einfach, die Abfrage an Folgendes zu senden:http://server-B:4000. Allerdings tritt bei Server-A ein Timeout auf, wodurch er Server-B nicht erreichen kann.
Ich habe in der Dokumentation gelesen, dass ich die beiden Container in denselben Dienst stellen kann, wobei jeder Container auf einem anderen Port lauscht, so dass ich dank der Loopback-Schnittstelle von Server-A aus abfragen könntehttp://127.0.0.1:4000und Server B wird antworten und umgekehrt.
Ich möchte jedoch in der Lage sein, Server-A und Server-B zu skalierenunabhängig, daher halte ich es für sinnvoll, die Unabhängigkeit der einzelnen Server voneinander zu wahren, indem man zwei Dienste hat.
Ich habe gelesen, dass ich einen Load Balancer einrichten muss, damit zwei Aufgaben miteinander kommunizieren können. Aus der Welt von Docker Swarm kommend, war es so einfach, die Dienste anhand ihres Dienstnamens abzufragen, und im Hintergrund wurde die Anfrage an einen der Container in diesem Dienst weitergeleitet. Aber bei AWS Fargate scheint das nicht so zu funktionieren.
Fragen:
- wie kann Server A mit Server B kommunizieren?
- Da Dienste manchmal neu bereitgestellt werden, ändert sich ihre private IP, sodass es keinen Sinn macht, nach IP abzufragen. Die Abfrage nach Hostnamen scheint der natürlichste Weg zu sein
- Muss ich eine Art internes DNS einrichten?
Vielen Dank für Ihre Hilfe. Ich bin bei dieser einfachen Einrichtung völlig überfordert.
Antwort1
Nach einiger Suche fand ich heraus, dass es daran lag, dass ich bei der Diensterstellung „Service Discovery“ nicht aktiviert hatte, sodass kein privater DNS erstellt wurde. Hier ist eine zusätzliche Dokumentation, die die Schritte genau erklärt:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html