docker openvswitch網絡方案

1. 測試環境

75機(10.11.150.75):Red Hat Enterprise Linux Server 7.0,無外網訪問權限,已安裝Docker Serverpython

74機(10.11.150.74):Red Hat Enterprise Linux Server 7.0,無外網訪問權限,已安裝Docker Serverdocker

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:ui

技術分享

可經過以下命令安裝 brctl ,後面許多關於網橋的操做須要用到:debug

sudo yum install bridge-utils

在73機和75機之間的網絡ping狀況以下圖所示,能夠看出73機和75機容器之間的是不能ping通的:rest

技術分享

下面將介紹利用Openvswitch對網絡進行配置實現不一樣物理機間容器互連的方法。code

3. 安裝Openvswitch

以73機上的安裝爲例,先經過183機下載安裝包並scp到73機上:blog

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/ovswitch/

切換至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編輯 /proc/sys/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 kbr0 up

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編輯 /proc/sys/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互聯了:

技術分享

相關文章
相關標籤/搜索