美文网首页
利用weave工具实现跨物理主机组网

利用weave工具实现跨物理主机组网

作者: 扎你p屁 | 来源:发表于2018-09-16 12:00 被阅读0次

Weave简介

当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来。容器在不同主机之间都使用的是自己的私有IP地址,不同主机的容器之间进行通讯需要将主机的端口映射到容器的端口上,而且IP地址需要使用主机的IP地址。Weave正是为了解决这个问题而出现的,它把不同主机上容器互相连接的网络虚拟成一个类似于本地网络的网络。
如果了解SDN技术或者部署过OpenStack的网络模块(Neutron)的话,这里通过Weave构建的网络与它们比较类似。它是在一个网络的基础上,构建了一层由软件定义的网络层,这个网络看起来就像是一个本地的局域网,但是实际上它的底层通过另一个网络进行通信。这个网络可能会比实际物理局域网的可靠性要差一些,但是从可用性角度来看,它带来了很大的便利性:可以在位于不同位置的节点之间通信,而好像它们在一个地方一样。也可以把这种网络想象成一个类似于VPN似的东西。
weave通过在docker集群的每个主机上启动虚拟的路由器,将主机作为路由器,形成互联互通的网络拓扑,在此基础上,实现容器的跨主机通信。其主机网络拓扑参见下图:


image.png

如上图所示,在每一个部署Docker的主机(可能是物理机也可能是虚拟机)上都部署有一个W(即weave router,它本身也可以以一个容器的形式部署)。

Weave的安装与启动

安装
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave

可以通过以下命令检验是否安装完成

weave version
weave status
启动
weave launch

之后会pull下来3个镜像,分别是

REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
weaveworks/weaveexec                    2.4.1               9e84d368c391        2 days ago          151MB
weaveworks/weave                        2.4.1               ff4c735f9ce5        2 days ago          96.6MB
weaveworks/weavedb                      latest              15c78a9b1895        7 weeks ago         698B

还会run一个容器

325677aa3f97        weaveworks/weave:2.4.1   "/home/weave/weaver …"   19 hours ago        Up 19 hours                             weave

还会新启动一个网络

NETWORK ID          NAME                DRIVER              SCOPE
ae3da1032819        weave               weavemesh           local

Weave的部署

1)机器环境准备:(2台云服务器)
node-1:119.29.241.15
node-2:134.175.64.74
2)在3台机上均启动一个应用容器
由于weave2.0版本里 weave run命令已经remove,所以此处采取docker run + weave connect的方式
在node-1上启动容器my-test1

docker run -itd --name=my-test1 
weave attach 192.168.0.2/24 my-test1 // weave detach 192.168.0.2/24 my-test1表示删除这个绑定
docker exec -ti my-test1 /bin/sh
ifconfig

在config中,可以看到有eth0和weave两个网桥

eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:04
          inet addr:172.17.0.4  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2296 (2.2 KiB)  TX bytes:0 (0.0 B)

ethwe     Link encap:Ethernet  HWaddr E2:E9:8E:EC:B2:84
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1376  Metric:1
          RX packets:42 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2618 (2.5 KiB)  TX bytes:1946 (1.9 KiB)

在node-1上启动容器my-test2,重复node-1的操作

docker run -itd --name=my-test2
weave attach 192.168.0.3/24 my-test2
docker exec -ti my-test2 /bin/sh
ifconfig

应该也可以看到my-test2的网络情况
3)容器互联
默认情况下,上面在node-1和node-2两台宿主机上创建的2个容器间都是相互ping不通的。需要使用weave connect命令在两台weave的路由器之间建立连接。
在node-1上执行

weave connect 134.175.64.74 // weave forget ip则表示断开这个连接

然后就会发现,此时位于两台不同主机上的相同子网段内的容器之间可以相互ping通了。再在node-1上启动容器my-test3,绑定ip为192.168.0.8,在node-2上启动容器my-test4,绑定ip为192.168.0.10会发现这四个在同一个子网内的容器都是可以相互ping通的。再接着启动与上面不在同一个子网内的容器node-1上启动容器my-test5,绑定ip为192.168.10.10,node-2上启动容器my-test6,绑定ip为192.168.10.20。会发现在跨主机情况下,相同子网内的容器是可以相互通信的;但是处于不同子网的两个容器是不能互联的,尽管这两个容器在同一个主机下也是不能通信的!
这样的好处就是:使用不同子网进行容器间的网络隔离了。

相关文章

网友评论

      本文标题:利用weave工具实现跨物理主机组网

      本文链接:https://www.haomeiwen.com/subject/bmktnftx.html