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