Wie füge ich einem ECS-Container (EC2/ECS-Dienst) ohne Lastenausgleich einen Domänennamen hinzu?

Wie füge ich einem ECS-Container (EC2/ECS-Dienst) ohne Lastenausgleich einen Domänennamen hinzu?

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!

awsvpcist 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.mediumkann also nur 2 Aufgaben ausführen und sogar ein t3.2xlargekann 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. bridgeDie 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 awsvpcNetzwerktypcontainer … wieder awsvpcnicht 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.

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, myservicemü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

verwandte Informationen