上一节已经讲了有4种方法可以打通docker跨主机之间的通信。
本文介绍第二种常用的办法:
使用openvswitch打通网络是一种主流的虚拟化技术:
其优点是:
缺点是:
环境准备:
两台装有docker的centos7机器,尽量保证docker的版本相同
* 192.168.0.124
* 192.168.0.121
实验:
1、 centos默认没有ovs的rpm包,因此需要自己下载源码包制作。
wget http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
2、安装必要的依赖环境。一个Base源就搞定了。
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
3、解压
tar xf openvswitch-2.5.0.tar.gz .
4、创建编译目录
mkdir -p ~/rpmbuild/SOURCES
5、编译:
cp openvswitch-2.5.0.tar.gz rpmbuild/SOURCES/
rpmbuild -bb --without check ~/openvswitch-2.5.0/rhel/openvswitch.spec
6、查看编译好的rpm包:
[root@localhost ~]# ls rpmbuild/RPMS/x86_64/
openvswitch-2.5.0-1.x86_64.rpm openvswitch-debuginfo-2.5.0-1.x86_64.rpm
7、安装openvswitch
rpm -i openvswitch-2.5.0-1.x86_64.rpm
8、拷贝到另一台机器也安装该软件
9、启动服务:
systemctl start openvswitch
10、安装网桥管理工具
yum install bridge-utils -y
11、配置网络,添加br0网桥到docker0。
[root@localhost ~]# ovs-vsctl add-br br0
12、使得容器流量通过ovs流经tunnel,两台主机操作下面的命令是remote_ip写对方主机
[root@localhost ~]# ovs-vsctl add-port br0 gre1 -- set interface gre0 type=gre option:remote_ip=192.168.0.121
13、绑定br0到docker0
[root@localhost ~]# brctl addif docker0 br0
14、
[root@localhost ~]# ip link set dev br0 up
[root@localhost ~]# ip link set dev docker0 up
[root@localhost ~]# iptables -t nat -F ; iptables -F
15、两台主机均执行上述配置,注意IP地址。
16、添加路由:
192.168.0.124添加:
ip route add 172.17.0.0/16 dev docker0
192.168.0.121添加:
ip route add 172.20.0.0/16 dev docker0
17、测试:
分别两台主机运行一个容器。
docker run -it --rm busybox
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=63 time=0.945 ms
docker run -it --rm busybox
/ # ping 172.20.0.2
PING 172.20.0.2 (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=63 time=0.973 ms
64 bytes from 172.20.0.2: seq=1 ttl=63 time=0.508 ms
18、同理要是不通,检查防火墙