docker overlay网络跨主机通信——使用(OVS)打通网络

上一节已经讲了有4种方法可以打通docker跨主机之间的通信。
本文介绍第二种常用的办法:
使用openvswitch打通网络是一种主流的虚拟化技术:
其优点是:

  • 灵活
  • 对现有物理网络没要求
  • 业界主流

缺点是:

  • 软件封装导致性能下降
  • 复杂度相对较高
  • 排错难度高
    网络图:
    docker overlay网络跨主机通信——使用(OVS)打通网络_第1张图片
         可以看出,针对每个主机ovs创建了一个br0网桥,将docker容器的网卡桥接在br0上面。此时,相当于br0代替了原先docker0网桥的作用,实现主机内容器的互通以及对外网的访问。
         针对每个主机,为br0创建了一个ovs port和ovs interface(type 为gre),并设置gre的remote_ip为其它物理主机。实现br0的跨主机连通。则相关的容器也就可以连通了。
    补充:
    目前来看,基于ovs的跨主机容器通信有两种模式:
         1、GRE
         2、vxlan
         vxlan方式的一个优势是:如果将gre或vxlan比作“网线”的话,对于两台以上主机,比如hostA、hostB和hostC,host之上的container互通只要两根“网线”就行。假设hostA连着hostB,hostB连着hostC,那么hostC上的container自然可以通过hostB找到hostA上的container。而对于GRE方式,则三台主机必须两两连接,此时为集群中添加一台主机则非常麻烦。

环境准备:
两台装有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、同理要是不通,检查防火墙

你可能感兴趣的:(docker)