Leitet die ELB auch ausgehenden Antwortverkehr in AWS weiter?

8

Ich habe versucht zu verstehen, wie das Routing in einer AWS VPC mit öffentlichen / privaten Subnetzen funktioniert.

Ich habe ein von Amazon empfohlenes Setup mit einer ELB und NAT im öffentlichen Subnetz und dem Webserver im privaten Subnetz. Ich habe Sicherheitsgruppen (SG) gemäß http://blogs.aws.amazon.com/security/blog/tag/NAT konfiguriert und alles funktioniert wie erwartet. Großartig!

Referenzarchitektur mit Amazon VPC-Konfiguration

Was ich noch nicht verstehe, ist, wie HTTP-Antworten von der Webserver-Instanz in der obigen Architektur zurückgegeben werden.

Also kommt eine Webanforderung aus dem öffentlichen Internet über HTTP, 80 Treffer ELB und ELB bringt sie auf die private IP des Webservers, cool. Jetzt muss der Webserver antworten. Soweit ich weiß, erfolgt die Antwort über einen anderen höheren TCP-Port (1024-65535). Die NAT SG erlaubt nur ausgehenden Verkehr über die Ports 80 und 443. Wie gelangt diese Antwort zurück ins öffentliche Internet? Es kann nicht durch das NAT gehen. Bedeutet dies, dass die Antwort über die ELB zurückgesendet wird? Das Amazon-Diagramm zeigt weder den ELB-Verkehrsrichtungspfeil als bidirektional an, noch gibt die ELB-Dokumentation an, dass sich die ELB wie ein zustandsbehaftetes NAT verhält. Macht es?

Ali
quelle

Antworten:

11

Die Pfeile im Diagramm geben nur die Richtung des Verbindungsaufbaus an - nicht den Verkehrsfluss.

Ja, der Rückverkehr geht über die ELB zurück.

Es handelt sich jedoch nicht um ein statusbehaftetes NAT, sondern um einen TCP-Verbindungsproxy. Die ELB-Computer akzeptieren TCP-Verbindungen an den konfigurierten Überwachungsports, beenden die SSL-Sitzung, falls dies konfiguriert ist, und stellen eine neue TCP-Verbindung zum Back-End-Server her. Wenn der Listener für HTTP konfiguriert ist, arbeitet der ELB in einem Payload-fähigen Modus, der HTTP-Anforderungen analysiert, protokolliert und an das Back-End weiterleitet. Andernfalls ist er payload-unabhängig und stellt eine neue TCP-Verbindung 1: 1 zum Back-End her für jede eingehende Verbindung und "Zusammenbinden der Pipes" (ohne Kenntnis oder Änderung auf HTTP-Ebene).

In beiden Fällen ist die Quelladresse der eingehenden Verbindung zu Ihrer Anwendung die des ELB-Knotens und nicht die des ursprünglichen Clients. Auf diese Weise kehrt der Antwortverkehr zur Rückgabe an den Client an die ELB zurück.

Im http-Modus fügt der ELB den X-Forwarded-ForHeader hinzu (oder hängt ihn an), damit Ihre Anwendung die ursprüngliche Client-IP identifizieren kann, um X-Forwarded-Proto: [ http | https ]anzugeben, ob die Client-Verbindung SSL verwendet, und X-Forwarded-Portum den Front-End-Port anzugeben.


Update: Das Obige bezieht sich auf einen Typ von Load Balancer, der jetzt als "ELB Classic" oder ELB / 1.0 bekannt ist (in der Benutzeragentenzeichenfolge enthalten, die mit HTTP-Integritätsprüfungen gesendet wird).

Der neuere Layer 7-Balancer, Application Load Balancer oder ELB / 2.0 funktioniert in Bezug auf den Verkehrsfluss ähnlich. Die Layer 4-Funktion ("transparentes" TCP) wurde aus ALB entfernt und die Layer 7-Funktionen wurden erheblich verbessert.

Der neueste Typ von Load Balancer, der Network Load Balancer, ist ein Layer 3-Balancer. Im Gegensatz zu den beiden anderen verhält es sich sehr ähnlich wie dynamisches NAT, verarbeitet nur eingehende (von außen stammende) Verbindungen und ordnet Quell-Adr + Port über EIP-Adresse + Port der Instanz-Private-IP: ADDE + Port - mit der EIP zu an den "Balancer" gebunden - und im Gegensatz zu den beiden anderen Balancertypen müssen sich die Instanzen in öffentlichen Subnetzen befinden und hierfür ihre eigenen öffentlichen IP-Adressen verwenden.

Konzeptionell scheint der Network Load Balancer tatsächlich das Verhalten des Internet-Gateways zu ändern - das selbst ein logisches Objekt ist, das nicht deaktiviert, ersetzt oder in einem sinnvollen Sinne fehlerhaft behandelt werden kann. Dies steht im Gegensatz zu ELB und ALB, die tatsächlich auf "versteckten" EC2-Instanzen arbeiten. NLB arbeitet anscheinend auf der Netzwerkinfrastruktur selbst.

Michael - sqlbot
quelle
Vielen Dank. Könnten Sie die Nutzlast-fähigen, Nutzlast-unabhängigen Modi näher erläutern? Kann der Webserver auch wissen, ob die ursprüngliche Verbindung über SSL hergestellt wurde?
Ali
Ich habe der Antwort einige zusätzliche Informationen hinzugefügt, um diese Punkte anzusprechen.
Michael - sqlbot
and unlike the other two types of balancers, the instances need to be on public subnets, and use their own public IPs for this. Ich bin sehr froh, das zu lesen. Können Sie einen Verweis auf diese Informationen geben?
Felipe Alvarez
1
@FelipeAlvarez Wie sich herausstellt, ist das gesamte Bild wesentlich komplexer. Während dies die intuitivste Konfiguration ist, ist Network Load Balancer so in die eigentliche Netzwerkinfrastruktur integriert, dass die TCP-Streams (vermutlich über die Netzwerkstatustabellen) von den Zielinstanzen erfasst und neu geschrieben werden können und auch dann wie erwartet funktionieren Die Instanzen sind nicht auf diese Weise konfiguriert. Zielinstanzen benötigen eine in VPC deklarierte Standardroute. Diese wird für die Rückgabepakete nicht berücksichtigt, muss jedoch weiterhin vorhanden sein. Das Fehlen einer Standardroute erzeugt ein Schwarzes Loch.
Michael - sqlbot
1

Gemäß der AWS-Dokumentation für NLB handelt es sich um Schicht 4 und nicht um Schicht 3. Außerdem müssen sich die Backend- oder Zielserver nicht in einem öffentlichen Subnetz befinden. Tatsächlich müssen die IP-Adressbereiche der Zielgruppen eine der folgenden sein: Folgende Zieltypen sind möglich:

Instanz Die Ziele werden durch die Instanz-ID angegeben.

ip Die Ziele werden durch die IP-Adresse angegeben.

Wenn der Zieltyp IP ist, können Sie IP-Adressen aus einem der folgenden CIDR-Blöcke angeben:

Die Subnetze der VPC für die Zielgruppe

10.0.0.0/8 (RFC 1918)

100.64.0.0/10 (RFC 6598)

172.16.0.0/12 (RFC 1918)

192.168.0.0/16 (RFC 1918)

Wichtig

Sie können keine öffentlich routbaren IP-Adressen angeben.

Ich hoffe das hilft.

RBP
quelle