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互联了: