Я использую 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-адрес.
Я использую эластичный бобовый стебель, если это важно.
Варианты вижу:
secret-server
"Elastic Beanstalk" в качестве псевдонима, но затем домен преобразуется в общедоступный IP-адрес.Догадаться. В основном ответ заключается в том, что вы настраиваете внутренний балансировщик нагрузки, но это немного сложнее, потому что Elastic Beanstalk требует, чтобы вы настроили вашу сеть определенным образом.
Вот шаги:
В таком случае, 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.