我正在Swarm模式下使用Docker进行生产设置(使用Docker 17.03.1-ce)。 将有2个数据中心参与。 在这两个数据中心中,所有机器在专用networking上都具有公共IP和私有(本地到数据中心)IP,因此将有两个专用networking。
通过专用networking接口的networkingstream量是免费的,而通过公共接口的stream量没有经过一定的限制(速度较慢),所以在可能的情况下,我更希望networkingstream量通过专用接口。
现在从我的理解(我认为),Swarm模式下的Docker节点之间的所有stream量将通过用于与swarm master进行通信的相同的networking接口,在我的情况下,这将是公共networking接口,用于进行多DCnetworking可能。 但是,大多数预期的stream量将在同一个DC中的节点之间,如果源和目标节点碰巧位于同一个专用networking上,如果Docker能够以某种方式将stream量路由通过我的专用networking,那将是非常好的。
恐怕这可能是不可能的,因为swarm master不知道这些专用networking和节点上的IP。
我能想到的一个解决scheme是build立一个VPN并在其上部署群集,但是这增加了额外的复杂性,我更喜欢纯粹的Docker群集解决scheme。
更新 :如评论中所build议的,解决scheme的基础可能是使用iptables将外出stream量路由到私有IP而不是公共IP。 但是,如果我想这样做,我的下一个问题将是如何pipe理所有这些规则。 在DC有10台服务器的情况下,我需要10 * 9 = 90个路由器才能通过专用networking路由所有可能的本地stream量。 我可以想象,也许有一些工具可以帮助完成这样的任务,或者我可以创build一个,但也许有一个更简单的方法来做到这一点。
(可能它应该是一个评论,但不能评论)
由于您不能使用主机名和/或DNS来引导群集,所以我看不出在正确的未定义networking上强制群集交换木筏数据的方法,但是我看到您可以使用接口名称。 奇怪的是,它没有在swarm文档中声明,但是一个问题显示错误消息需要一个IP或接口。
我想知道是否可以使用专用接口名称来设置集群成员进行通告,以便以您想要的方式获得最多的stream量。
现在不能testing自己,但是下个星期我可能会遇到类似的问题。