如何设置具有受限通信的Docker网络?

时间:2016-05-12 14:18:28

标签: networking docker containers

我试图创造这样的东西:

Docker Network Architecture

服务器容器每个都暴露了端口8080,并接受来自客户端的请求,但至关重要的是,它们 允许彼此通信。

这里的问题是服务器容器是在客户端容器之后启动的,所以我不能像过去那样将容器链接标志传递给客户端,因为容器它&#39 ; s应该链接到还没有存在。

我一直在关注较新的Docker网络,但我无法使用网桥,因为我不希望服务器交叉通信成为可能。在我看来,每个服务器的一个桥接器不能很好地扩展,并且很难在客户端容器内进行管理。

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

2 个答案:

答案 0 :(得分:1)

您似乎需要创建多个网桥,每个容器一个。为了简化这一点,您可能希望使用docker-compose来指定应如何配置网络和容器,并让docker-compose工具正确连接它。

资源:

还有一个注意事项:认为所有网络都可以访问公开的端口。如果这是正确的,您可以将所有服务器网络设置为无,并依靠暴露的端口来访问服务器。

答案 1 :(得分:0)

希望这与您的用例相关 - 我正在尝试从图表和注释中绘制关于您的实际应用程序的上下文。我建议你去服务发现路线。它可能涉及中央商店(比如Redis或SkyDNS)的一些简单API,但从长远来看会使事情变得简单。

例如,Kubernetes使用SkyDNS通过DNS进行此操作。在一天结束时,您选择的任何编排工具很可能会开箱即用:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns

这个想法很简单:

  • 使用保存新生成的服务器条目的DNS容器
  • 允许客户端容器查询它以获取服务器列表。例如使用一堆server-<<ISO Timestamp of Server Creation>> s
  • 描绘DNS响应
  • 禁止客户端容器对此DNS进行读访问(如何在没有间接的情况下管理此权限配置,即不通过允许写入DNS容器的端点代理,但不读取, 继续到异国情调)

奖金编辑:我刚刚意识到你可以使用更简单的类似Redis的设置来执行此操作,并且DNS可能只是过度工程:)