Weave作为在docker 0.x时代开始就比较完备的网络方案一直在不断发展,目前已经实现了对多种平台和软件的支持。本文将会介绍Weave Net的相关信息和进行体验。
简单介绍支持云的平台、系统和软件有AWS,Azure,CoreOS,k8s,Mesos,Docker Machine,Docker Swarm等。目前Weave有三个成果:Weave Net,Weave Run,Weave Scope。
Weave Net的使用相当简单,Weave创建的网络可以连通在不同位置的容器,比如公有云、私有云,虚拟机和裸金属设备,容器网络可以承载二层和三层的流量,并支持多播;内建的加密功能让容器隔离更加容易实现; Weave网络还可以自动选择最快的路径路由容器流量,保证容器的网络速度。
原理Weave Net是怎样实现跨主机通讯的呢?实际上,Weave的跨主机通讯方案与先前的Ambassador其实很相似,不过后者是让容器间通过docker的link功能实现通讯。
每台运行weave的主机都需要运行几个必须的容器,透过这些容器实现跨主机通讯。在一个weave网络中,会有多个运行在不同主机的peer,这些peer起到路由的作用。
在weave routers间会创建TCP或UDP连接,工作的流程是:
1.先执行handshake
2.随后交换拓扑信息
如果用户启用了加密(启用加密的方法会在后面说明),这些全双工的连接会使用UDP协议承载封装好的网包,并且可以透过防火墙。
在实现上,weave会在主机上创建一个网桥,容器会通过veth peer连接到网桥,一般情况下由weave自带的地址分配工具自动分配为容器分配地址,如果用户进行干预,则以用户设置优先。
因为起到路由作用的weave容器也会连接到上述网桥,所以,weave routers会借助pcap,透过设置为混杂模式的接入网桥的接口捕捉以太网包,但是对于直接透过内核转发的本地容器间流量或是宿主机与本地容器间的流量则会被排除。
被捕捉的数据包通过UDP协议转发到其他Host上的weave router peer上,一旦收到这些包,路由会把包通过pcap注入到它的网桥接口或转发到其他的peers。
weave路由会通过mac地址识别不同的peer所在的位置,连同拓扑信息去决定转发路径,避免采取像泛洪般的手段,把每个包都发到每个peer上,以提高网络性能。
安装、试用笔者用了两个vmware虚拟机,分别为machine1(172.16.77.181)和machine2(172.16.77.182),只有一个NAT接口,使用的Docker版本为1.9。
安装分别在两个vm上下载安装weave: