Могу ли я запустить два отдельных приложения на порт 80 и разные имена хостов в Docker Swarm?
С новым захватывающим Docker Swarm в версии 1.12 кажется вполне возможным развернуть несколько приложений в кластере серверов.
Я ищу способ развертывания двух отдельных приложений или точек входа приложений на одном и том же порту и одном кластере. Учтите следующее:
web.myservice.com:80 -> Swarm -> Service[web] -> web.1
-> web.2
-> web.3
backend.myservice.com:80 -> Swarm -> Service[backend] -> backend.1
-> backend.2
-> backend.3
Где рой в этом случае только в одном кластере из нескольких хостов, выставляя порт 80. Я полагаю, вы могли бы выставить разные порты и настроить балансировщики нагрузки на proxy_pass для этого другого порта, но я бы сказал, было бы здорово иметь возможность просто выставить имя хоста: порт в кластере, поэтому, если запрос приходит на имя хоста и порт, он будет перенаправлен. Если вам нужно несколько хостов или порт, вы можете выставить несколько.
Это может быть доступно, и именно поэтому я задаю этот вопрос. Может быть, это может быть скопировано с некоторыми расширенными настройками HAProxy или Nginx. Я экспериментировал довольно много, и мне было довольно трудно сделать это расширяемым. Пожалуйста, совет по теме, если у вас есть какие-либо комментарии или предложения!
- Маркус
1 ответ
Когда вы публикуете порт, он привязывается к сетевому интерфейсу узла. Вы могли бы справиться с этим, используя ограничения размещения, чтобы гарантировать, что задачи обеих служб никогда не находятся на одном и том же узле, но я думаю, что лучше всего иметь службу nginx для прокси-трафика для вас.
Swarm делает записи DNS для ваших сервисов, чтобы вы могли легко получить к ним доступ по имени, простой пример nginx:
http {
...
server {
server_name web.myservice.com;
location / {
proxy_pass http://web:8080;
proxy_redirect default;
}
}
server {
server_name backend.myservice.com;
location / {
proxy_pass http://backend:8080;
proxy_redirect default;
}
}
}