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

责任编辑:editor005

2015-02-12 14:39:17

摘自:吟—技术交流 的博客

结果也是一样,能ping通自己的em1与NODEA(10 10 17 3)的em1网卡,并且对方的ovs2的ip也能ping通,但ovs2里的主机无法ping通 可以看到能ping通NODEA(10 10 17 3)与NODEB(10 10 17 4)(em1网卡都是走物理交换机),但他们2个的ovs2都无法ping通

目前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

链接已复制,快去分享吧

企业网版权所有©2010-2025 京ICP备09108050号-6京公网安备 11010502049343号