Amazon ELB in VPC

73

Wir verwenden Amazon EC2 und möchten einen ELB (Load Balancer) auf zwei Instanzen in einem privaten Subnetz setzen. Wenn wir nur das private Subnetz zur ELB hinzufügen, erhält es keine Verbindungen. Wenn wir beide Subnetze an die ELB anschließen, kann es auf die Instanzen zugreifen, es kommt jedoch häufig zu Zeitüberschreitungen. Hat jemand erfolgreich eine ELB im privaten Subnetz seiner VPC implementiert? Wenn ja, könnten Sie mir vielleicht die Vorgehensweise erklären?

Vielen Dank

Kevin Willock
quelle

Antworten:

189

Mein Teamkollege und ich haben gerade ELB in einer VPC mit 2 privaten Subnetzen in verschiedenen Verfügbarkeitszonen implementiert. Der Grund für das Timeout ist, dass für jedes Subnetz, das Sie dem Load Balancer hinzufügen, eine externe IP-Adresse abgerufen wird. (Versuchen Sie 'dig elb-dns-name-here' und Sie werden mehrere IP-Adressen sehen). Wenn eine dieser IP-Adressen einem privaten Subnetz zugeordnet ist, tritt eine Zeitüberschreitung auf. Die IP, die Ihrem öffentlichen Subnetz zugeordnet ist, funktioniert. Da DNS Ihnen möglicherweise eine der IP-Adressen gibt, funktioniert dies manchmal, manchmal tritt eine Zeitüberschreitung auf.

Nach einigem Hin und Her mit Amazon stellten wir fest, dass die ELB nur in "öffentlichen" Subnetzen platziert werden sollte, dh in Subnetzen, die eine Route zum Internet Gateway haben. Wir wollten unsere Webserver in unseren privaten Subnetzen behalten, aber der ELB erlauben, mit ihnen zu sprechen. Um dies zu lösen, mussten wir sicherstellen, dass wir für jede Verfügbarkeitszone, in der wir private Subnetze hatten, ein entsprechendes öffentliches Subnetz hatten. Anschließend haben wir der ELB die öffentlichen Subnetze für jede Verfügbarkeitszone hinzugefügt.

Zuerst schien dies nicht zu funktionieren, aber nachdem wir alles ausprobiert hatten, haben wir die ELB neu erstellt und alles hat so funktioniert, wie es sollte. Ich denke, das ist ein Fehler, oder die ELB war aufgrund so vieler Änderungen nur in einem merkwürdigen Zustand.

Hier ist mehr oder weniger das, was wir getan haben:

  1. WebServer-1 wird in PrivateSubnet-1 in der Verfügbarkeitszone us-east-1b mit der Sicherheitsgruppe Webserver ausgeführt.
  2. WebServer-2 wird in PrivateSubnet-2 in der Verfügbarkeitszone us-east-1c mit der Sicherheitsgruppe Webserver ausgeführt.
  3. Erstellt ein öffentliches Subnetz in der Zone us-east-1b, nennen wir es PublicSubnet-1. Wir haben sichergestellt, dass wir die Routing-Tabelle, die die Route zum Internet-Gateway (ig-xxxxx) enthält, diesem neuen Subnetz zugeordnet haben. (Wenn Sie mit dem Assistenten eine öffentliche / private VPC erstellt haben, ist diese Route bereits vorhanden.)
  4. Erstellt ein öffentliches Subnetz in der Zone us-east-1c, nennen wir es PublicSubnet-2. Wir haben sichergestellt, dass wir die Routing-Tabelle, die die Route zum Internet-Gateway (ig-xxxxx) enthält, diesem neuen Subnetz zugeordnet haben. (Wenn Sie mit dem Assistenten eine öffentliche / private VPC erstellt haben, ist diese Route bereits vorhanden.)
  5. Erstellt eine neue ELB und fügt ihr PublicSubnet-1 und PublicSubnet-2 hinzu (nicht das PrivateSubnet-X). Wählen Sie außerdem die Instanzen aus, die in der ELB ausgeführt werden sollen, in diesem Fall WebServer-1 und WebServer-2. Stellen Sie sicher, dass Sie eine Sicherheitsgruppe zuweisen, die eingehende Ports 80 und 443 zulässt. Rufen Sie diese Gruppe elb-group auf.
  6. Lassen Sie in der Webservergruppe den Datenverkehr von Port 80 und 443 von der Elb-Gruppe zu.

Ich hoffe das hilft!

