利用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 [email protected]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 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互联了:

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

时间: 2024-10-29 19:11:30

利用Openvswitch实现不同物理机中的Docker容器互连的相关文章

虚拟机中的磁盘映射到物理机中

虚拟机中的磁盘映射到物理机中

教你如何修改运行中的docker容器的端口映射

在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺点是如

[转帖]教你如何修改运行中的docker容器的端口映射

在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺点是如

如何修改运行中的docker容器的端口映射

在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺点是如

2.如何在物理机中部署一个NanoServer

与部署在虚拟机中类似,这里仅仅对不同步骤进行说明 1.创建物理机使用的VHD文件(映像)屏幕剪辑的捕获时间: 2017/5/20 12:54 物理机器的 PowerShell 命令行记录 New-NanoServerImage -MediaPath 'F:\' -Edition 'Datacenter' -DeploymentType Host -TargetPath '\\tanshuai-nas\home\My LocalFiles\VHD\NanoServer\MyNanoServer3.

在Windows宿主机中连接虚拟机中的Docker容器

1. 简单拓扑图 如果此时在宿主机中pingDocker容器是ping不同的,因为在宿主机上没有通往192.168.1.0/24网络的路由,宿主机会将发往192.168.1.0/24网络的数据发往默认路由,这样就无法到达容器. 2. 解决方法: 1. 首先要保证在虚拟机中能够连接到Docker容器中,用ping测试是否通畅 2. 关闭虚拟中的防火墙: systemctl stop firewalld.service 3. 打开宿主机(windows)的cmd,在其中添加通往192.168.1.0

【云快讯】之二十五《微软将在Windows Server中支持“Docker”容器》

2015-04-09 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 Windows Server Containers will be able to run applications specifically built for Windows Server and .Net 微软已经开发了一种容器技术,可以在Windows Server操作系统上运行,是希望能够在微软的windows和.Net体系上复制基于Docker的容器在Linux上的成功. &qu

WEB服务器的配置及在其所拼通物理机中查看

WEB服务器的配置 实验要求: 创建web服务器(内容为"欢迎参加红河州计算机技能大赛!")一.首先第一步**输入内容后记得保存 原文地址:http://blog.51cto.com/14118608/2335420

WEB服务器的配置 在其所拼通物理机中查看

WEB服务器的配置 实验要求: 创建web服务器(内容为"欢迎参加红河州计算机技能大赛!")一.首先第一步 原文地址:http://blog.51cto.com/14118608/2335633