ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: порт 22 - это просто примерный порт, могут быть случаи, когда это не порт 22, с которым я пытаюсь иметь дело.
"server-1" has a security group "group-1"
"server-2" has a security group "group-2"
"server-1" has an elastic ip address assigned to it i.e 111.222.333.444
и
"group-2" is allowed to connect to "group-1" via port 22
Итак, если я отправлю ssh из сервер-2 к сервер-1 с помощью следующей команды
ssh -iKEY.pem root@ec2-111.222.333.444.eu-west-1.compute.amazonaws.com
соединение в порядке, работает как положено.
Если, однако, я попытаюсь подключиться через эту команду.
ssh -iKEY.pem root@111.222.333.444
Это не работает по очевидным причинам.
Я вышел из сети AWS, чтобы подключиться к сервер-1 и поэтому aws видит соединение от сервер-2 как внешний ресурс, а не как экземпляр aws. Это означает, что он не будет использовать группу безопасности, которая говорит:
"group-2" is allowed to connect to "group-1" via port 22
Я хочу подключиться к сервер-1 через адрес ElasticIP, чтобы я мог с радостью перезагрузиться сервер-1 и / или сервер-2 и не нужно беспокоиться о том, что имя / IP-адрес экземпляра aws изменилось, то есть имя домена в первом примере ssh изменится при перезагрузке / новом экземпляре.
Так что мой вопрос действительно в том, как лучше всего это сделать. На данный момент я вижу следующие варианты:
Выполните обратный поиск DNS-адреса ElasticIP и подключитесь, используя эту форму доменного имени. сервер-2 к сервер-1 то есть эластичный IP-адрес 111.222.333.444, и обратный поиск вернет мне
ec2-111-222-333-444.eu-west-1.compute.amazonaws.com
я не может реле для создания этого вручную, так как мне также нужно знать, в какой зоне доступности находится экземпляр, чтобы сделать это (я бы очень хотел не заботиться о том, где он находится).
Я бы предположил, что есть вызов api aws, который я могу сделать, чтобы получить текущее имя экземпляра, прикрепленное к адресу ElasticIP. Я не слишком увлечен приложением, зная, что оно находится на сервере aws, и хотел бы держаться подальше от api.
Используйте экземпляры vpc в aws. Таким образом, я всегда могу привязать тот же частный IP-адрес к сервер-1 и надежно подключиться к нему даже после перезагрузки любого сервера. Однако, похоже, это связано с большим количеством настроек и обслуживания.
Я мог вручную обновить любые настройки конфигурации, указывающие на сервер-1 после перезагрузки (это не предложение серии).
открыто сервер-1 порт 22 в мир (ПРИМЕЧАНИЕ: я хочу открыть и другие порты, а не только 22) и беспокоиться о приложении, выполняющем аутентификацию. (опять же не очень разумный вариант, как будто я хочу открыть порт 80 для сервер-2 затем нужно использовать .htaccess или что-то подобное для аутентификации соединения, поэтому просто перемещаем эту проблему и не решаем ее).
Проблема, с которой я сталкиваюсь с вариантами 1 и 2, заключается в том, что я всегда должен выполнять эти поисковые запросы, что приводит к огромным накладным расходам для приложения, или я кэширую его и вынужден мириться с тем фактом, что если экземпляр сервер-1 изменяется, т.е. происходит перезагрузка, затем наступает время, когда сервер-2 не сможет подключиться к сервер-1 пока он не извлечет из кэша имя экземпляра.
Вариант 3, вероятно, является лучшим решением, однако он требует настройки и обслуживания, что требует много времени и дополнительных знаний в нашей компании.
Есть ли у кого-нибудь другое предложение, которое будет работать?
Учитывая ваши требования, я соглашусь, что использование VPC - наиболее оптимальное решение. Поскольку похоже, что вы провели свое исследование, вы знаете, что VPC позволяет гораздо более детально контролировать адресацию подсети и хоста. Чтобы ответить на ваш вопрос, это подход «передовой практики».
Я бы создал две частные подсети, по одной в каждой зоне доступности, и разместил эластичный сетевой интерфейс со статическим частным IP-адресом в каждой подсети. Затем вы можете прикрепить / отсоединить ENI к соответствующему экземпляру по своему желанию. Это позволяет использовать некоторые интересные вещи и функции, такие как горячая замена сетевой карты между серверами, пока трафик все еще проходит через нее. Да, настройка VPC требует значительного обучения, но компромисс заключается в значительном повышении безопасности и гибкости при использовании нескольких экземпляров EC2, которым необходимо взаимодействовать друг с другом.
Стоит отметить, что использование API AWS (как вы также упомянули) также является жизнеспособным решением для ваших непосредственных нужд. Но чем дальше вы продвигаетесь по пути написания собственного решения, тем больше времени уходит на его поддержку по мере роста ваших потребностей.
Метод API AWS для поиска общедоступных DNS экземпляра выглядит следующим образом:
http://169.254.169.254/latest/meta-data/public-hostname
(Это внутренний IP-адрес AWS, а не внешний сервис.)
Но что касается корня проблемы, предполагается, что общедоступный DNS для эластичного IP-адреса будет постоянно связан с этим эластичным IP-адресом, независимо от перезагрузок / новых экземпляров, на которые он указывает. Все мои общедоступные DNS с эластичным IP-адресом выглядят как ec2-11-22-33-44.compute-1.amazonaws.com. Почему у вас есть регион в публичном DNS? Что он возвращает с API выше?