Назад | Перейти на главную страницу

Поддомены на лету, но разные IP-адреса

Моя команда и я создаем службу, которая по запросу пользователя создает новый экземпляр сервера на лету с другим IP-адресом для каждого нового экземпляра. Проблема в том, что я подключаюсь от клиента через WebSockets к этому вновь созданному серверу. Но мне нужно, чтобы он был сертифицирован по SSL. Поэтому я не могу использовать только IP.

Итак, я думаю создать субдомен для каждого из этих экземпляров сервера. Единственная проблема здесь заключается в том, что мне нужно, чтобы поддомен был доступен очень быстро, и я не знаю, могу ли я доверять времени распространения DNS для этого.

Есть ли решение этого? Например, у меня есть собственный сервер маршрутизации с поддоменом с подстановочными знаками, а затем на основе этого маршрутизируется трафик? Я думаю, что не могу использовать Apache или подобные решения, потому что я обрабатываю не только трафик HTTP / S.

В итоге я использовал обратный прокси. В таком случае Traefik было именно то, что мне нужно.

Я сделал простой API, который изменяет файл конфигурации, и у него есть некоторые хорошие функции, такие как запрос SSL-сертификатов при настройке.

Ниже представлена ​​конфигурация, которую я использовал на тот случай, если кому-то понадобится что-то подобное.

InsecureSkipVerify = true
defaultEntryPoints = ["https"]

[entryPoints]
    [entryPoints.https]
    address = ":443"
        [entryPoints.https.tls]

[acme]
dnsProvider = "dnsprovider"
email = "lets@encypt.account"
storage = "acme.json"
entryPoint = "https"
acmeLogging = true
delayDontCheckDNS = 0
onHostRule = true

[frontends]
  [frontends.frontend0]
  backend = "backend0"
    [frontends.frontend0.routes.main]
    rule = "Host:din0.instance.mydomain.com"
[backends]
  [backends.backend0]
   [backends.backend0.servers.server1]
   url = "wss://165.227.200.126"

Возможно, вы заранее знаете диапазон IP-адресов? Вы могли бы создать xxxxxx.dyn.example.com. IN A шаблон для сети заранее. Это позволяет вам использовать *.dyn.example.com подстановочный сертификат для всех без каких-либо проблем, вызванных кешированием DNS.

Время распространения DNS не настоящая вещь (в большинстве сценариев)

В зависимости от того, насколько вы контролируете окружающую среду:

  • IP-адреса для экземпляров вашего сервера обычно назначаются из определенных зарезервированных IP-диапазонов.
    Просто заполните свои прямые (а в идеале также обратные) зоны DNS некоторыми соответственно предсказуемыми шаблонными именами хостов для каждого IP-адреса в этих диапазонах:
    ip-10-9-8-7.instances.example.com. IN A 10.9.8.7
    и включить групповой сертификат для *.instances.example.com. в шаблоне экземпляра в качестве сертификата сервера.

  • Если вы действительно заранее не знаете IP-адрес и не можете предварительно создать записи, тогда вы будете зависеть от того, насколько быстро ваш главный DNS-сервер начинает отвечать на вновь созданные записи и насколько быстро ваш авторитетный серверы имен реплицируют друг другу вновь созданные записи. Это единственная задержка распространения, которая имеет значение и действительно зависит от реализации DNS, но может быть почти мгновенной. (Примечание: это также может быть процесс ручного изменения и занять несколько дней ...)
    Независимо от этих крайностей, если этого недостаточно в вашей ситуации: вы можете дополнительно связать вновь назначенный IP-адрес с шаблонным именем хоста в /etc/hosts ...