L'ELB indirizza anche il traffico di risposte in uscita in AWS?


8

Ho cercato di capire come funziona il routing in un VPC AWS con sottoreti pubbliche / private.

Ho un setup come raccomandato da Amazon con ELB e NAT nella sottorete pubblica e il server web nella sottorete privata. Ho gruppi di sicurezza (SG) configurati come http://blogs.aws.amazon.com/security/blog/tag/NAT e tutto funziona come previsto. Grande!

Architettura di riferimento con configurazione Amazon VPC

Quello che non capisco ancora è come le risposte HTTP vengono restituite dall'istanza del server web nell'architettura sopra.

Quindi una richiesta web arriva da Internet pubblico su HTTP, 80 hit ELB e ELB la portano all'IP privato del server web, cool. Ora il server web deve rispondere. Da quello che ho capito la risposta sarà su una porta TCP superiore diversa (1024-65535). NAT SG consente solo il traffico in uscita sulle porte 80 e 443. Quindi, come fa questa risposta a tornare a Internet pubblica. Non può passare attraverso il NAT. Questo significa che la risposta torna indietro tramite ELB. Il diagramma di Amazon non indica la freccia della direzione del traffico ELB come bidirezionale, né la documentazione ELB afferma che l'ELB si comporta come un NAT con stato. Vero?

Risposte:


11

Le frecce nel diagramma indicano solo la direzione dello stabilimento della connessione, non il flusso del traffico.

Sì, il traffico di ritorno ritorna attraverso l'ELB.

Ma non è un NAT con stato: è un proxy di connessione TCP. Le macchine ELB accettano connessioni TCP sulle porte di ascolto configurate, terminando la sessione SSL se così configurata e stabiliscono una nuova connessione TCP al server back-end. Se il listener è configurato per HTTP, ELB opera in modalità in grado di supportare il payload, analizzando, registrando e inoltrando le richieste HTTP al back-end, altrimenti è payload-agnostic, stabilendo una nuova connessione TCP 1: 1 al back-end per ogni connessione in entrata e "unendo i tubi" (senza consapevolezza o modifica a livello HTTP).

In entrambi i casi, l'indirizzo di origine della connessione in entrata all'applicazione sarà quello del nodo ELB, non del client originale. Ecco come il traffico di risposta ritorna all'ELB per il ritorno al client.

In modalità http, ELB aggiunge (o accoda) l' X-Forwarded-Forintestazione in modo che l'applicazione possa identificare l'IP client originale, nonché X-Forwarded-Proto: [ http | https ]per indicare se la connessione client utilizza SSL e X-Forwarded-Portper indicare la porta front-end.


Aggiornamento: quanto sopra si riferisce a un tipo di bilanciamento del carico che ora è noto come "ELB Classic" o ELB / 1.0 (presente nella stringa dell'agente utente che invia con i controlli di integrità HTTP).

Il più nuovo bilanciatore di livello 7, Application Load Balancer o ELB / 2.0 funziona in modo simile, rispetto al flusso di traffico. La funzionalità di livello 4 ("trasparente" TCP) è stata rimossa da ALB e le funzionalità di livello 7 sono state notevolmente migliorate.

Il più nuovo tipo di bilanciamento del carico, Network Load Balancer, è un bilanciamento di livello 3. A differenza degli altri due, si comporta in modo molto simile al NAT dinamico, gestendo solo le connessioni in entrata (originate all'esterno), mappando source-addr + port tramite EIP-addr + port su istanza-private-ip: adde + port - con l'EIP associato al "bilanciamento" - e diversamente dagli altri due tipi di bilanciatori, le istanze devono essere su sottoreti pubbliche e utilizzare i propri IP pubblici per questo.

Concettualmente parlando, il Network Load Balancer sembra effettivamente modificare il comportamento di Internet Gateway - che è, di per sé, un oggetto logico che non può essere disabilitato, sostituito o sperimentare un errore in qualsiasi senso significativo. Ciò è in contrasto con ELB e ALB, che in realtà operano su istanze EC2 "nascoste". NLB opera sull'infrastruttura di rete, a sua volta, sotto tutti gli aspetti.


Grazie. Potresti approfondire le modalità che riconoscono il payload e il payload agnostico? Inoltre il server web può sapere se la connessione originale era su SSL?
Ali,

Ho aggiunto alcune informazioni aggiuntive alla risposta per affrontare questi punti.
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. Mi fa molto piacere leggere questo. Potete fornire un riferimento a queste informazioni?
Felipe Alvarez,

1
@FelipeAlvarez a quanto pare, il quadro completo è sostanzialmente più complesso. Sebbene questa sia la configurazione più intuitiva, Network Load Balancer è integrato con l'infrastruttura di rete effettiva in modo tale da acquisire i flussi TCP (presumibilmente tramite le tabelle di stato della rete) dalle istanze di destinazione e può riscriverli e funzionare come previsto anche se le istanze non sono configurate in questo modo. Le istanze di destinazione necessitano di una route predefinita dichiarata in VPC: non viene considerata per i pacchetti di ritorno, ma deve essere ancora presente. L'assenza di un percorso predefinito crea un buco nero.
Michael - sqlbot

1

Secondo la documentazione AWS per NLB, il livello 4 non è il livello 3. Inoltre, i server back-end o di destinazione non devono trovarsi su una sottorete pubblica. È un dato di fatto che gli intervalli di indirizzi IP dei gruppi target devono essere uno dei seguenti: I seguenti sono i possibili tipi target:

istanza Le destinazioni sono specificate dall'ID istanza.

ip Le destinazioni sono specificate dall'indirizzo IP.

Quando il tipo di destinazione è ip, è possibile specificare gli indirizzi IP da uno dei seguenti blocchi CIDR:

Le subnet del VPC per il gruppo target

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)

Importante

Non è possibile specificare indirizzi IP instradabili pubblicamente.

Spero che questo possa essere d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.