如何设置受限通信的Dockernetworking?

我试图创build这样的东西:

Docker网络架构

每个服务器容器都有端口8080暴露,并接受来自客户端的请求,但关键的是,它们不允许相互通信。

这里的问题是服务器容器在客户端容器之后启动,所以我不能像以前那样将容器链接标志传递给客户端,因为它应该链接到的容器不存在。

我一直在寻找更新的Dockernetworking的东西,但是我不能使用桥接器,因为我不希望服务器交叉通信成为可能。 在我看来,对于每台服务器来说,一个网桥的伸缩性并不好,而且在客户端容器内很难pipe理。

是否有某种类似开关的docker构造可以做到这一点?

看起来你需要创build多个网桥,每个容器一个。 为了简化这一点,您可能需要使用docker-compose来指定如何configurationnetworking和容器,并使用docker-compose工具正确连接它。

资源:


另外一个方面说明:认为所有networking都可以访问暴露的端口。 如果这是正确的,你可能能够将所有的服务器networking设置为none,并依靠暴露的端口到达服务器。

希望这与您的用例有关 – 我试图从图表和注释中绘制上下文关于您的实际应用程序。 我build议你去服务发现路线。 它可能涉及到一个简单的API(比如Redis或者SkyDNS),但是从长远来看,这会让事情变得简单。

例如,Kubernetes使用SkyDNS来使用DNS。 在一天结束的时候,你select的任何编排工具很可能会像这样开箱即用: https : //github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns

这个想法很简单:

  • 使用保留新产生的服务器的条目的DNS容器
  • 允许客户端容器查询它的服务器列表。 例如,用一堆server-<<ISO Timestamp of Server Creation>>server-<<ISO Timestamp of Server Creation>> DNS响应
  • 不允许客户端容器读取访问这个DNS(如何pipe理这个权限configuration没有间接的,即没有代理通过允许写入DNS容器,但不能读取的端点将异乎寻常)

奖金编辑:我只是意识到你可以使用一个更简单的类似Redis的设置来做到这一点,该DNS可能只是过度工程:)