Вот мои настройки:
- Домен (mydomain.com, api.mydomain.com)
- mydomain.com указывает на IP MGR через DNS-запись A-Record.
- 1 сильный сервер в качестве менеджера роя (теперь MGR)
- 2 небольших сервера в качестве рабочего (WRK1, WRK2)
MGR запускает nginx вне докера для поддержки поддоменов и прочего.
API на основе nodejs
- Работает на WRK1 и WRK2
- API прослушивает порт 4000
- (внутри контейнера, поэтому не на хосте 4000).
Поскольку WRK1 и WRK2 связаны через сетку маршрутизации с MGR, я могу сделать:
curl localhost:4000/info
, и он перенаправит вызов на WRK1
или WRK2
, и они вернут все, что API обслуживает в этой конечной точке. В этом примере я установил конечную точку /info
для отображения идентификатора контейнера (имя хоста):
MainRouter.get('/info', (_request: express.Request, response: express.Response) => {
return response.send(process.env.HOSTNAME);
});
Я могу продолжать вызывать curl localhost:4000/info
, и он будет переключаться между WRK1
и WRK2
. 1041 *
Теперь я хочу подключить api.mydomain.com
к localhost:4000
. Вот мой конфиг nginx (работающий как виртуальный хост на хост-машине):
server {
ssl on;
listen 443;
listen [::]:443;
ssl_certificate /path/to/ssl/cert;
ssl_certificate_key /path/to/ssl/key;
server_name api.mydomain.com;
location / {
proxy_pass http://localhost:4000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}
Мое ожидание:
- api.mydomain.com -> localhost: 4000 ->
WRK1
или WRK2
- api.mydomain.com -> localhost: 4000 ->
WRK1
или WRK2
- api.mydomain.com -> localhost: 4000 ->
WRK1
или WRK2
Реальность:
curl https://api.mydomain.com
-> WRK1 или WRK2 curl https://api.mydomain.com
-> Загрузка за ~ 40секунд -> WRK1 или WRK2
Вот мой файл стека докеров для службы API:
api:
depends_on:
- db
- redis
deploy:
mode: replicated
replicas: 2
placement:
constraints: [node.labels.focus == api]
image: my-api:latest
networks:
- backend
ports:
- target: 4000
published: 4000
protocol: tcp
mode: ingress
Если я поместил 2 API в MGR (2 ядра) и изменилРежим порта на «хост», работает хорошо. Так что должно быть что-то с входной сетью. Если я изменю mode: ingress
на mode: host
, я больше не смогу получить доступ к localhost: 4000 (очевидно). Любая помощь оценена, чтобы решить эту огромную задержку.
Спасибо