如何设置受限通信的Dockernetworking?
我试图创build这样的东西:
每个服务器容器都有端口8080暴露,并接受来自客户端的请求,但关键的是,它们不允许相互通信。
这里的问题是服务器容器在客户端容器之后启动,所以我不能像以前那样将容器链接标志传递给客户端,因为它应该链接到的容器不存在。
我一直在寻找更新的Dockernetworking的东西,但是我不能使用桥接器,因为我不希望服务器交叉通信成为可能。 在我看来,对于每台服务器来说,一个网桥的伸缩性并不好,而且在客户端容器内很难pipe理。
是否有某种类似开关的docker构造可以做到这一点?
看起来你需要创build多个网桥,每个容器一个。 为了简化这一点,您可能需要使用docker-compose
来指定如何configurationnetworking和容器,并使用docker-compose
工具正确连接它。
资源:
- https://docs.docker.com/engine/userguide/networking/dockernetworks/
- https://docs.docker.com/compose/
- https://docs.docker.com/compose/compose-file/#version-2
另外一个方面说明:我认为所有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可能只是过度工程:)
- Docker-compose容器使用主机DNS服务器
- 为什么Docker / Containers拥有自己的networking概念(CNM / CNI),而不是使用VMnetworking?
- docker swarm init –listen-addr和–advertise-addr不起作用
- Docker撰写networking:nginx中的主机名不parsing
- 是否有可能从外部互联网隔离用户定义的覆盖networking中的docker集装箱?
- 通过容器路由Dockerstream量
- Docker撰写v3指定networking是入口?
- Dockernetworking通信问题
- 为什么我的Docker容器中的networking/互联网如此之慢?