这是我的设置:
MGR在docker外部运行nginx来维护子域和其他内容。
基于nodejs的API
由于WRK1和WRK2是通过路由网格与MGR连接的,所以我可以这样做:
curl localhost:4000/info
,它将调用重定向到WRK1
或WRK2
,并且他们将返回此终结点上服务的API。
在此示例中,我设置了/info
端点以显示容器ID(主机名):
MainRouter.get('/info', (_request: express.Request, response: express.Response) => {
return response.send(process.env.HOSTNAME);
});
我可以继续打电话给curl localhost:4000/info
,它将很好地在WRK1
和WRK2
之间切换。
现在,我要将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;
}
}
我的期望:
WRK1
或WRK2
WRK1
或WRK2
WRK1
或WRK2
现实:
curl https://api.mydomain.com
-> WRK1或WRK2 curl https://api.mydomain.com
->加载约40秒-> WRK1或WRK2 这是我用于api服务的docker堆栈文件:
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(显然)。
任何帮助解决此延迟问题的帮助。
谢谢