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,徹底外網訪問,用於下載安裝包工具
在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
以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。
首先開啓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
與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
重啓73機和74機的docker服務,啓動時指定網橋爲咱們建立的kbr0:
sudo killall docker sudo docker -d -b=kbr0 &
啓動幾個docker容器後咱們能夠查看兩臺機子的網絡環境以下:
進行各個設備間的ping操做以後得出下圖的網絡狀況,能夠看到兩個物理機下的容器間已經能夠經過IP互聯了: