Docker обратный прокси роя + балансировка нагрузки с Nginx - PullRequest
0 голосов
/ 19 января 2020

У меня есть docker compose файл с 2 сервисами: joomla и phpmyadmin.

Мне нужен обратный прокси-сервер, который ведет себя так, как показано ниже:

path: / -> сервис joomla

path: / managedb -> phpmyadmin service

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla;
    }
    location /managedb {
        proxy_pass http://phpmyadmin;
    }
}

Все работает хорошо, однако мне нужно добавить балансировку нагрузки для балансировки работы между 3 моими машинами в docker swarm.

Все они являются виртуальными машинами в одной локальной сети со стати c IP 192.168.75.11/12/13.

Способ добавления балансировки нагрузки Nginx должен быть следующим:

upstream joomla_app {
        server 192.168.75.11;
        server 192.168.75.12;
        server 192.168.75.13;
}
upstream phpmyadmin_app {
        server 192.168.75.11;    
        server 192.168.75.12;
        server 192.168.75.13;
}
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla_app;
    }
    location /managedb {
        proxy_pass http://phpmyadmin_app;
    }
}

Однако, поскольку единственный открытый порт - это порт Ngxinx 80, потому что он мне нужен и в качестве обратного прокси-сервера, приведенный выше код явно не работает.

Так как я могу добавить балансировка нагрузки в этом сценарии?

Заранее спасибо!

1 Ответ

0 голосов
/ 20 января 2020

В docker рое, вам не нужен собственный балансировщик нагрузки, он имеет встроенный. Просто масштабируйте свои услуги и все. Средство распознавания имен Swarm разрешит joomla и phpmyadmin либо в виртуальный ip, который будет lb роя для этой службы, либо, если вы сконфигурируете службу для работы в режиме dnsrr, при преобразовании имени servicename-hostname в контейнер ip будет использоваться метод dns round-robin.

Однако, если вы хотите распределить сервисы между узлами в Swarm, это совсем другое дело. В этом случае вы можете установить ограничения размещения для каждой службы или установить их как «глобальные» вместо реплицируемых - см. https://docs.docker.com/engine/swarm/services/#control -service -place

...