Docker高级应用之多台主机网络互联

2019-02-26    来源:多智时代

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

目前docker主要应用于单机环境,使用网桥模式,但如果想把多台主机网络互相,让多台主机内部的container互相通信,就得使用其他的软件来帮忙,可以使用Weave、Kubernetes、Flannel、SocketPlane或者openvswitch等,我这里就使用openvswitch来介绍docker多台主机网络互通。

先看一个使用openvswitch连接的架构图,连接的方式是vxlan

Docker高级应用之多台主机网络互联

说明:

这里有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、安装基础环境

Docker高级应用之多台主机网络互联

2、下载最新的包

Docker高级应用之多台主机网络互联

3、解压与打包

Docker高级应用之多台主机网络互联

之后会在~/rpmbuild/RPMS/x86_64/里有2个文件

Docker高级应用之多台主机网络互联

安装第一个就行

4、安装

Docker高级应用之多台主机网络互联

5、启动

Docker高级应用之多台主机网络互联

6、查看状态

Docker高级应用之多台主机网络互联

可以看到是正常运行状态

具体的安装详细步骤可以参考

https://github.com/openvswitch/ovs/blob/master/INSTALL.RHEL.md与http://www.linuxidc.com/Linux/2014-12/110272.htm

二、部署单机环境的docker

1、下载pipework

使用这个软件进行固定ip设置

Docker高级应用之多台主机网络互联

2、在NODEA(ip是10.10.17.3)里运行下面命令

可以把下面内容复制到脚本里运行

Docker高级应用之多台主机网络互联

根据自己的环境修改上面内容

运行脚本

Docker高级应用之多台主机网络互联

可以看到已经启动了2个容器,分别是test1与test2

下面从本地登陆指定的ip试试

Docker高级应用之多台主机网络互联

登陆后可以看到容器内的ip是指定的,并且能ping另外同一个网段的172.16.0.6,外网也能ping通。

下面进行vxlan测试,需要现在另外一个物理宿主机进行上面的脚本安装,然后在进行vxlan配置

3、在NODEB(ip是10.10.17.4)里运行

脚本内容是

Docker高级应用之多台主机网络互联

运行这个脚本

Docker高级应用之多台主机网络互联

登陆分别的固定ip试试

Docker高级应用之多台主机网络互联

可以看到结果跟NODEA(10.10.17.3)里运行的一样,登陆后可以看到容器内的ip是指定的,并且能ping另外同一个网段的172.16.0.9,外网也能ping通

然后在试试能否ping通对方的em1网卡与对方ovs2的ip

4、在NODEA里测试

Docker高级应用之多台主机网络互联

  能ping通自己的em1与10.10.17.4的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通

5、在NODEB里测试

Docker高级应用之多台主机网络互联

结果也是一样,能ping通自己的em1与NODEA(10.10.17.3)的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通

6、vxlan设置

在NODEA里运行

Docker高级应用之多台主机网络互联

在NODEB里运行

Docker高级应用之多台主机网络互联

现在NODEA与NODEB这2台物理机的网络都是互通的,容器的网络也是互通。

然后在NODEA(10.10.17.3)里ping NODEB(10.10.17.4)的ovs2 ip与容器的ip

Docker高级应用之多台主机网络互联

可以看到可以在NODEA(10.10.17.3)里ping通NODEB(10.10.17.4)的ovs2 ip与交换机下面的容器ip

如果各自设置vxlan,还是无法连接请看看iptables里是否给ovs1进行了input放行

Docker高级应用之多台主机网络互联

在NODEB里测试

Docker高级应用之多台主机网络互联

  结果也是一样,设置了vxlan就可以2个宿主机的所有服务器进行通信。

目前是2个节点的vxlan,如果是3个节点呢

7、vxlan多节点应用(超过2个节点)

架构图为

Docker高级应用之多台主机网络互联

新节点是NODEC(ip是10.10.21.199)

环境为

Docker高级应用之多台主机网络互联

部署单机环境,脚本内容是

Docker高级应用之多台主机网络互联

运行脚本

Docker高级应用之多台主机网络互联

可以看到可以ping通本地的ovs2 的ip与交换机下面是ip

Docker高级应用之多台主机网络互联

  可以看到能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

Docker高级应用之多台主机网络互联

然后还需要在NODEA(10.10.17.3)里配置

Docker高级应用之多台主机网络互联

之前在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

Docker高级应用之多台主机网络互联

可以看到是通的

在NODEC(10.10.21.199)里ping NODEA(10.10.17.3)的ovs2的ip与交换机下面的ip

Docker高级应用之多台主机网络互联

也是通的,然后从NODEC(10.10.21.199) ping NODEB(10.10.17.4)的ovs2的ip与其交换机的ip

Docker高级应用之多台主机网络互联

可以看到是通的,平均延迟0.608,并且可以发现使用了vxlan,3个节点,如果想全部互通,只需要2个线连接就行。

如果使用gre模式,3个节点就需要3个线了,架构图为

Docker高级应用之多台主机网络互联

目前使用docker结合openvswitch的vxlan模式就把多台主机的docker连接起来,这样很多测试就方便很多,但还是建议把这样的方式作为测试环境。

本文来源:吟—技术交流 的博客 原文链接:http://dl528888.blog.51cto.com/2382721/1611491

在不久的将来,云计算一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏云计算,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

标签: CentOS idc linux 大数据 服务器 脚本 通信 网络 云计算

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:中俄牵头推网络信息安全准则抗衡美国

下一篇:意大利著名修道院的“云备份”实践