Nathan Pahucki
quelle
1
Dies ist eine gute Quelle für verwandte Informationen: forums.aws.amazon.com/thread.jspa?messageID=453594
andres.riancho
5
Ich bedauere, dass ich nur eine Gegenstimme zu geben habe. Vielen Dank! Ich habe die letzten 2 Stunden meinen Kopf gegen die Wand geschlagen, um das herauszufinden.
Cfreak
2
Wenn ich das millionenfach verbessern könnte, würde ich es tun. Vielen Dank!
Craig Watson
1
Ihre Webserver befinden sich also sowohl im öffentlichen als auch im privaten Netzwerk?
Michel Feldheim
1
Ich stehe genau vor dem gleichen Problem, aber ich bin immer noch betroffen. Wenn ich PublicSubnet-X hinzufüge (nicht das PrivateSubnet-X), wird meine an ELB angehängte Instanz abgerufen, OutOfServiceda ich keine Instanz im öffentlichen Subnetz habe. Die Anzahl der Instanzen zeigt 0. Wenn ich beide hinzufüge, funktioniert die Instanz normal, aber dann stehe ich vor dem Timeout-Problem. Vermisse ich etwas Kann mir bitte jemand helfen?
manish_s
16

Der Schlüssel hier ist das Verständnis, dass Sie ELB nicht "Subnetze / Verfügbarkeitszonen hinzufügen", sondern angeben, in welche Subnetze ELB-Instanzen eingefügt werden sollen.

Ja, ELB ist ein Software-Load-Balancer. Wenn Sie ein ELB-Objekt erstellen, wird eine benutzerdefinierte EC2-Instanz für den Load-Balancing in alle von Ihnen angegebenen Subnetze eingefügt. Damit auf die ELB (ihre Instanzen) zugegriffen werden kann, müssen sie in die Subnetze eingefügt werden, deren Standardroute über IGW konfiguriert wurde (höchstwahrscheinlich haben Sie diese Subnetze als öffentlich klassifiziert).

Wie oben bereits beantwortet, müssen Sie "öffentliche" Netzwerke für ELB angeben, und diese Netzwerke sollten von den AZs stammen, in denen Ihre EC2-Instanzen ausgeführt werden. In diesem Fall können ELB-Instanzen Ihre EC2-Instanzen erreichen (sofern die Sicherheitsgruppen korrekt konfiguriert sind).

RSH
quelle
Sie machen einen wichtigen Punkt in Ihrem ersten Satz. Die AWS-Konsole ist in dieser Hinsicht nicht intuitiv. Es lässt vermuten, dass Sie etwas falsch machen, wenn Sie keine EC2-Instanzen aus Ihren privaten Subnetzen sehen, wenn Sie die ELB in den öffentlichen Subnetzen bereitstellen.
Jeff Loughridge
3

Wir haben ELB in einem privaten Subnetz implementiert, sodass die Aussage, dass alle ELBs öffentlich sein müssen, nicht vollständig wahr ist. Du brauchst ein NAT. Erstellen Sie ein privates Subnetz für die privaten ELBs, aktivieren Sie VPC-DNS und stellen Sie sicher, dass die private Routing-Tabelle für die NAT-Konfiguration konfiguriert ist. Die Subnetz-Sicherheitsgruppen müssen auch eingerichtet werden, um Datenverkehr zwischen ELB und App sowie App-zu-DB-Subnetzen zu ermöglichen.

Beanstalk-Integritätsprüfungen funktionieren nicht, da sie den Load Balancer nicht erreichen können. Für Dienste, die außerhalb der Reichweite der Öffentlichkeit liegen müssen, ist dies jedoch ein guter Kompromiss.

Empfohlene Lektüre für den Start Ihrer VPC-Architektur: http://blog.controlgroup.com/2013/10/14/guided-creation-of-cloudformation-templates-for-vpc/ .

Mike Lapinskas
quelle
2

Sie müssen die folgenden Einstellungen hinzufügen.

  1. Öffentliche Subnetzzone b = Server NAT
  2. Private Subnetzzone c = Server Web
  3. Öffentliche Subnetzzone c = ELB

Der Trick ist das Routing:

  1. Der Router zu NAT ist mit Gateway A verbunden.
  2. Der Router zum Server Web ist mit NAT verbunden.
  3. Der Router zum öffentlichen Subnetz ist mit Gateway A verbunden.

ELB Details:

1.Zone: Öffentliche Subnetzzone c 2.Instanz: Server Web 3.Sicherheitsgruppen: Ports aktivieren

http://docs.amazonaws.cn/en_us/ElasticLoadBalancing/latest/DeveloperGuide/UserScenariosForVPC.html

Roberto Carlos Reyes Fernandez
quelle
Ich fand auch diese Anweisungen hilfreich: docs.aws.amazon.com/AmazonVPC/latest/UserGuide/…
BatteryAcid