轉載
網上共搜羅到五種方案:
一、利用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