Docker高级应用之多台主机网络互联
2019-02-26 来源:多智时代
目前docker主要应用于单机环境,使用网桥模式,但如果想把多台主机网络互相,让多台主机内部的container互相通信,就得使用其他的软件来帮忙,可以使用Weave、Kubernetes、Flannel、SocketPlane或者openvswitch等,我这里就使用openvswitch来介绍docker多台主机网络互通。
先看一个使用openvswitch连接的架构图,连接的方式是vxlan
说明:
这里有2台主机,分别是NODEA与NODEB,系统是centos7,内核是3.18(默认centos7内核是3.10,但想使用vxlan,所以得升级,参考http://dl528888.blog.51cto.com/2382721/1609850)
docker是1.3.2版本,存储引擎是devicemapper。
每台主机里都有2个网桥ovs1与ovs2,ovs1是管理网络,连接内网网卡em1,ovs2是数据网络,docker测试机都连接这个ovs2,并且container创建的时候网络都是none,使用pipework指定固定ip。
然后2台主机使用vxlan连接网络。
重要:
我个人认为使用这个模式并且指定固定ip,适用于的环境主要是给研发或者个人的测试模式,如果是集群环境,没必要指定固定ip(我这里的集群就没有使用固定ip,使用动态ip,效果很好,后续给大家介绍集群)。
下面是部署方法
环境
一、安装openvswitch
我的版本是最新的2.3.1
1、安装基础环境
2、下载最新的包
3、解压与打包
之后会在~/rpmbuild/RPMS/x86_64/里有2个文件
安装第一个就行
4、安装
5、启动
6、查看状态
可以看到是正常运行状态
具体的安装详细步骤可以参考
https://github.com/openvswitch/ovs/blob/master/INSTALL.RHEL.md与http://www.linuxidc.com/Linux/2014-12/110272.htm
二、部署单机环境的docker
1、下载pipework
使用这个软件进行固定ip设置
2、在NODEA(ip是10.10.17.3)里运行下面命令
可以把下面内容复制到脚本里运行
根据自己的环境修改上面内容
运行脚本
可以看到已经启动了2个容器,分别是test1与test2
下面从本地登陆指定的ip试试
登陆后可以看到容器内的ip是指定的,并且能ping另外同一个网段的172.16.0.6,外网也能ping通。
下面进行vxlan测试,需要现在另外一个物理宿主机进行上面的脚本安装,然后在进行vxlan配置
3、在NODEB(ip是10.10.17.4)里运行
脚本内容是
运行这个脚本
登陆分别的固定ip试试
可以看到结果跟NODEA(10.10.17.3)里运行的一样,登陆后可以看到容器内的ip是指定的,并且能ping另外同一个网段的172.16.0.9,外网也能ping通
然后在试试能否ping通对方的em1网卡与对方ovs2的ip
4、在NODEA里测试
能ping通自己的em1与10.10.17.4的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通
5、在NODEB里测试
结果也是一样,能ping通自己的em1与NODEA(10.10.17.3)的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通
6、vxlan设置
在NODEA里运行
在NODEB里运行
现在NODEA与NODEB这2台物理机的网络都是互通的,容器的网络也是互通。
然后在NODEA(10.10.17.3)里ping NODEB(10.10.17.4)的ovs2 ip与容器的ip
可以看到可以在NODEA(10.10.17.3)里ping通NODEB(10.10.17.4)的ovs2 ip与交换机下面的容器ip
如果各自设置vxlan,还是无法连接请看看iptables里是否给ovs1进行了input放行
在NODEB里测试
结果也是一样,设置了vxlan就可以2个宿主机的所有服务器进行通信。
目前是2个节点的vxlan,如果是3个节点呢
7、vxlan多节点应用(超过2个节点)
架构图为
新节点是NODEC(ip是10.10.21.199)
环境为
部署单机环境,脚本内容是
运行脚本
可以看到可以ping通本地的ovs2 的ip与交换机下面是ip
可以看到能ping通NODEA(10.10.17.3)与NODEB(10.10.17.4)(em1网卡都是走物理交换机),但他们2个的ovs2都无法ping通
下面是在NODEC(10.10.21.199)里与10.10.17.3做一个vxlan
然后还需要在NODEA(10.10.17.3)里配置
之前在NODEA(10.10.17.3)里与NODE(10.10.17.4)做的vxlan使用vx1,这里NODEA(10.10.17.3)与NODEC(10.10.21.199)就使用vx2端口
然后在NODEA(10.10.17.3)里ping NODEC(10.10.21.199)的ovs2 ip与交换机下面的ip
可以看到是通的
在NODEC(10.10.21.199)里ping NODEA(10.10.17.3)的ovs2的ip与交换机下面的ip
也是通的,然后从NODEC(10.10.21.199) ping NODEB(10.10.17.4)的ovs2的ip与其交换机的ip
可以看到是通的,平均延迟0.608,并且可以发现使用了vxlan,3个节点,如果想全部互通,只需要2个线连接就行。
如果使用gre模式,3个节点就需要3个线了,架构图为
目前使用docker结合openvswitch的vxlan模式就把多台主机的docker连接起来,这样很多测试就方便很多,但还是建议把这样的方式作为测试环境。
本文来源:吟—技术交流 的博客 原文链接:http://dl528888.blog.51cto.com/2382721/1611491
在不久的将来,云计算一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏云计算,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!
标签: CentOS idc linux 大数据 服务器 脚本 通信 网络 云计算
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
下一篇:意大利著名修道院的“云备份”实践