我正在使用 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 台服务器来通过私有网络路由所有可能的本地流量。我可以想象也许存在一些可以帮助完成此类任务的工具,或者我可以创建一个,但也许有一种更简单的方法可以做到这一点。