Apakah ELB juga merutekan lalu lintas balasan keluar di AWS

8

Saya telah mencoba untuk memahami bagaimana perutean bekerja di AWS VPC dengan subnet publik / pribadi.

Saya memiliki pengaturan seperti yang direkomendasikan oleh amazon dengan ELB dan NAT di subnet publik dan server web di subnet pribadi. Saya memiliki grup keamanan (SG) yang dikonfigurasi sesuai http://blogs.aws.amazon.com/security/blog/tag/NAT dan semuanya berfungsi seperti yang diharapkan. Bagus!

Referensi arsitektur dengan konfigurasi Amazon VPC

Apa yang saya belum mengerti adalah bagaimana balasan HTTP dikembalikan dari contoh server web dalam arsitektur di atas.

Jadi permintaan web datang dari internet publik melalui HTTP, 80 hits ELB dan ELB membawanya ke IP pribadi server web, keren. Sekarang server web harus membalas. Dari apa yang saya pahami jawabannya akan lebih dari port TCP yang lebih tinggi (1024-65535). NAT SG hanya mengizinkan lalu lintas keluar melalui port 80 & 443. Jadi, bagaimana balasan ini kembali ke Internet publik. Itu tidak bisa melalui NAT. Apakah ini berarti balasannya keluar melalui ELB. Diagram Amazon tidak menunjukkan panah arah lalu lintas ELB sebagai bidirectional, dokumentasi ELB juga tidak menyatakan bahwa ELB berperilaku seperti NAT yang menyatakan keadaan. Melakukannya?

Ali
sumber

Jawaban:

11

Panah dalam diagram hanya menunjukkan arah pembentukan koneksi - bukan arus lalu lintas.

Ya, lalu lintas kembali melalui ELB.

Tapi, itu bukan NAT stateful - ini adalah proxy koneksi TCP. Mesin ELB menerima koneksi TCP pada port mendengarkan yang dikonfigurasi, mengakhiri sesi SSL jika dikonfigurasi, dan membuat koneksi TCP baru ke server back-end. Jika pendengar dikonfigurasi untuk HTTP, ELB beroperasi dalam mode payload-parsing, logging, dan meneruskan permintaan HTTP ke back-end, jika tidak itu payload-agnostic, membangun koneksi TCP baru 1: 1 ke back-end untuk setiap koneksi yang masuk, dan "menyatukan pipa" (tanpa kesadaran tingkat HTTP atau modifikasi).

Either way, alamat sumber koneksi masuk ke aplikasi Anda akan menjadi dari node ELB, bukan klien asli. Ini adalah bagaimana lalu lintas respons kembali ke ELB untuk kembali ke klien.

Dalam mode http, ELB menambahkan (atau menambahkan ke) X-Forwarded-Forheader sehingga aplikasi Anda dapat mengidentifikasi IP klien asli, serta X-Forwarded-Proto: [ http | https ]untuk menunjukkan apakah koneksi klien menggunakan SSL dan X-Forwarded-Portuntuk menunjukkan port front-end.


Pembaruan: yang di atas mengacu pada jenis penyeimbang beban yang sekarang dikenal sebagai "ELB Classic" atau ELB / 1.0 (ditemukan dalam string agen pengguna yang dikirimkannya dengan pemeriksaan kesehatan HTTP).

Penyeimbang Layer 7 yang lebih baru, Application Load Balancer atau ELB / 2.0 beroperasi dengan cara yang sama, sehubungan dengan arus lalu lintas. Kemampuan Layer 4 ("transparan" TCP) dihapus dari ALB dan fitur layer 7 ditingkatkan secara signifikan.

Jenis penyeimbang beban terbaru, Penyeimbang Beban Jaringan, adalah penyeimbang Lapisan 3. Berbeda dengan dua lainnya, ia berperilaku sangat mirip dengan NAT dinamis, hanya menangani koneksi inbound (yang berasal dari luar), memetakan sumber-addr + port melalui EIP-addr + port ke instance-private-ip: adde + port - dengan EIP terikat ke "penyeimbang" - dan tidak seperti dua jenis penyeimbang lainnya, instance harus pada subnet publik, dan menggunakan IP publik mereka sendiri untuk ini.

Secara konseptual, Network Load Balancer tampaknya benar-benar mengubah perilaku Internet Gateway - yang merupakan objek logis yang tidak dapat dinonaktifkan, diganti, atau mengalami kegagalan dalam arti yang berarti. Ini berbeda dengan ELB dan ALB, yang sebenarnya beroperasi pada instance EC2 "tersembunyi". NLB beroperasi pada infrastruktur jaringan, dengan sendirinya, dengan semua penampilan.

Michael - sqlbot
sumber
Terima kasih. Bisakah Anda menguraikan mode payload-sadar, payload-agnostik? Bisakah server web tahu jika koneksi asli lebih dari SSL?
Ali
Saya telah menambahkan beberapa info tambahan ke jawaban untuk mengatasi poin-poin ini.
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. Saya sangat senang membaca ini. Bisakah Anda memberikan referensi ke informasi ini?
Felipe Alvarez
1
@FelipeAlvarez ternyata, gambaran lengkapnya jauh lebih kompleks. Walaupun ini adalah konfigurasi yang paling intuitif, Network Load Balancer terintegrasi dengan infrastruktur jaringan aktual sedemikian rupa sehingga menangkap aliran TCP (mungkin melalui tabel status jaringan) dari instance target dan dapat menulis ulang dan bekerja seperti yang diharapkan bahkan jika contoh tidak dikonfigurasi dengan cara ini. Instances target memerlukan rute default yang dideklarasikan dalam VPC - ini diabaikan untuk paket yang dikembalikan, tetapi harus tetap ada. Tidak adanya rute default menciptakan lubang hitam.
Michael - sqlbot
1

Menurut dokumentasi AWS untuk NLB, itu adalah layer 4 bukan layer 3. Juga server backend atau target tidak diharuskan berada di subnet publik. Faktanya rentang alamat IP dari kelompok target haruslah salah satu dari yang berikut: Berikut ini adalah tipe-tipe target yang mungkin:

instance Target ditentukan oleh instance ID.

ip Target ditentukan oleh alamat IP.

Ketika tipe target adalah ip, Anda dapat menentukan alamat IP dari salah satu blok CIDR berikut:

Subnet dari VPC untuk grup 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)

Penting

Anda tidak dapat menentukan alamat IP yang dapat dirutekan secara publik.

Saya harap ini membantu.

RBP
sumber