在Docker群模式下使用专用物理网络


11

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

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

专用网络接口上的网络流量是免费的,而公用接口上的流量没有一定限制(而且速度较慢),因此,在可能的情况下,我希望网络流量通过专用接口。

现在,根据我的理解(我认为),群模式下Docker节点之间的所有流量都将通过用于与群主机进行通信的相同网络接口,在我的情况下,必须是公共网络才能进行多DC网络连接可能。但是,大多数期望的流量将在同一DC中的节点之间,如果源节点和目标节点恰好在同一专用网络上,那么Doc​​ker能够以某种方式通过我的专用网络路由流量,那将是非常好的。

恐怕开箱即用是不可能的,因为群主不了解这些专用网络和节点上的IP。

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


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


1
您可以使用iptables将同一数据中心中同级的目标ip重写为其专用网络ip。另外,这应该在serverfault上而不是SO上;)
n00b32

是的,更多的挖掘使我得出了相同的结论。不过,这将是一个麻烦,我真的需要一个工具来自动为我执行此操作(重写群集/ DC中所有节点之间的所有IP)。毕竟,对于N个节点,我需要(N-1)^ 2个iptables规则。

Answers:


1

(可能应该是评论,但还不能评论)

由于您无法使用主机名和/或DNS引导群集,因此我看不到任何方法可以在正确的非计量网络上强制群集交换筏数据,但是我可以使用接口名称。奇怪的是,它没有在swarm文档中说明,但是有一个问题表明错误消息需要IP或接口。

我想知道是否可以将群集成员设置为使用专用接口名称进行广告,从而以所需的方式获得最大的流量。

目前无法测试自己,但下周将进行测试,因为我可能会遇到即将进行的项目的类似问题。


谢谢,如果您下周发现任何问题,请告诉我。您链接到的问题与“旧的” Docker群功能有关,而我正在使用(并建议您使用)新的Docker群模式,该模式是内置的,不需要外部键/值存储。
埃德(Ede)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.