2

我们在 Digital Ocean 上运行堆栈。为了提高安全性,docker swarm 所有都在 Droplets 上的专用网络 (eth1) 上运行。我们有一些管理服务,我们不想在公共 IP 上公开,而是在私有 IP 上公开。

是否可以在特定接口上公开端口?或者可以创建另一个仅在私有 IP 上公开端口的入口网络?

我们现在的解决方法是,我们只是将这些服务作为普通容器运行,并在私有 IP 地址上公开端口。

4

2 回答 2

1

使用覆盖网络驱动程序(使用入口网络)时,只有一个入口,用--data-path-addrduring定义docker swarm init/join。您可以将专用网络用于 Swarm“控制平面” --advertise-addr,但这是您唯一拥有的控制权。

如果您需要控制对特定登录名/IP 组的访问,那么我建议您在它们前面放置一个代理并以这种方式进行控制。这是一些关于它的 nginx 信息。您也许可以在 Docker Flow Proxy 或 Traefik 中进行设置。

您可以做的另一件事是设置服务约束,其中一组服务器用于公共访问,另一组正在侦听私有 IP 并具有特定的节点标签,因此您可以部署具有仅部署到私有/公共服务器的约束的服务。

于 2018-04-09T16:46:16.260 回答
0

答案是否定的,你不能从 docker v20 开始:

  • docker swarm init/join 选项--advertise-addr,--listen-addr--data-path-addr与服务容器暴露端口将绑定到哪些接口无关。
  • dockerd选项为使用或 via--ip启动的独立容器实现了所需的结果,而不是docker swarm。rundocker-compose

Github 上有一个开放的功能请求问题。它自 2016 年以来一直开放,没有任何进展,但似乎受到了核心开发人员的大量反对。在该问题中讨论了一些骇人听闻的变通方法。也看到这个问题

于 2021-03-16T00:31:33.280 回答