Как настроить статический IP-адрес для исходящего трафика в AWS?

У меня есть несколько экземпляров EC2 в 3 зонах доступности. Приложение, которое я запускаю на этих экземплярах, обменивается данными с несколькими сторонними приложениями, у которых есть механизм белого списка. Я знаю, что могу общаться с этими сторонними приложениями, используя статические IP-адреса (эластичный IP) с помощью шлюза NAT. Если я это сделаю, мне нужно будет указать конкретный маршрут для каждого стороннего приложения, чтобы оно работало. Я хотел бы получить статический исходящий IP-адрес без определения всех этих маршрутов. Так что в основном по умолчанию весь трафик маршрутизируется через шлюз NAT. Я пробовал следующее, но больше не могу получить доступ к своему приложению. (Между прочим, все эти экземпляры EC2 находятся за приложением LoadBalancer)

таблица маршрутизации подсети:

10.0.0.0/16     ->  local
0.0.0.0/0       ->  NAT Gateway

Таблица маршрутизации подсети шлюза NAT

10.0.0.0/16     ->  local
0.0.0.0/0       ->  Internet Gateway

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

таблица маршрутизации подсети:

10.0.0.0/16                 ->  local
0.0.0.0/0                   ->  Internet Gateway
ThirdPartyApplicationIp/32  ->  NAT Gateway

таблица маршрутизации подсети шлюза NAT

10.0.0.0/16     ->  local
0.0.0.0/0       ->  Internet Gateway

Определив этот маршрут специально, у нас могут возникнуть проблемы, когда, например, записи DNS обновляются и ip адреса меняются. Я знаю, что это произойдет, потому что я знаю, что некоторые сторонние приложения используют AWS с ELB » s, а IP-адреса ELB будут меняться со временем. Кроме того, это просто не очень удобно, когда нам приходится так управлять всеми этими сторонними приложениями.

Есть ли способ решить эту проблему, чтобы мне не нужно было определять конкретные маршруты для каждого стороннего приложения и при этом я мог получить доступ к моему приложению через Application LoadBalancer и учитывать изменения DNS?

Дополнительная проблема:
Решение этого может также решить следующую проблему, которой у меня пока нет, но которая возникнет в ближайшем будущем: в будущем, когда наше приложение взаимодействует со сторонним приложением и это приложение также подключает наше приложение, тогда трафик направляется через шлюз NAT. Потому что это маршрутизация, которую я настроил, но тогда она не будет работать, если сторонние приложения попытаются подключиться через приложение LoadBalancer к нашим приложениям, потому что тогда трафик должен маршрутизироваться через Интернет-шлюз напрямую, а не через шлюз NAT. . Но если я это сделаю, то потеряю свой статический IP. Есть ли способ решить эту проблему?

Результаты предложения Мэтта: Предложение Мэтта работает, но я действительно не понимаю, почему. Поэтому я начал экспериментировать с этой установкой, чтобы попытаться выяснить, в чем разница. Потому что таблицы маршрутизации такие же, как и раньше, и мне это показалось странным. Оказывается, если я добавлю один экземпляр EC2 в частную подсеть, у которой есть назначенный общедоступный IP-адрес (снова сделав его общедоступной подсетью), вся маршрутизация не удастся, и мой ELB больше не будет отвечать на запросы. После удаления этого нового экземпляра EC2 (с назначенным общедоступным IP-адресом) он все еще не удался. Только после удаления зон доступности в моем ELB и повторного добавления моих частных подсетей он работает. Теперь я не понимаю, почему простое добавление нового экземпляра EC2 с общедоступным IP-адресом нарушает всю маршрутизацию? (Этот новый экземпляр EC2 не входит в целевую группу ELB, просто простаивает в подсети)

0
задан 3 September 2019 в 18:34
1 ответ

Для эффективного использования шлюза / экземпляра NAT ваши экземпляры EC2 должны находиться в частных подсетях. Таким образом, у вас просто есть маршрут по умолчанию для всего исходящего трафика, проходящего через NAT.

Переместите экземпляры EC2 из общедоступных подсетей в частные подсети. Ваш балансировщик нагрузки по-прежнему сможет получить к ним доступ, поскольку ELB находится внутри вашего VPC.

Кроме того, перемещая экземпляры EC2 в частные подсети, вы улучшите безопасность, поскольку внешний мир не может получить к ним доступ напрямую. Если вам нужен доступ к ним, настройте бастионный экземпляр EC2, который вы можете:

  • Туннелировать с использованием SSH для доступа к вашим внутренним экземплярам EC2 или
  • дважды SSH для доступа к вашим внутренним экземплярам EC2. ] Я не всезнайка Ansible, но уверен, что есть способ использовать Ansible и сохранить конфиденциальность ваших экземпляров EC2.

4
ответ дан 4 December 2019 в 11:42

Теги

Похожие вопросы