У меня есть несколько экземпляров, работающих в одной и той же группе безопасности (например, Group-A), которым необходимо взаимодействовать друг с другом, в частности, через порт 4369.
Каждый экземпляр имеет свой Elastic IP.
Группа безопасности настроена на разрешение входящего трафика через TCP:4369 Источник:sg-XXXXX (Группа-A)
Однако экземпляры могут взаимодействовать друг с другом только через внутренний IP (10.xxx.xxx.xx) или Amazon Public DNS: ec2-ELASTIC-IP.compute-1.amazonaws.com (очевидно, Amazon преобразует его во внутренний IP).
Если я использую Elastic IP, это не сработает. Если я использую свой собственный FQDN, который указывает на Elastic IP, это не сработает.
Если я изменю источник в правиле входящего трафика с sg-XXXXX (Group-A) на 0.0.0.0, он будет работать с моим собственным FQDN и Elastic IP. Но мы не будем использовать это из соображений безопасности. Если я удалю правило входящего трафика, ничего не будет работать, даже использовать внутренний IP.
Так что же мне делать, если я хочу использовать собственное полное доменное имя (FQDN)? (worker-1.company.com -> Elastic IP), которое гораздо более удобно для чтения и которым проще управлять.
решение1
Описанное вами поведение является нормальным, поскольку при взаимодействии между экземплярами через эластичный IP-адрес идентификация машины в группе безопасности (в целях конфигураций группы безопасности, полагающихся на источник sg-xxxxxxxx) не может быть установлена с полной уверенностью, поскольку преобразование адресов отправляет трафик (предположительно) через промежуточное оборудование, и трафик больше не рассматривается как исходный.напрямуюиз примера.
Решением является присвоение вашим хостам имен в DNS с помощью записей CNAME, указывающих на публичную запись DNS, вместо записей A, указывающих на конкретный IP-адрес.
В DNS-зоне company.com:
worker-1 IN CNAME xx-xx-xx-xx.compute-1.amazonaws.com.
Теперь worker-1.company.com будет разрешаться в частный IP-адрес при запросе изнутри и в публичный IP-адрес при запросе снаружи.
решение2
Это не идеально, но вы можете добавить явные сопоставления из FQDN в частные IP в файле hosts каждого из экземпляров. Таким образом, ваш код будет использовать FQDN, но сетевое взаимодействие будет фактически использовать частные коммуникации (что в любом случае более безопасно).
Это разумный вариант, если у вас небольшой, относительно фиксированный набор экземпляров. Вероятно, вам следует автоматизировать этот процесс, если это возможно.
Вы также можете использовать Route 53, DNS Amazon как сервис. Сопоставьте ваше FQDN с публичным DNS-именем экземпляра. Внутри EC2 это будет сопоставлено с частным IP. Вам все равно нужно будет автоматизировать это с помощью API route 53.