利用Openvswitch實現不同物理機中的Docker容器互連


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM