View a markdown version of this page

Konfiguration des Netzwerks für Beanstalk Cluster-Umgebungen - AWS Elastic Beanstalk

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfiguration des Netzwerks für Beanstalk Cluster-Umgebungen

Beanstalk Cluster führt Ihre Umgebung auf einem Amazon EKS-Cluster aus. Die Subnetze, die Sie auswählen, haben zwei Funktionen: Sie bestimmen, wo die Knoten des Clusters laufen, und sie bestimmen, auf welchem Cluster die Umgebung ausgeführt wird. Wenn Sie keine Subnetze auswählen, verwendet Elastic Beanstalk die öffentlichen Subnetze der Standard-VPC.

In diesem Thema werden die Subnetze der Umgebung behandelt, wie der Datenverkehr Ihre Anwendung von außerhalb des Clusters erreicht und wie Ihre Umgebungen innerhalb des Clusters aufeinander reagieren.

Subnetze der Umgebung

Stellen Sie die subnets Option im aws:elasticbeanstalk:eks:environment Namespace auf eine kommagetrennte Liste von Subnetz-IDs ein.

Da Subnetze den Cluster auswählen, legen Sie sie fest, wenn Sie die Umgebung erstellen:

$ aws elasticbeanstalk create-environment \ --application-name my-app \ --environment-name my-cluster-env \ --option-settings '[{"Namespace":"aws:elasticbeanstalk:eks:environment","OptionName":"subnets","Value":"subnet-abc123,subnet-def456"}]'

Die Einstellung wird als JSON geschrieben, da die Subnetzliste ein Komma enthält, das in der AWS CLI Kurzform als Trennzeichen zwischen Feldern behandelt wird. Informationen zu den Formularen, die von AWS CLI akzeptiert werden, finden Sie unter Verwenden der Abkürzungssyntax im. AWS CLI

Elastic Beanstalk gruppiert Umgebungen anhand dieser Subnetzgruppe in Clustern, sodass Umgebungen mit demselben Konto, die dieselben Subnetze verwenden, auf demselben Cluster ausgeführt werden und eine Umgebung, die eine andere Gruppe verwendet, auf einem anderen Cluster ausgeführt wird. Die Reihenfolge der Subnetze spielt keine Rolle. Die Gruppierungsregeln und die Ereignisse, die eine Clusterzuweisung melden, finden Sie unter. Gruppierung der Umgebung

Wie erreicht der Datenverkehr Ihre Anwendung

Die load-balancer-type Option im aws:elasticbeanstalk:eks:environment Namespace bestimmt, wie der Datenverkehr Ihre Anwendung erreicht. Sie akzeptiert zwei Werte:

  • ALB, die Standardeinstellung. Elastic Beanstalk erstellt und betreibt einen Application Load Balancer für die Umgebung. Sie können ihn über den aws:elasticbeanstalk:eks:alb Namespace konfigurieren oder einen Application Load Balancer bereitstellen, den Sie bereits besitzen.

  • None. Elastic Beanstalk erstellt keinen Load Balancer und die Umgebung ist von außerhalb des Clusters über Elastic Beanstalk nicht erreichbar. Andere Umgebungen auf demselben Cluster können ihn immer noch über seine Clusteradresse erreichen.

Netzwerkeinstellungen für den Load Balancer

Der Application Load Balancer der Umgebung hat seine eigenen Netzwerkeinstellungen im aws:elasticbeanstalk:eks:alb Namespace.

Option Standard Description
subnets Keine Eine durch Kommas getrennte Liste von Subnetzen für den Load Balancer.
scheme Abgeleitet von Ihren Subnetzen Ob der Load Balancer über das Internet erreichbar ist, entweder oderinternet-facing. internal Wenn Sie es nicht einrichten, leitet Elastic Beanstalk es von den Subnetzen ab, die Sie auswählen: Öffentliche Subnetze bieten einen mit dem Internet verbundenen Load Balancer, und private Subnetze bieten einen internen.
security-groups Keine Eine durch Kommas getrennte Liste von Sicherheitsgruppen für den Load Balancer.
manage-backend-security-group-rules true Ob Elastic Beanstalk die Sicherheitsgruppenregeln zwischen dem Load Balancer und Ihrer Anwendung verwaltet.

Listener und HTTPS

Die listen-ports Option im aws:elasticbeanstalk:eks:alb Namespace listet die Listener des Load Balancers als JSON-Array auf, das beispielsweise jedes Protokoll einem Port zuordnet. [{"HTTPS":443},{"HTTP":80}]

Elastic Beanstalk stellt sicher, dass der Load Balancer HTTPS irgendwo beendet:

  • Wenn Sie dies nicht festlegenlisten-ports, konfiguriert Elastic Beanstalk einen HTTPS-Listener auf Port 443.

  • Wenn Sie einen HTTPS-Listener an einem beliebigen Port einrichten listen-ports und dieser bereits enthält, verwendet Elastic Beanstalk Ihre Konfiguration unverändert.

  • Wenn Sie listen-ports ohne HTTPS-Listener einrichten, fügt Elastic Beanstalk einen an Port 443 hinzu. Wenn Port 443 bereits von einem Listener belegt ist, der ein anderes Protokoll verwendet, schlägt die Anfrage fehl und der Fehler fordert Sie auf, Port 443 freizugeben oder einen expliziten HTTPS-Listener an einem anderen Port hinzuzufügen.

Der Load Balancer öffnet nur die Listener, mit denen er konfiguriert ist. In der Standardkonfiguration ist das HTTPS auf Port 443 und nichts auf Port 80, sodass eine Anfrage an http:// keine Verbindung herstellt und wartet, bis ein Timeout eintritt. Auf die URL Ihrer Umgebung https:// folgt der CNAME der Umgebung. DescribeEnvironmentsgibt den CNAME ohne Schema zurück. Fügen Sie ihn also hinzu, https:// wenn Sie ihn öffnen.

Sie geben kein Zertifikat an, damit das funktioniert. Elastic Beanstalk erstellt ein AWS Certificate Manager (ACM) -Zertifikat für die eigene Domäne der Umgebung, hängt es an den HTTPS-Listener an und erneuert es, sodass ein Browser dem CNAME der Umgebung ohne jegliche Konfiguration vertraut. Elastic Beanstalk erstellt ein Zertifikat für jede Umgebung und löscht es, wenn Sie die Umgebung beenden.

Um die Umgebung von einer eigenen Domain aus zu bedienen, geben Sie den ARN Ihres Zertifikats in die Option ein. certificate-arn Der Load Balancer überträgt dann Ihr Zertifikat zusätzlich zu dem, das Elastic Beanstalk erstellt hat, und Sie sind weiterhin dafür verantwortlich, Ihr Zertifikat zu erneuern und zu löschen.

Um auch HTTP-Anfragen zu akzeptieren, fügen Sie einen HTTP-Listener hinzu listen-ports und legen Sie ihn auf den Port eines HTTPS-Listeners festssl-redirect. Elastic Beanstalk leitet Anfragen von HTTP-Listenern an Ihren HTTPS-Listener weiter. Ein HTTP-Listener bedient den Anwendungsdatenverkehr niemals direkt. ssl-redirectwählt aus, auf welchen HTTPS-Port die Umleitung abzielt. Wenn Sie ihn nicht festlegen, verwendet Elastic Beanstalk den Port Ihres HTTPS-Listeners. Ein listen-ports Wert ist selbst ein JSON-Dokument. Übergeben Sie die Einstellungen also in einer Datei, anstatt sie in die Befehlszeile zu schreiben:

$ cat listeners.json [ { "Namespace": "aws:elasticbeanstalk:eks:alb", "OptionName": "listen-ports", "Value": "[{\"HTTPS\":443},{\"HTTP\":80}]" }, { "Namespace": "aws:elasticbeanstalk:eks:alb", "OptionName": "ssl-redirect", "Value": "443" } ] $ aws elasticbeanstalk update-environment \ --environment-name my-cluster-env \ --option-settings file://listeners.json

Elastic Beanstalk fügt den HTTPS-Listener nicht hinzuNone, wenn Sie dies einstellen load-balancer-type oder wenn Sie Ihren eigenen Load Balancer mit ausstatten. arn Da None die Umgebung überhaupt keinen Load Balancer hat, hat sie auch keine Listener. Wenn Sie Ihren eigenen Load Balancer bereitstellen, können Sie dessen Listener-Konfiguration selbst verwalten.

Verwenden Sie einen Load Balancer, den Sie besitzen

Um einen vorhandenen Load Balancer vor die Umgebung zu stellen, setzen Sie die arn Option im aws:elasticbeanstalk:eks:alb Namespace auf seinen ARN. Der Wert muss ein Application Load Balancer sein. Elastic Beanstalk lehnt den ARN eines Network Load Balancers ab.

Wenn Sie einen Load Balancer bereitstellen, sind Sie Eigentümer seiner Konfiguration: seiner Listener, seines TLS-Zertifikats und seines Schemas. Elastic Beanstalk registriert Ihre Anwendung als Ziel und meldet Ihren Load Balancer als Load Balancer der Umgebung. Es DescribeEnvironmentResources gibt also den von Ihnen angegebenen Load Balancer zurück und nicht einen, den Elastic Beanstalk erstellt hat.

Umgebungen ohne Load Balancer

Wenn Sie load-balancer-type diese Option festlegenNone, erstellt Elastic Beanstalk keinen Load Balancer für die Umgebung und DescribeEnvironmentResources meldet keine Load Balancer. Verwenden Sie dies für eine Umgebung, die nur andere Umgebungen auf demselben Cluster bedient, z. B. eine interne API oder einen Worker, den die Aufrufer direkt erreichen.

Zwei Konsequenzen, die es zu berücksichtigen gilt:

  • Die Integritätssignale des Load Balancers gelten nicht, da es keinen Load Balancer gibt, der eine Anforderungsrate, eine Fehlerrate oder eine Latenz meldet. Verwenden Sie Container-Probes und Ihre Observability-Backends, um zu beurteilen, ob die Anwendung funktioniert. Siehe Überwachung von Beanstalk Cluster-Umgebungen.

  • Aufrufer erreichen die Umgebung über ihre Adresse im Cluster, die im nächsten Abschnitt beschrieben wird.

Adressierung einer Umgebung von einer anderen aus

Jede Beanstalk Cluster-Umgebung ist innerhalb ihres Clusters unter einer vorhersehbaren Adresse erreichbar, die sich aus dem Namen der Umgebung zusammensetzt:

service-environment-name.eb-environment-name.svc.cluster.local:service-port

Der Port gehört der Umgebung. service-port Elastic Beanstalk führt jede Umgebung in einem Kubernetes-Namespace aus, dem der Name der Umgebung eb- folgt, der zweite Name der Adresse. Übergeben Sie die Adressen, die Ihre Anwendung benötigt, als Umgebungsvariablen, indem Sie die Option im env-variables Namespace verwenden: aws:elasticbeanstalk:eks:environment

Der Wert von env-variables ist selbst ein JSON-Dokument. Übergeben Sie die Optionseinstellungen also in einer Datei und nicht in der Befehlszeile. Speichern Sie Folgendes unteroptions.json:

[ { "Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "env-variables", "Value": "{\"NOTIFIER_URL\":\"http://service-my-notifier.eb-my-notifier.svc.cluster.local:8080\"}" } ]

Dann wende es an:

$ aws elasticbeanstalk update-environment \ --environment-name my-frontend \ --option-settings file://options.json

Diese Adressierung funktioniert nur zwischen Umgebungen, die auf demselben Cluster ausgeführt werden, d. h. Umgebungen, die dieselben Subnetze verwenden. Das Auflösen der Adresse ist nicht dasselbe wie das Herstellen einer Verbindung. Beanstalk Cluster blockiert standardmäßig den Verkehr zwischen Umgebungen auf einem gemeinsam genutzten Cluster, sodass der Name aufgelöst wird und die Verbindung immer noch fehlschlägt, bis Sie dies zulassen. Siehe Ermöglicht die Kommunikation zwischen Umgebungen.

Anmerkung

Da die Adresse den Umgebungsnamen enthält, müssen Sie den Namen einer Umgebung kennen, bevor eine andere Umgebung sie adressieren kann. Planen Sie die Namen einer Reihe von Umgebungen, die sich gegenseitig aufrufen, bevor Sie sie erstellen.

Einstellungen, die Sie bei der Erstellung auswählen

Sie können die Subnetze einer Umgebung nicht mehr ändern, nachdem Sie sie erstellt haben, da sie den Cluster auswählen. Das Gleiche gilt für die Rollen Cluster, Knoten und Observability. Um Ihre Anwendung in verschiedenen Subnetzen auszuführen, erstellen Sie eine neue Umgebung mit den gewünschten Subnetzen und tauschen Sie dann die beiden Umgebungs-CNAMES aus. Siehe Blue/Green Bereitstellungen mit Elastic Beanstalk.