我正在以集群模式使用Docker进行生产设置(使用Docker 17.03.1-ce)。将涉及2个数据中心。在两个数据中心中,所有机器在专用网络上都具有公用IP和专用(数据中心本地)IP,因此将有2个专用网络。
专用网络接口上的网络流量是免费的,而公用接口上的流量没有一定限制(而且速度较慢),因此,在可能的情况下,我希望网络流量通过专用接口。
现在,根据我的理解(我认为),群模式下Docker节点之间的所有流量都将通过用于与群主机进行通信的相同网络接口,在我的情况下,必须是公共网络才能进行多DC网络连接可能。但是,大多数期望的流量将在同一DC中的节点之间,如果源节点和目标节点恰好在同一专用网络上,那么Docker能够以某种方式通过我的专用网络路由流量,那将是非常好的。
恐怕开箱即用是不可能的,因为群主不了解这些专用网络和节点上的IP。
我能想到的一种解决方案是设置VPN并在其上部署群集,但这增加了额外的复杂性,我更喜欢纯Docker群集解决方案。
更新:如评论中所建议,解决方案的基础可能是使用iptables将传出流量路由到专用IP而不是公用IP。但是,如果我想这样做,我的下一个问题将是如何管理所有这些规则。在DC中有10台服务器时,我需要10 * 9 = 90台服务器才能通过专用网络路由所有可能的本地流量。我可以想象也许存在一些可以帮助完成此类任务的工具,或者我可以创建一个工具,但是也许有一种更简单的方法可以完成此任务。