具有动态端口的 Docker Swarm 反向代理

具有动态端口的 Docker Swarm 反向代理

我有以下设置:

  • Docker Swarm 包含 1 个主服务器和 2 个从服务器。
  • 管理群体的 Portainer 服务。
  • 使用在主机上运行的 nginx 的 Web 应用程序。

我想使用 nginx 反向代理其余的 Swarm 服务以终止 ssl。

在 portainer 和 webapp 主页端口上使用反向代理时我取得了成功。

但是,我的用户可以启动一个“会话”,它将在(大)范围内的随机端口上运行,并可从x主节点上的端口访问。

当我在其中一个端口上使用位置语句时,假设我们在 nginx 配置中(在配置中的正确位置)执行以下操作,它不起作用:

location /x {
    proxy_pass http://127.0.0.1:x;
    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

为什么会这样呢?

答案1

我认为有更好的方法可以解决这个问题。使用 Traefik 反向代理(或类似服务)作为 Swarm 服务,并使用服务标签来定义哪些端口应路由到特定服务。这样,您需要发布的特定容器端口列表将通过 traefik 动态路由到它。Traefik 可以与 Docker/Swarm API 对话,并根据 Swarm 中发生的情况实时更新其代理规则。请参阅我的示例和视频https://github.com/BretFisher/dogvscat

相关内容