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

27

У меня будет несколько экземпляров EC2 в группе автоматического масштабирования Elastic Beanstalk в подсети по умолчанию в VPC. Приложение в этих экземплярах EC2 должно подключаться к сторонней службе, которая использует белый список IP-адресов, чтобы разрешить доступ. Поэтому мне нужен один или несколько статических IP-адресов, которые я могу дать этому поставщику услуг, чтобы они могли быть добавлены в белый список. Насколько я понимаю, единственный способ получить статический IP-адрес - это получить эластичный IP-адрес. И я могу связать Elastic IP только с одним экземпляром EC2 одновременно - я не могу связать его со всей моей подсетью или интернет-шлюзом (это правильно?). Так нужен ли мне Elastic IP для каждого экземпляра EC2, чтобы каждый экземпляр мог быть отдельно внесен в белый список? Как это будет работать, если автоматическое масштабирование добавляет еще один экземпляр? Должен ли я иметь один экземпляр EC2 с Elastic IP, и направить весь исходящий трафик через этот экземпляр? Если да, то должен ли этот экземпляр быть предназначен исключительно для этой цели или это может быть один из экземпляров, на которых запущено мое приложение?

davidwebster48
источник

Ответы:

19

Вам нужен NAT. Эта конфигурация обычно используются для поддержки частных подсетей в VPC, есть довольно подробное руководство здесь . Как только ваш VPC настроен для использования экземпляра NAT, весь исходящий трафик будет отнесен к EIP экземпляра NAT.

Если да, то должен ли этот экземпляр быть предназначен исключительно для этой цели или это может быть один из экземпляров, на которых запущено мое приложение?

Технически вы, вероятно, могли бы, но это не очень хорошая идея:

  • Это хорошая безопасность, чтобы изолировать роли.
  • Вы хотите, чтобы ваши серверы приложений имели одинаковые или идентичные профили нагрузки. Если один экземпляр имеет дополнительную 10% -ую нагрузку из-за NAT, вам придется преждевременно увеличивать масштаб, когда вы достигнете пределов этого экземпляра. Это будет ухудшаться по мере того, как NAT будет загружаться по мере добавления новых экземпляров в ваш кластер.
  • Вы хотите, чтобы ваши серверы приложений были идентичными и эфемерными, чтобы вы могли их разорвать и / или заменить в случае возникновения проблемы или необходимости масштабирования. Наличие одного сервера приложений, который отличается от остальных, было бы большой головной болью.

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

Также имейте в виду, что ваш экземпляр NAT может быть единственной точкой отказа, поэтому вы можете подумать о избыточности.

thexacre
источник
Будет ли использование NAT увеличивать время отклика на запрос при добавлении дополнительного интерфейса ч / б клиент и сервер?
r.bhardwaj
1
Я использовал шлюз NAT для достижения этой цели ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ), но все же, когда я выполняю nslookup на своем сервере, он возвращает другой публичный IP-адрес, чем NAT шлюз
r.bhardwaj
12

Я понимаю, что это старый поток - для кого-то, у кого есть подобный пример использования, AWS nat-gateway будет лучшим решением.

packetlord
источник
4

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

Сначала я просто добавил шлюз NAT в ту же подсеть, в которой были включены мой эластичный балансировщик нагрузки и экземпляры EC2. Затем необходимо добавить шлюз NAT в таблицу маршрутов. Я добавил шлюз NAT в качестве цели для IP-адреса моего внешнего сервера базы данных, с которым я пытался связаться. Это привело к истечению времени ожидания приложений, размещенных в моем гибком бобовом стебле. Это потому, что они пытались подключиться к этой внешней базе данных через NAT. Они достигли NAT, а затем NAT попытался связаться с моим сервером через Интернет и искал его в таблице маршрутов для подсети, в которой он был, который указывал назад на себя, создавая цикл.

Решение заключается в том, что перед созданием шлюза NAT создайте новую подсеть только для NAT, чтобы у NAT была своя собственная подсеть и таблица маршрутов. В таблице маршрутизации NAT укажите весь трафик на интернет-шлюз. В основной таблице маршрутизации укажите внешний IP-адрес для NAT. Затем, когда ваши экземпляры EC2 попытаются подключиться к вашему внешнему IP, они будут искать их в основной таблице маршрутов (или в любой другой таблице маршрутов, которую вы определили для подсетей, в которых находятся ваши экземпляры), и найдут NAT. Затем ваш NAT найдет этот IP-адрес в своей таблице маршрутов и найдет Интернет.

user339568
источник
Я хотел бы увидеть некоторые снимки экрана, возможно. Я думаю, что это моя проблема, но я могу справиться с ней только на 50%
justin.m.chase
Я думаю, что он настроен так, но когда я пытаюсь подключиться к публичному IP-адресу моего экземпляра, время ожидания истекает. Нужно ли экземпляру два сетевых устройства, чтобы иметь возможность проходить через NAT, а также получать входящие соединения с общедоступного IP-адреса?
justin.m.chase
Вы должны добавить второй сетевой интерфейс к экземпляру и его внешней подсети, а затем назначить эластичный IP для этого сетевого интерфейса. Затем вы можете подключиться к нему через этот IP-адрес, но весь остальной трафик по-прежнему будет проходить через nat по умолчанию.
justin.m.chase