Каждый субдомен с подстановочными знаками указывает на разные IP-адреса.

Я использую AWS Route-53 в качестве DNS-сервиса для своего приложения и говорю в своем коде, что для каждого HTTP-запроса у меня есть требование создавать некоторые динамические поддомены и указывать их на новый экземпляр ec2, который создается на лету.

Теперь любой должен иметь возможность использовать вновь созданный субдомен для выполнения запросов к вновь созданному экземпляру ec2.

Я знал, что могу использовать запись DNS с подстановочными знаками, но разве она не указывает только на один IP-адрес?

Как я могу сделать так, чтобы каждый созданный субдомен всегда указывал на новый экземпляр ec2?


person Jaykishan    schedule 03.06.2020    source источник


Ответы (2)


traefik - это именно то, что мне нужно. Я настроил traefik с etcd в качестве поставщика, и, просто сделав записи на сервере etcd, я смог добиться того, чего хотел.

Теперь у меня просто есть домен с подстановочными знаками, сопоставленный с экземпляром ec2, на котором я запускаю traefik, который следит за сервером etcd на предмет любых новых записей с / traefik / в качестве префикса. Затем он динамически генерирует новую конфигурацию и заботится о маршрутизации любого запроса на целевой сервер на основе заголовка HOST.

person Jaykishan    schedule 16.07.2020

Создайте запись A для * .example.com и присвойте значение IP-адресу.

Если какой-либо субдомен не имеет явной записи, по умолчанию будет использоваться эта запись.

Возможные решения для автоматического добавления записи DNS.

  • При создании экземпляра EC2 добавьте тег доменного имени (имен), которое должно быть назначено для разрешения этого экземпляра. Пусть событие CloudWatch обнаружит "StartInstance", а затем вызовет Lambda для добавления записи DNS через API.
  • Напишите прокси-сервер, который может определять IP-адрес для каждого поддомена. Или вместо этого добавьте его вручную с помощью какой-то автоматизации (SSM / Ansible).
person Chris Williams    schedule 03.06.2020
comment
Итак, в моем коде каждый раз, когда я создаю новый экземпляр ec2, должен ли я также создавать новую явную запись субдомена с IP-адресом нового экземпляра ec2? - person Jaykishan; 04.06.2020
comment
Да, это понадобится для дополнительных хостов - person Chris Williams; 04.06.2020
comment
Я надеялся просто сделать запись DNS с подстановочными знаками с экземпляром ec2 (IP-адрес), позвольте вызвать X для соответствия любому субдомену и каким-то образом выяснить, какой правильный IP-адрес для запрошенного субдомена внутри X. Есть ли вообще с помощью чего мы можем этого добиться? - person Jaykishan; 04.06.2020
comment
Это не было бы родным для любого DNS. решение. У вас будет пара возможных решений, я добавил их в комментарий. - person Chris Williams; 04.06.2020
comment
Не могли бы вы подробнее рассказать о втором решении? - person Jaykishan; 04.06.2020
comment
Для этого решения вам нужно взглянуть на программное обеспечение прокси, такое как envoy, haproxy или nginx. В зависимости от вашего выбора вы захотите использовать инструмент автоматизации, такой как SSM, выполняющий доступную книгу воспроизведения, чтобы сгенерировать конфигурацию вашего доменного имени для сопоставления IP-адресов ec2 на вашем прокси-хосте. - person Chris Williams; 04.06.2020
comment
Вы предлагаете, скажем, nginx в качестве прокси для подстановочного DNS и иметь доступные playbooks для добавления конфигураций серверных блоков с новым субдоменом и IP-адресом экземпляра как proxy_pass в файл nginx.conf? - person Jaykishan; 04.06.2020
comment
Да, это была бы альтернатива для работы подстановочного домена - person Chris Williams; 04.06.2020
comment
Без проблем рад, что смог помочь - person Chris Williams; 04.06.2020
comment
У меня проблемы с этим. Допустим, я создал поддомен и A-запись, которая сопоставляет домен с новым экземпляром ec2, теперь мне нужно беспокоиться о том, чтобы включить на нем завершение ssl. Было бы неразумно включать ssl для каждого вновь созданного экземпляра ec2. Итак, я надеялся использовать балансировщик нагрузки aws для этой цели, но как балансировщик нагрузки узнает, какой экземпляр ec2 направляет этот запрос на заданное доменное имя? - person Jaykishan; 08.06.2020
comment
Если вы используете балансировщик нагрузки, вы должны создать отдельную целевую группу для каждого хоста и использовать расширенную маршрутизацию для маршрутизации целевого запроса. Однако существуют ограничения на оценку правил в зависимости от количества уникальных хостов: docs.aws.amazon.com/elasticloadbalancing/latest/application/ - person Chris Williams; 08.06.2020
comment
Что было бы лучше всего, чтобы это произошло? Я имел в виду включение ssl для каждого нового домена, который добавляется динамически. - person Jaykishan; 08.06.2020
comment
Вам нужно будет добавить SSL к сертификату ACM для балансировщика нагрузки, а затем добавить его в прослушиватель. Но я считаю, что вы ограничены 10 доменами на одном сертификате ACM. - person Chris Williams; 08.06.2020
comment
Разве мы не можем просто создать один ssl-сертификат для всех поддоменов? - person Jaykishan; 09.06.2020
comment
Если все они поддомены, то да, вы можете использовать *.example.com. Я неправильно понял, что это отдельные домены :) - person Chris Williams; 09.06.2020
comment
Мне все еще нужно создавать целевую группу для каждого поддомена? или есть какие-то обходные пути для этого? - person Jaykishan; 09.06.2020
comment
Ну, это целевая группа на маршрутизируемый трафик, все в целевой группе будут иметь одинаковый трафик, перенаправленный на нее. - person Chris Williams; 09.06.2020