Назад | Перейти на главную страницу

Как найти экземпляр EC2, который не является общедоступным

Я использую AWS и имею два экземпляра EC2. У меня есть сервер приложений (app-server) это доступно во всем мире, и я бы хотел поговорить с ним secret-server по внутренней сети. Так что мой app-server в основном работает:

r = requests.get('http://10.1.2.3/stuff')

Тем не мение, secret-serverчастный IP-адрес меняется всякий раз, когда я его выключаю / обновляю / что-то еще. Как app-server должен найти его снова? secret-server.us-east-1.elasticbeanstalk.com разрешается в общедоступный IP-адрес, который заблокирован группами безопасности. Частный DNS-адрес, бесполезно, ip-10.1.2.3.ec2.internal, который, конечно же, меняется при изменении IP-адреса.

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

Я использую эластичный бобовый стебель, если это важно.

Варианты вижу:

Догадаться. В основном ответ заключается в том, что вы настраиваете внутренний балансировщик нагрузки, но это немного сложнее, потому что Elastic Beanstalk требует, чтобы вы настроили вашу сеть определенным образом.

Вот шаги:

  • Создайте общедоступную подсеть, которая станет вашей DMZ.
  • Создайте шлюз NAT, который находится в вашей общедоступной подсети.
  • Создайте таблицу маршрутизации для своей общедоступной подсети, которая направляет весь трафик внутри VPC в блок CIDR VPC и 0.0.0.0/0 на ваш интернет-шлюз.
  • Создайте таблицы маршрутизации для частных подсетей (где будут работать ваши EB-приложения), которые направляют трафик внутри VPC на блок CIDR VPC и 0.0.0.0/0 на адрес nat.
  • Подождите ~ 5 минут, чтобы изменения вступили в силу.
  • Перейдите в Configuration -> Scaling и выберите, что вы хотите включить балансировку нагрузки.
  • Когда он дает вам возможность изменить: ничего не меняйте в подсетях экземпляров ELB и EC2! Я думаю, что это ошибка в пользовательском интерфейсе, но если вы установите любой из флажков, это позволит вам получить только ELB или экземпляр EC2 в подсети этой зоны доступности, но тогда страница выйдет из строя, потому что вам нужен один из них. Наконец, выберите вариант иметь «Внутренний» балансировщик нагрузки.
  • Выберите «Сохранить» и дождитесь обновления конфигурации.

В таком случае, secret-server.us-east-1.elasticbeanstalk.com разрешится на частный IP.

Если вы включили частный балансировщик нагрузки, но не настроили шлюз NAT, маршруты и подсети, secret-server.us-east-1.elasticbeanstalk.com разрешится на частный IP. К сожалению, ваша служба также перейдет в режим серьезной деградации и не будет иметь доступных журналов (если вы предварительно не настроили свою сеть таким образом, который кажется маловероятным). Это связано с тем, что Elastic Beanstalk при запуске экземпляра EC2 загружает некоторые сценарии установки с S3. Однако ваши инстансы Elastic Beanstalk EC2 с балансировкой нагрузки не смогут подключиться к Интернету, даже если вы не ограничили исходящую связь в группах безопасности, потому что у них не будет публичных IP-адресов.

Решение состоит в том, чтобы настроить шлюзы NAT, к которым маршрутизируются все ваши частные подсети, и подсеть «DMZ», в которой размещен шлюз и которая действительно может получить доступ к Интернету. В документации Amazon есть пример этого: VPC с общедоступными и частными подсетями (NAT):

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

Я действительно чувствую, что Elastic Beanstalk может кое-что из этого сделать за вас или, по крайней мере, лучше задокументировать, но неважно. По крайней мере, это работает.

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

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

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-internal-load-balancer.html