简介:
实现主机 172.31.179.140 和 172.31.179.141 之间docker的通信, 图例如下
Open vSwtich
Open vSwtich 翻译成中文就是开放虚拟交换机, 是使用软件方式实现交换机的功能, 也就是虚拟出来的一个交换机, 因为 docker的容器是在一台主机上面虚拟出来的, 不可能在上面接一个物理的交换机, 只能采用虚拟化技术, 并且 Open vSwtich 虚拟出来的交换机功能也是很强大的
通过 Open vSwtich 和 docker 结合, 可以发挥他的强大作用
安装Open vSwtich(两台服务器都安装)
安装所需的依赖
[root@talon ~]# yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config
安装完成
访问官网下载安装包 http://www.openvswitch.org/download/, 右键复制下载链接, wget下载
[root@talon ~]# wget https://www.openvswitch.org/releases/openvswitch-2.5.8.tar.gz
下载完成, 之后为构建rpm包做一些预处理, 首先建一个文件夹, 把包解压开
[root@talon ~]# mkdir -p ~/rpmbuild/SOURCES
[root@talon ~]# cp openvswitch-2.5.8.tar.gz ~/rpmbuild/SOURCES/
[root@talon ~]# cd ~/rpmbuild/SOURCES
[root@talon SOURCES]# tar -zxf openvswitch-2.5.8.tar.gz
之后修改一下解压的文件
[root@talon SOURCES]# sed 's/openvswitch-kmod, //g' openvswitch-2.5.8/rhel/openvswitch.spec > openvswitch-2.5.8/rhel/openvswitch_no_kmod.spec
构建rpm包
[root@talon SOURCES]# rpmbuild -bb --nocheck openvswitch-2.5.8/rhel/openvswitch_no_kmod.spec
执行构建的包
[root@talon SOURCES]# yum localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.5.8-1.x86_64.rpm
输入y
完成
启动服务
[root@talon SOURCES]# systemctl start openvswitch
查看状态
配置docker
修改两台服务器的docker0
172.31.179.140的网段改成172.17.42.1/24 此处最好使用 /24 也就是 255.255.255.0 作为子网掩码, 应为 接下来的路由配置要是两个主机网段的上级网络, 使用 255.255.0.0 作为子网掩码
修改172.31.179.140的docker0
[root@talon ~]# vim /etc/docker/daemon.json
{
"bip": "172.17.42.1/24"
}
修改 172.31.179.141 的 docker0 为 172.17.43.1/24
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# vim /etc/docker/daemon.json
{
"bip": "172.17.43.1/24"
}
配置两台服务器的 open vSwtich
配置172.31.179.140
在172.31.179.140 上添加一个网桥并且在上面加一个到 172.31.179.141的网口
[root@talon ~]# ovs-vsctl add-br br0
[root@talon ~]# ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=172.31.179.141
查看配置
[root@talon ~]# ovs-vsctl show
把刚刚新建的网桥挂载到docker0, brctl 无法执行, 可以使用 yum install -y bridge-utils 安装
[root@talon ~]# brctl addif docker0 br0
完成后重启网卡关闭iptables
[root@talon ~]# ip link set dev br0 up
[root@talon ~]# ip link set dev docker0 up
[root@talon ~]# iptables -t nat -F; iptables -F
添加路由
[root@talon ~]# ip route add 172.17.0.0/16 dev docker0
查看路由
[root@talon ~]# ip route
配置172.31.179.141
同样在172.31.179.141 上添加一个网桥并且在上面加一个到 172.31.179.140的网口
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ovs-vsctl add-br br0
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=172.31.179.140
查看配置
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ovs-vsctl show
同样也是刚刚建的网桥挂载到docker0
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# brctl addif docker0 br0
一样的启动网卡关闭 iptables
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ip link set dev br0 up
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ip link set dev docker0 up
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# iptables -t nat -F; iptables -F
添加路由规则
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ip route add 172.17.0.0/16 dev docker0
查看路由
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ip route
相互链接测试
在 172.31.179.140 上面ping 172.31.179.141的docker0
在 172.31.179.141 上面ping 172.31.179.140的docker0
如果还是ping不通 , 检查一下两边docker0 网桥, 确定状态是 UP
[root@iZm5e06w0dz0mm8v7hxhdhZ ~]# ip a
如果不是 UP , 可是尝试再次执行 brctl addif docker0 br0, 把br0 接到dcoker0, 会自动启动docker0 的, 再次查看状态