使用 Docker Swarm 模式的私有物理网络

使用 Docker Swarm 模式的私有物理网络

我正在使用 Docker 集群模式进行生产设置(使用 Docker 17.03.1-ce)。将涉及 2 个数据中心。在这两个数据中心中,所有机器在私有网络上都有公共 IP 和私有(数据中心本地)IP,因此将有 2 个私有网络。

简化图表可视化设置的链接

私有网络接口上的网络流量是免费的,而公共接口上的流量在经过某些限制后则不是免费的(并且速度较慢),因此在可能的情况下,我更希望网络流量通过私有接口。

现在据我所知(我认为),群模式下 Docker 节点之间的所有流量都将通过用于与群主节点通信的同一网络接口,在我的例子中,这些接口必须是公共接口,才能实现多 DC 网络。然而,大多数预期流量将在同一 DC 中的节点之间进行,如果源节点和目标节点恰好位于同一私有网络上,Docker 能够以某种方式通过我的私有网络路由流量,那就太好了。

我担心这可能无法实现,因为群主不知道这些私有网络以及节点上的 IP。

我能想到的一个解决方案是设置一个 VPN 并在其上部署 Swarm,但这增加了额外的复杂性,而我更喜欢纯 Docker Swarm 解决方案。


更新:正如评论中所建议的那样,解决方案的基础可能是使用 iptables 将传出流量路由到私有 IP 而不是公共 IP。但是,如果我想这样做,我的下一个问题就是如何管理所有这些规则。如果 DC 中有 10 台服务器,我需要 10 * 9 = 90 台服务器来通过私有网络路由所有可能的本地流量。我可以想象也许存在一些可以帮助完成此类任务的工具,或者我可以创建一个,但也许有一种更简单的方法可以做到这一点。

答案1

(可能应该是一条评论,但目前还不能评论)

由于您无法使用主机名和/或 DNS 来引导集群,我认为没有办法强制集群在正确的非计量网络上交换 raft 数据,但我发现您可以使用接口名称。奇怪的是,它没有在swarm 文档问题显示错误消息需要 IP 或接口。

我想知道您是否可以设置集群成员使用私有接口名称进行宣传,以便您以想要的方式获得最多的流量。

现在无法自己测试,但下周可以测试,因为在即将到来的项目中我可能会遇到类似的问题。

相关内容