Ich suche nach einer Möglichkeit, einem ECS-Dienst (EC2, nicht Fargate) einen Domänennamen hinzuzufügen.
Um es klar zu sagen, ich suche nach einer Lösung, die DNS löst einen Domänennamen A oder AAAA Namen(möglicherweise CNAME, wenn es auf A oder AAAA zeigt). Es ist mir egal, für welchen Netzwerkmodus das funktioniert. Der Container kann in einem der folgenden Netzwerke platziert werden host
: bridge
, ,awsvpc
wenn die Lösung funktioniert!
awsvpc
ist außerhalb von Fargate nicht realisierbar
Lösungen, die AWS VPC erfordern, scheinen mit ECS/EC2 nicht kompatibel zu sein und nur für Fargate geeignet zu sein. GrundHier:
Jede Amazon ECS-Aufgabe, die den awsvpc-Netzwerkmodus verwendet, erhält ihre eigene Elastic Network-Schnittstelle (ENI), die an die Amazon EC2-Instance angeschlossen ist, die sie hostet.Es gibt ein Standardkontingent für die Anzahl der Netzwerkschnittstellendas an eine Amazon EC2 Linux-Instance angehängt werden kann.Die primäre Netzwerkschnittstelle zählt als eine Schnittstelle zu diesem Kontingent..
Ein t3.medium
kann also nur 2 Aufgaben ausführen und sogar ein t3.2xlarge
kann nur 3 Aufgaben ausführen (GrenzenHier)
Service Discovery ist nicht durchführbar
Service Discovery fügt nur DNS-Einträge vom Typ SRV für Netzwerkcontainer hinzu host
. bridge
Die meisten von uns ausgeführten Programme verstehen keine SRV-Einträge. Wir benötigen A- und AAAA-Einträge.
Service Discovery erstellt A- und AAAA-Einträge für awsvpc
Netzwerktypcontainer … wieder awsvpc
nicht durchführbar.
AWS App Mesh ist nicht realisierbar
Wir haben versucht, App Mesh einzurichten und bekamen fast sofort die Antwort, dass unsere Aufgabenawsvpc
¯\(ツ)/¯
Load Balancer scheinen nicht rentabel zu sein
Dies könnte für einige Dienste funktionieren. Dann fallen wir jedoch in große Schwierigkeiten, entweder weil der Dienst nicht HTTP ist oder weil der Dienst erfordert, dass Clients mit SSL-Client-Zertifikaten authentifiziert werden.
Die Erstellung vieler IP-Load Balancer für Nicht-HTTP-/Client-SSL-Dienste ist zu teuer.
<Schimpferei>
Soweit ich weiß, hätte Kubernetes das trivial gemacht. Sogar Docker Swarm hat das. Ich bin wirklich schockiert, wie viele Stunden wir damit verbracht haben, nach dieser einen trivialen Sache zu suchen.<\rant>
Frage
Wie füge ich einem ECS/EC2-Container ohne Load Balancer einen Domänennamen hinzu?
Antwort1
Zur Klarstellung: Sie möchten keine eindeutige elastische Netzwerkschnittstelle an den ECS-Container anhängen (aufgrund der Beschränkungen pro Instanz), da dies leicht zu terraformieren wäre oder was auch immer.
Erstellen Sie Ihre eigene AppMesh-Lösung über systemd:
Verwenden Sie ein Bash-Skript, das über den Systemd-Start ausgeführt wird, um auf IMDS zuzugreifen und die öffentliche IP-Adresse für den ECS-Dienst zu suchen. Anschließend können Sie mithilfe einer AWS-CLI einen DNS-Eintrag aktualisieren. Dies ist offensichtlichsehrspäte Bindung, stellen Sie also sicher, dass Sie den TTL sehr niedrig einstellen.
- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
- https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v4.html
Nächste Antwort: „Tu das nicht“
Antwort2
Die Frage ist mir nicht klar. Service Discovery unterstützt einen Domänennamen (Namespace). Soweit ich weiß, ist das sogar obligatorisch. Mit anderen Worten: Wenn Sie SD für einen aufgerufenen ECS-Dienst verwenden möchten, myservice
müssen Sie darauf verweisen, myservice.<domain>
wobei <domain>
ein beliebiger Namespace ist, den Sie definieren müssen (z. B. .local oder .my.domain).Hier ist ein Beispieleines Stapels, der SD verwendet.
Beachten Sie, dass dies allesinternzum Cluster und wie die interne Diensterkennung funktioniert (z. B. wie ein ECS-Dienst einen anderen ECS-Dienst erkennt).
[Bearbeiten] Wenn Sie Ihre ECS-Dienste verfügbar machen möchten, aber KEINEN Load Balancer verwenden möchten, besteht eine weitere Möglichkeit darin, API GW alsbeschrieben in diesem Blogbeitrag. Im Allgemeinen möchten Sie keine zufälligen öffentlichen IP-Adressen von Fargate-Aufgaben in R53 registrieren, da diese flüchtig sind und Sie einen komplexen Mechanismus erstellen müssen, um sie bei der Ankunft und Abreise von Fargate-Aufgaben auf dem gleichen Stand zu halten. Haben Sie auch in Betracht gezogenApp Runner?
Antwort3
Wie wäre es mithttps://aws.amazon.com/cloud-map/?
So funktioniert Docker-Compose damit: