拓撲圖以下:html
host1:10.20.10.70docker
host2:10.20.10.71shell
分別在主機1和主機2上建立一個ovs交換機:網絡
ovs-vsctl add-br ovs0 ip link set ovs0 up
分別爲ovs0添加一個port(br0在同一網段):架構
ovs-vsctl add-port ovs0 br0
在主機1建立通往host2的gre隧道:測試
ovs-vsctl add-port ovs0 gre0 -- set interface gre0 type=gre options:remote_ip=10.20.10.71
在主機2建立通往host1的gre隧道:
spa
ovs-vsctl add-port ovs0 gre0 -- set interface gre0 type=gre options:remote_ip=10.20.10.70
在主機1上啓動一個容器(使用pipework把容器掛在br0上,分配的ip地址爲192.168.2.10):.net
./ldocker.sh
在主機2上啓動一個容器(使用pipework把容器掛在br0上,分配的ip地址爲192.168.2.11):code
./ldocker.sh
進入主機1上的容器,ping主機2上的容器:htm
能夠ping通。。。
配置成功
host1上的ldocker.sh代碼以下(反覆試驗的緣由,打到手軟了,因此用個簡單腳本):
#!/bin/sh docker run -itd --name=test1 hochikong/erbuntu:v1 pipework br0 test1 192.168.2.10/24
關於如何進入容器操做ping,請參見本人另外一博文:http://my.oschina.net/hochikong/blog/369036
總結:這樣的方案能夠讓同一網段的容器跨機器進行通信,實現了應用的靈活部署。另外,個人拓撲和這個架構(http://www.sdnlab.com/8236.html)實現的功能是同樣的,你們也能夠參考下,不過我是bridge和OVS混用的,還能夠在ovs0上實現VLAN,目前還沒發現有什麼大問題。
另外我嘗試爲ovs0配置ip,兩個ovs0配置同一網段的ip(好比10.0.0.1和10.0.0.2),網絡也能夠通信,去掉也沒問題。
接下來我要嘗試在兩個host上建立多個這樣的網絡,測試結果遲些出吧。