Statische IP-Adresse für ausgehenden Datenverkehr von der AWS-Autoscaling-Gruppe

27

Ich werde eine Reihe von EC2-Instanzen in einer automatischen Skalierungsgruppe von Elastic Beanstalk in einem Standard-Subnetz in einer VPC haben. Die App auf diesen EC2-Instanzen muss eine Verbindung zu einem Drittanbieter herstellen, der eine IP-Adressen-Whitelist verwendet, um den Zugriff zu ermöglichen. Daher benötige ich eine oder mehrere statische IP-Adressen, die ich diesem Dienstanbieter geben kann, damit sie zur Whitelist hinzugefügt werden können. Ich verstehe, dass der einzige Weg, eine statische IP zu erhalten, darin besteht, eine elastische IP-Adresse zu erhalten. Und ich kann die Elastic IP-Adresse immer nur einer EC2-Instanz zuordnen - ich kann sie nicht meinem gesamten Subnetz oder Internet-Gateway zuordnen (ist das richtig?). Brauche ich eine Elastic IP für jede EC2-Instanz, damit jede Instanz separat auf die Whitelist gesetzt werden kann? Wie würde das funktionieren, wenn die automatische Skalierung eine weitere Instanz hinzufügt? Sollte ich eine EC2-Instanz mit einer elastischen IP haben, und den gesamten ausgehenden Verkehr über diese Instanz leiten? Wenn ja, muss diese Instanz nur für diesen Zweck eingerichtet sein, oder kann es sich um eine der Instanzen handeln, auf denen meine App ausgeführt wird?

davidwebster48
quelle

Antworten:

19

Du brauchst ein NAT. Diese Konfiguration wird häufig zur Unterstützung privater Subnetze in VPC verwendet. Eine ausführliche Anleitung finden Sie hier . Sobald Ihre VPC für die Verwendung der NAT-Instanz konfiguriert ist, wird der gesamte ausgehende Datenverkehr der EIP der NAT-Instanz zugeordnet.

Wenn ja, muss diese Instanz nur für diesen Zweck eingerichtet sein, oder kann es sich um eine der Instanzen handeln, auf denen meine App ausgeführt wird?

Technisch könnten Sie wahrscheinlich, aber es ist keine gute Idee:

  • Es ist eine gute Sicherheit, Rollen isoliert zu haben.
  • Sie möchten, dass Ihre Anwendungsserver ähnliche oder identische Lastprofile haben. Wenn eine Instanz aufgrund des NAT eine zusätzliche Auslastung von 10% aufweist, müssen Sie eine frühzeitige Skalierung durchführen, wenn Sie die Grenzen dieser Instanz erreichen. Dies wird noch schlimmer, je mehr Instanzen zu Ihrem Cluster hinzugefügt werden, je mehr NAT ausgelastet ist.
  • Sie möchten, dass Ihre Anwendungsserver identisch und kurzlebig sind, damit Sie sie abreißen und / oder ersetzen können, wenn ein Problem auftritt oder wenn Sie skalieren müssen. Ein Anwendungsserver, der sich vom Rest unterscheidet, würde große Kopfschmerzen bereiten.

Sie könnten damit durchkommen, wenn Ihre Instanzen containerisiert sind, aber es ist wahrscheinlich immer noch keine gute Idee.

Denken Sie auch daran, dass Ihre NAT-Instanz ein einzelner Fehlerpunkt sein kann. Daher sollten Sie über Redundanz nachdenken.

thexacre
quelle
Erhöht die Verwendung von NAT die Antwortzeit einer Anfrage, wenn eine zusätzliche Schnittstelle für Client und Server hinzugefügt wird?
r.bhardwaj
1
Ich habe NAT-Gateway verwendet, um den Zweck zu erreichen ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ), aber immer noch, wenn ich den nslookup zu meinem Server mache, gibt es andere öffentliche IP-Adresse als von NAT zurück gateway
r.bhardwaj
12

Ich verstehe, dass dies ein alter Thread ist - für jemanden, der jetzt einen ähnlichen Anwendungsfall hat, wäre AWS nat-gateway eine bessere Lösung.

Packetlord
quelle
4

Ich habe nicht genug Ruf, um die obigen Antworten zu kommentieren, aber ich wollte einige Informationen hinzufügen, die Sie wissen müssen, wenn Sie ein NAT-Gateway verwenden, um dies zu erreichen. Wenn Sie ein NAT-Gateway erstellen, wählen Sie ein Subnetz und eine elastische IP-Adresse aus.

Zuerst habe ich das NAT-Gateway zum selben Subnetz hinzugefügt, in dem sich mein Elastic Load Balancer und meine EC2-Instanzen befanden. Anschließend müssen Sie das NAT-Gateway zu Ihrer Routentabelle hinzufügen. Ich habe das NAT-Gateway als Ziel für die IP meines externen Datenbankservers hinzugefügt, mit dem ich Kontakt aufnehmen wollte. Dies führte dazu, dass die in meinem elastischen Bohnenstiel gehosteten Anwendungen eine Zeitüberschreitung aufwiesen. Dies liegt daran, dass sie versucht haben, über NAT eine Verbindung zu dieser externen Datenbank herzustellen. Sie erreichten das NAT, und dann versuchte das NAT, über das Internet auf meinen Server zuzugreifen, und suchte in der Routentabelle nach dem Subnetz, in dem es sich befand, das auf sich selbst zurückwies, und erstellte eine Schleife.

Die Lösung besteht darin, vor dem Erstellen Ihres NAT-Gateways ein neues Subnetz nur für das NAT zu erstellen, damit das NAT über ein eigenes Subnetz und eine eigene Routentabelle verfügt. Zeigen Sie in der Routentabelle des NAT den gesamten Datenverkehr auf das Internet-Gateway. Zeigen Sie in Ihrer Hauptroutentabelle Ihre externe IP auf NAT. Wenn Ihre EC2-Instanzen dann versuchen, eine Verbindung zu Ihrer externen IP-Adresse herzustellen, werden sie in der Hauptroutentabelle (oder in der Routentabelle, die Sie für die Subnetze definiert haben, in denen sich Ihre Instanzen befinden) nachgeschlagen und die NAT gefunden. Dann schlägt Ihr NAT diese IP in seiner eigenen Routentabelle nach und findet das Internet.

user339568
quelle
Ich würde gerne ein paar Screenshots sehen. Ich denke, das ist mein Problem, aber ich kann es nur zu 50%
ausmachen
Ich glaube, ich habe es so eingerichtet, aber wenn ich versuche, in die öffentliche IP meiner Instanz zu sshen, tritt eine Zeitüberschreitung auf. Benötigt die Instanz zwei Netzwerkgeräte, um über das NAT auch eingehende Verbindungen von einer öffentlichen IP empfangen zu können?
justin.m.chase
Sie müssen einer Instanz und dem externen Subnetz eine zweite Netzwerkschnittstelle hinzufügen und dieser Netzwerkschnittstelle dann eine elastische IP zuweisen. Sie können dann über diese IP eine Verbindung herstellen, der gesamte andere Datenverkehr wird jedoch weiterhin standardmäßig über das Netzwerk geleitet.
justin.m.chase