转载
网上共搜罗到五种方案:
一、利用OpenVSwitch
二、利用Weave
三、Docker在1.9之后支持的Overlay network(官方的做法)
Docker 1.9 Overlay Network实现跨主机网络互通
四、将多个物理机的容器组到一个物理网络来
1.创建自己的网桥br0
2.将docker默认网桥绑定到br0
多台物理主机之间的容器互联
五、修改主机docker默认的虚拟网段,然后在各自主机上分别把对方的docker网段加入到路由表中,配合iptables即可实现docker容器跨主机通信
理解Docker跨多主机容器网络
在Docker 1.9 出世前,跨多主机的容器通信方案大致有如下三种:
1、端口映射
将宿主机A的端口P映射到容器C的网络空间监听的端口P’上,仅提供四层及以上应用和服务使用。这样其他主机上的容器通过访问宿主机A的端口P实 现与容器C的通信。显然这个方案的应用场景很有局限。
2、将物理网卡桥接到虚拟网桥,使得容器与宿主机配置在同一网段下
在各个宿主机上都建立一个新虚拟网桥设备br0,将各自物理网卡eth0桥接br0上,eth0的IP地址赋给br0;同时修改Docker daemon的DOCKER_OPTS,设置-b=br0(替代docker0),并限制Container IP地址的分配范围为同物理段地址(–fixed-cidr)。重启各个主机的Docker Daemon后,处于与宿主机在同一网段的Docker容器就可以实现跨主机访问了。这个方案同样存在局限和扩展性差的问题:比如需将物理网段的地址划分 成小块,分布到各个主机上,防止IP冲突;子网划分依赖物理交换机设置;Docker容器的主机地址空间大小依赖物理网络划分等。
3、使用第三方的基于SDN的方案:比如 使用Open vSwitch – OVS 或CoreOS的Flannel 等。
关于这些第三方方案的细节大家可以参考O’Reilly的《Docker Cookbook》 一书。
Docker在1.9版本中给大家带来了一种原生的跨多主机容器网络的解决方案,该方案的实质是采用了基于VXLAN 的覆盖网技术。方案的使用有一些前提条件:
1、Linux Kernel版本 >= 3.16;
2、需要一个外部Key-value Store(官方例子中使用的是consul);
3、各物理主机上的Docker Daemon需要一些特定的启动参数;
4、物理主机允许某些特定TCP/UDP端口可用。
原文地址:http://blog.csdn.net/ztsinghua/article/details/51545561
https://www.cnblogs.com/liyuanhong/articles/5940220.html