1. 測試環境
75機(10.11.150.75):Red Hat Enterprise Linux Server 7.0,無外網訪問權限,已安裝Docker Server
74機(10.11.150.74):Red Hat Enterprise Linux Server 7.0,無外網訪問權限,已安裝Docker Server
73機(10.11.150.73):Red Hat Enterprise Linux Server 7.0,無外網訪問權限,已安裝Docker Server
183機:OS X Yosemite 10.10.4,完全外網訪問,用於下載安裝包
2. 默認Docker網絡情況
在73機和75機上通過下面命令啟動docker服務:
sudo docker -d &
啟動幾個容器后,通過 brctl 工具和 ip a 查看網橋的配置情況,可以看到docker啟動后默認創建了一個名為docker0的網橋,且分配了了172.17.42.1的內部IP:
可通過如下命令安裝 brctl ,后面許多關於網橋的操作需要用到:
sudo yum install bridge-utils
在73機和75機之間的網絡ping情況如下圖所示,可以看出73機和75機容器之間的是不能ping通的:
下面將介紹利用Openvswitch對網絡進行配置實現不同物理機間容器互連的方法。
3. 安裝Openvswitch
以73機上的安裝為例,先通過183機下載安裝包並scp到73機上:
wget http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz scp openvswitch-2.3.0.tar.gz scs@10.11.150.73:/opt/scs/openxxs
在73機上安裝必要的依賴環境,大部分依賴項Linux系統都自帶了:
sudo yum -y install openssl-devel gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool
創建系統用戶ovs,並將安裝包復制到ovs的主目錄下:
sudo adduser ovs sudo cp /opt/scs/openxxs/openvswitch-2.3.0.tar.gz /home/ovs/
切換至ovs用戶,進行yum安裝Openvswitch的必要准備,然后退回到原scs用戶:
sudo su - ovs tar -zxvpf openvswitch-2.3.0.tar.gz mkdir -p ~/rpmbuild/SOURCES sed 's/openvswitch-kmod, //g' openvswitch-2.3.0/rhel/openvswitch.spec > openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec cp openvswitch-2.3.0.tar.gz rpmbuild/SOURCES/ rpmbuild -bb --without check ~/openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec exit
安裝Openvswitch:
sudo yum localinstall /home/ovs/rpmbuild/RPMS/x86_64/openvswitch-2.3.0-1.x86_64.rpm
安裝完之后就可以啟動openswitch服務了:
sudo mkdir /etc/openvswitch setenforce 0 sudo systemctl start openvswitch.service sudo systemctl status openvswitch.service -l
以相同方式在74機上安裝並啟動Openvswitch。
4. 網橋配置
1)73機上配置:
首先開啟ip_forward:
sudo sysctl -w net.ipv4.ip_forward=1
然后通過ovs-vsctl創建ob0網橋並綁定IP:
sudo ovs-vsctl add-br ob0 sudo ovs-vsctl add-port ob0 gre0 -- set Interface gre0 type=gre options:remote_ip=10.11.150.73
通過brctl創建kbr0網橋和ob0關聯,並刪除docker0網橋的關聯:
sudo brctl addbr kbr0 sudo brctl addif kbr0 ob0
sudo ip link set dev docker0 down
sudo ip link del dev docker0
創建 /etc/sysconfig/network-scripts/ifcfg-kbr0 文件,內容如下:
DEVICE=kbr0 ONBOOT=yes BOOTPROTO=static IPADDR=172.17.2.1 NETMASK=255.255.255.0 GATEWAY=172.17.2.0 USERCTL=no TYPE=Bridge IPV6INIT=no
創建 /etc/sysconfig/network-scripts/route-em1 文件(em1為實際網卡),內容如下:
172.17.1.0/24 via 10.11.150.74 dev em1
配置完成后,重啟網絡服務:
sudo systemctl restart network.service
2)74機上配置:
與73機的配置類似,首先開啟ip_forward:
sudo sysctl -w net.ipv4.ip_forward=1
然后通過ovs-vsctl創建obr0網橋並綁定IP:
sudo ovs-vsctl add-br obr0
sudo ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=10.11.150.74
通過brctl創建kbr0網橋和obr0關聯,並刪除docker0網橋的關聯:
sudo brctl addbr kbr0
sudo brctl addif kbr0 obr0
sudo ip link set dev docker0 down
sudo ip link del dev docker0
創建 /etc/sysconfig/network-scripts/ifcfg-kbr0 文件,內容如下:
DEVICE=kbr0
ONBOOT=yes BOOTPROTO=static IPADDR=172.17.1.1 NETMASK=255.255.255.0 GATEWAY=172.17.1.0 USERCTL=no TYPE=Bridge IPV6INIT=no
創建 /etc/sysconfig/network-scripts/route-em1 文件(em1為實際網卡),內容如下:
172.17.2.0/24 via 10.11.150.73 dev em1
配置完成后,重啟網絡服務:
sudo systemctl restart network.service
5. 配置后網絡情況
重啟73機和74機的docker服務,啟動時指定網橋為我們創建的kbr0:
sudo killall docker sudo docker -d -b=kbr0 &
啟動幾個docker容器后我們可以查看兩台機子的網絡環境如下:
進行各個設備間的ping操作之后得出下圖的網絡情況,可以看到兩個物理機下的容器間已經可以通過IP互聯了:
6. 附
參考資料(外文,需FanQiang):https://n40lab.wordpress.com/2015/01/25/centos-7-installing-openvswitch-2-3-1-lts/
參考資料(中文):http://ylw6006.blog.51cto.com/470441/1606239/
openvswitch-2.3.0.tar.gz 百度雲備份:http://pan.baidu.com/s/1c056wq0