1、pipework的安裝
Pipework是一個Docker配置工具,是一個開源項目,由200多行shell實現。
Pipework是一個集成工具,需要配合使用的兩個工具是OpenvSwitch和Bridge-utils。
$ git clone https://github.com/jpetazzo/pipework.git $ sudo cp pipework/pipework /usr/local/bin/
2、pipework配置Docker的三個簡單場景
2.1 pipework+linux bridge:配置Docker單主機容器
#主機A:192.168.187.143 #主機A上創建兩個容器con1、con2 docker run -itd --name con1 --net=none ubuntu:14.04 bash docker run -itd --name con2 --net=none ubuntu:14.04 bash #使用pipework建立網橋br0,為容器con1和con2添加新的網卡,並將它們連接到br0上 pipework br0 con1 10.0.0.2/24 pipework br0 con2 10.0.0.3/24 #在容器con1和con2內部可以看到有一個網卡地址分別如上,可以ping通
2.2 pipework+OVS:單主機Docker容器VLAN划分
pipework不僅可以使用Linux bridge連接Docker容器,還可以與OpenVswitch結合,實現Docker容器的VLAN划分。
1 #主機A的IP地址為:192.168.187.147
2 #在主機A上創建4個Docker容器,test1、test2、test3、test4 3
4 docker run -itd --name test1 --net=none busybox sh 5 docker run -itd --name test2 --net=none busybox sh 6 docker run -itd --name test3 --net=none busybox sh 7 docker run -itd --name test4 --net=none busybox sh 8
9 #將test1,test2划分到一個vlan中,vlan在mac地址后加@指定,此處mac地址省略 10 pipework ovs0 test1 192.168.0.1/24 @100
11 pipework ovs0 test2 192.168.0.2/24 @100
12
13 #將test3,test4划分到另一個vlan中 14 pipework ovs0 test3 192.168.0.3/24 @200
15 pipework ovs0 test4 192.168.0.4/24 @200
16
17 #此時進入容器test1 18 ping 10.0.0.2 #可以通信 19 ping 10.0.0.3 #不可以通信
這個功能其實是由於OpenVSwitch本身支持VLAN功能,在將veth pair的一端加入ovs0網橋時,指定了tag。底層的操作是
ovs-vsctl add-port ovs0 veth* tag=100
2.3 pipework+OVS:多主機Docker容器VLAN划分
1 #主機A:192.168.187.147
2 #主機B:192.168.187.148
3
4 #主機A上 5 docker run -itd --net=none --name con1 busybox sh 6 docker run -itd --net=none --name con2 busybox sh 7
8 #划分vlan 9 pipework ovs con1 10.0.0.1/24 @100
10 pipework ovs con2 10.0.0.2/24 @200
11
12 #將eth0連接到ovs上 13 ovs-vsctl add-port ovs eth0 14
15 #同理在主機B上進行操作 16 docker run -itd --net=none --name con3 busybox sh 17 docker run -itd --net=none --name con4 busybox sh 18
19 #划分vlan 20 pipework ovs con3 10.0.0.3/24 @100
21 pipework ovs con4 10.0.0.4/24 @200
22
23 #將eth0連接到ovs上 24 ovs-vsctl add-port ovs eth0
遇到問題:
1)進入容器con3,我們期望的結果是可以ping通con1,但是不能ping通con2.但是實驗發現都不能ping通。感覺跨主機划分vlan還是存在問題。
注:看到將eth0連接到ovs上另一種實現方式如下,但是試過了還是不能ping通
1 #主機A的IP地址為:192.168.187.147
2 ip addr add 192.168.187.147/24 dev ovs0 3 ip addr del 192.168.187.147/24 dev eth0 4 ovs-vsctl add-port ovs0 eth0 5 route del default
6 route add default gw 192.168.187.254 dev ovs0
2)如果不划分vlan的話,是可以跨主機通信的。