Статична IP-адреса для вихідного трафіку з групи автоматичного масштабування AWS


27

У мене буде декілька екземплярів EC2 в групі автоматичного масштабування Elastic Beanstalk в підмережі за замовчуванням в VPC. Додаток у цих випадках EC2 повинен підключитися до стороннього сервісу, який використовує білий список IP-адрес, щоб дозволити доступ. Тому мені потрібна одна або кілька статичних IP-адрес, які я можу надати цьому постачальнику послуг, щоб вони могли бути додані до списку білого списку. Я розумію, що єдиний спосіб отримати статичний IP - це отримати еластичну IP-адресу. І я можу пов'язувати Elastic IP лише з одним екземпляром EC2 за один раз - я не можу пов’язати його з усією своєю підмережею або Інтернет-шлюзом (це правильно?). Тож мені потрібен еластичний IP для кожного екземпляра EC2, тож кожен екземпляр може бути окремо дозволеним? Як би це діяло, якщо автоматичне масштабування додасть ще один екземпляр? Якщо я маю один екземпляр EC2 з Elastic IP, і маршрутизувати весь вихідний трафік через цей примірник? Якщо так, то чи повинен цей екземпляр використовувати виключно для цієї мети чи це може бути один із екземплярів, на якому працює моя програма?

Відповіді:


19

Вам потрібен NAT. Ця конфігурація зазвичай використовуються для підтримки приватних підмереж в VPC, є досить докладний посібник тут . Після того, як ваш VPC налаштований на використання екземпляра NAT, весь вихідний трафік буде віднесений до EIP примірника NAT.

Якщо так, то чи повинен цей екземпляр використовувати виключно для цієї мети чи це може бути один із екземплярів, на якому працює моя програма?

Технічно ви, напевно, могли, але це не дуже гарна ідея:

  • Це хороша безпека, щоб мати ізольовані ролі.
  • Ви хочете, щоб ваші сервери додатків мали подібні або однакові профілі завантаження. Якщо один екземпляр має додаткове навантаження 10% через NAT, то вам доведеться передчасно збільшувати масштаби, коли ви потрапляєте на межі цього екземпляра. Це погіршиться, оскільки NAT стає більш зайнятим, оскільки до вашого кластеру додається більше екземплярів.
  • Ви хочете, щоб ваші сервери додатків були однаковими та ефемерними, щоб ви могли їх зруйнувати та / або замінити, коли виникає проблема або вам потрібно масштабувати. Маючи один сервер додатків, який відрізняється від інших, було б головним болем.

Ви могли б бути в змозі піти з ним , якщо ваші екземпляри контейнеризації , але це все ще , ймовірно , не гарна ідея.

Також майте на увазі, що ваш екземпляр NAT може бути однією точкою відмови, тому ви можете подумати над надмірністю.


Чи буде використання NAT збільшити час відповіді на запит, він додасть додатковий інтерфейс між клієнтом і сервером?
r.bhardwaj

1
Я використовував шлюз NAT для досягнення мети ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ), але все ж, коли я роблю nslookup на своєму сервері, він повертає різні публічні ip-адреси, а потім NAT шлюз
r.bhardwaj

12

Я розумію, що це стара тема - для тих, у кого зараз подібний варіант використання, AWS nat-шлюз був би кращим рішенням.


4

У мене не вистачає репутації, щоб коментувати вищезазначені відповіді, але я хотів додати деяку інформацію, яку вам потрібно знати, якщо для досягнення цього потрібно використовувати шлюз NAT. Коли ви створюєте NAT-шлюз, ви вибираєте підмережу та еластичну IP-адресу.

Спочатку я просто додав NAT-шлюз до тієї ж підмережі, на якій був мій пружний балансир навантаження та екземпляри EC2. Потім вам потрібно додати шлюз NAT до таблиці маршрутів. Я додав NAT шлюз як ціль для IP свого зовнішнього сервера баз даних, до якого я намагався зв’язатися. Це призвело до того, що програми, розміщені в моїй еластичній тарілці з еластичним боком. Це тому, що вони намагалися підключитися до зовнішньої бази даних через NAT. Вони дійшли до NAT, а потім NAT спробував дотягнутись до мого сервера через Інтернет, і подивив його в таблицю маршрутів для підмережі, на якій він знаходився, який вказував на себе, створюючи цикл.

Рішення полягає в тому, що перед тим, як створити свій шлюз NAT, створіть нову підмережу тільки для NAT, щоб NAT мала власну підмережу та таблицю маршрутів. У таблиці маршрутів NAT вкажіть увесь трафік на Інтернет-шлюз. У головній таблиці маршрутів вкажіть зовнішній IP на NAT. Потім, коли ваші екземпляри EC2 спробують підключитися до вашого зовнішнього IP-адреси, вони переглянуть їх у головній таблиці маршрутів (або будь-якій таблиці маршрутів, яку ви визначили для підмереж, у яких є ваші екземпляри), і знайдуть NAT. Тоді ваш NAT знайде цей IP у власній таблиці маршрутів і знайде Інтернет.


Можливо, я хотів би побачити кілька знімків екрана. Я думаю, що це моя проблема, але я можу лише набрати приблизно 50%
justin.m.chase

Я думаю, що у мене це налаштування подібне до цього, але коли я намагаюся ввімкнути загальнодоступну IP-адресу свого екземпляра, він закінчується. Чи повинен екземпляр мати два мережеві пристрої, щоб мати змогу пройти через NAT, а також отримувати вхідні з'єднання від загальнодоступного IP?
Justin.m.chase

Ви повинні додати до екземпляра другий мережевий інтерфейс і його до зовнішньої підмережі, а потім призначити еластичному ip цьому мережевому інтерфейсу. Потім ви можете підключитися до нього через цей IP, але весь інший трафік за замовчуванням все одно буде проходити через nat.
Justin.m.chase
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.