Использование DNS для обслуживания разных служб на одном сервере, работающих на разных портах - PullRequest
0 голосов
/ 16 ноября 2018

Я понимаю, что это чрезвычайно широкий вопрос, но мне действительно нужно какое-то направление. У меня есть две службы, работающие на сервере, использующие порты 50080 и 50090. Это было сделано из-за того факта, что при создании служб в Java их запуск на одном и том же порту приводил к конфликту.

DNS был настроен на сервере для возврата службы, работающей на 50080. Обычно, когда вы вводите имя домена (prod.example.com), вы получаете метод get all для этой службы по умолчанию. Тем не менее, мы хотели бы настроить DNS для учетной записи для службы на 50090. Я полагаю, что это будет работать при запуске prod.example.com:50080 для перехода к первому сервису и prod.example.com:50090 для второго сервис.

Пока что я не нашел много документации о том, как этого добиться. Кажется, что это должно быть выполнимо, но я рисую бланк о том, как это сделать.

1 Ответ

0 голосов
/ 16 ноября 2018

Если вы находитесь за пределами веб-мира, у вас есть идеальное решение для этого, оно называется SRV records. По сути, они являются обобщением того, что MX записи сделали для электронной почты.

Но сначала обратите внимание, что если вы находитесь в веб-мире, ни один браузер, к сожалению, не использует эти записи и, следовательно, вероятно, также не имеет клиентской библиотеки HTTP (S). В этом случае вам действительно нужно жестко закодировать номер порта в URL-адресе, иначе клиенты по умолчанию перейдут на 80 или 443. Или используйте какой-то механизм прокси / перенаправления на уровне HTTP.

Так что, если вы не находитесь в веб-парадигме, см. RFC 2782 для определения записи SRV или статью Википедии для более подробного введения в нее.

Короче говоря, они предоставляют способ отделить идентификацию службы (которая представляет собой имя службы и транспорт) до ее местоположения (которое в основном является именем хоста и портом), с добавлением некоторых других свойств, таких как возможность балансировки нагрузки / отработки отказа.

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

Итак, вы делаете это так:

  • вы определяете имена сервисов, например foo и bar.
  • допустим, они работают по TCP (или TLS)
  • один на порт 50080 другой на порт 50090

Затем вы можете опубликовать в своем DNS:

_foo._tcp.example.com. IN SRV 10 10 50080 somehost.example.com.
_bar._tcp.example.com. IN SRV 10 10 50090 somehost.example.com.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...