Моя команда и я создаем службу, которая по запросу пользователя создает новый экземпляр сервера на лету с другим 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
...