Alamat IP statis untuk lalu lintas keluar dari grup autoscaling AWS

27

Saya akan memiliki sejumlah instance EC2 di grup autoscaling Elastic Beanstalk di subnet default di VPC. Aplikasi pada instance EC2 ini perlu terhubung ke layanan pihak ketiga yang menggunakan daftar putih alamat IP untuk memungkinkan akses. Jadi saya memerlukan satu atau lebih alamat IP statis yang dapat saya berikan kepada penyedia layanan ini sehingga mereka dapat ditambahkan ke daftar putih. Pemahaman saya adalah bahwa satu-satunya cara untuk mendapatkan IP statis adalah dengan mendapatkan alamat IP elastis. Dan saya hanya dapat mengaitkan Elastic IP dengan satu contoh EC2 pada suatu waktu - saya tidak dapat mengaitkannya dengan seluruh subnet atau gateway internet saya (apakah ini benar?). Jadi apakah saya memerlukan IP Elastis untuk setiap instance EC2, sehingga setiap instance dapat secara terpisah dimasukkan daftar putih? Bagaimana cara kerjanya jika autoscaling menambahkan contoh lain? Haruskah saya memiliki satu contoh EC2 dengan IP elastis, dan rutekan semua lalu lintas keluar melalui instance itu? Jika demikian, apakah instance itu perlu semata-mata untuk tujuan ini atau dapatkah itu merupakan salah satu contoh yang menjalankan aplikasi saya?

davidwebster48
sumber

Jawaban:

19

Anda membutuhkan NAT. Konfigurasi ini biasanya digunakan untuk mendukung subnet pribadi di VPC, ada panduan yang cukup rinci di sini . Setelah VPC Anda dikonfigurasi untuk menggunakan instance NAT, semua lalu lintas keluar akan dikaitkan dengan EIP instance NAT.

Jika demikian, apakah instance itu perlu semata-mata untuk tujuan ini atau dapatkah itu merupakan salah satu contoh yang menjalankan aplikasi saya?

Secara teknis Anda mungkin bisa, tetapi itu bukan ide yang baik:

  • Keamanan yang baik untuk memiliki peran yang terisolasi.
  • Anda ingin server aplikasi Anda memiliki profil pemuatan yang serupa atau identik. Jika satu instance memiliki beban 10% tambahan karena NAT maka Anda harus meningkatkan sebelum waktunya ketika Anda mencapai batas instance itu. Ini akan menjadi lebih buruk karena NAT menjadi lebih sibuk karena lebih banyak instance ditambahkan ke cluster Anda.
  • Anda ingin server aplikasi Anda identik dan sementara sehingga Anda dapat merobohkannya dan / atau menggantinya setiap kali ada masalah atau Anda perlu skala. Memiliki satu server aplikasi yang berbeda dari yang lain akan menjadi sakit kepala utama.

Anda mungkin bisa lolos jika instans Anda kemas tetapi itu mungkin bukan ide yang bagus.

Ingat juga bahwa instance NAT Anda bisa menjadi satu titik kegagalan, jadi Anda mungkin ingin memikirkan redundansi.

thexacre
sumber
Apakah menggunakan NAT akan meningkatkan waktu respons permintaan pada itu menambahkan antarmuka tambahan b / w client dan server?
r.bhardwaj
1
Saya telah menggunakan gateway NAT untuk mencapai tujuan ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ) tetapi masih ketika saya melakukan nslookup ke server saya itu mengembalikan alamat ip publik yang berbeda dari NAT gateway
r.bhardwaj
12

Saya mengerti ini adalah utas lama - bagi seseorang yang memiliki use-case yang sama sekarang, AWS nat-gateway akan menjadi solusi yang lebih baik.

packetlord
sumber
4

Saya tidak memiliki reputasi yang cukup untuk mengomentari jawaban di atas, tetapi saya ingin menambahkan beberapa informasi yang perlu Anda ketahui jika menggunakan gateway NAT untuk mencapai ini. Saat Anda membuat gateway NAT, Anda memilih subnet dan alamat IP elastis.

Pada awalnya, saya baru saja menambahkan gateway NAT ke subnet yang sama dengan penyeimbang beban elastis saya dan instance EC2. Kemudian, Anda harus menambahkan gateway NAT ke tabel rute Anda. Saya menambahkan gateway NAT sebagai target untuk IP dari server basis data eksternal yang saya coba hubungi. Ini menghasilkan aplikasi yang dihosting dalam penghitungan waktu beanstalk elastis saya. Ini karena mereka berusaha untuk terhubung ke database eksternal melalui NAT. Mereka mencapai NAT, dan kemudian NAT mencoba menjangkau ke server saya melalui internet, dan mencarinya di tabel rute untuk subnet itu, yang menunjuk pada dirinya sendiri, membuat loop.

Solusinya adalah, sebelum Anda membuat gateway NAT Anda, buat subnet baru hanya untuk NAT sehingga NAT memiliki subnet dan tabel rute itu sendiri. Di tabel rute NAT, arahkan semua lalu lintas ke gateway internet. Di tabel rute utama Anda, arahkan IP eksternal Anda ke NAT. Kemudian, ketika instance EC2 Anda mencoba menghubungkan ke IP eksternal Anda, mereka akan mencarinya di tabel rute utama (atau tabel rute apa pun yang telah Anda tetapkan untuk subnet instans instance Anda), dan temukan NAT. Kemudian, NAT Anda akan mencari IP itu di tabel rute sendiri, dan menemukan internet.

pengguna339568
sumber
Saya ingin melihat beberapa cuplikan layar mungkin. Saya pikir ini adalah masalah saya tetapi hanya bisa mengonsumsinya sekitar 50%
justin.m.chase
Saya pikir saya memiliki pengaturan seperti ini tetapi ketika saya mencoba untuk ssh ke IP publik contoh saya kali ini habis. Apakah instance memerlukan dua perangkat jaringan untuk dapat melalui NAT dan juga menerima koneksi masuk dari IP publik?
justin.m.chase
Anda harus menambahkan antarmuka jaringan kedua ke instance dan ke subnet eksternal, lalu menetapkan ip elastis ke antarmuka jaringan itu. Anda kemudian dapat terhubung ke sana melalui IP itu tetapi semua lalu lintas lainnya akan melalui nat secara default.
justin.m.chase