Docker网络优化方案介绍:Libnetwork Pipework等

针对安全或者特殊功能要求特殊的网络环境,Docker这个原生的网络功能就会受限制。于是许多项目致力于扩展Docker网络生态。下面我们重点介绍下这些基于Docker网络优化的6个项目及方案。

Libnetwork方案介绍

Libnetwork是Docker公司正在开发的新的网络底层架构,由libcontainer和Docker Engine中的网络相关的代码合并而成。Libnetwork的目标是引入了容器网络模型(CNM),并为应用程序提供一致的编程API接口以及网络抽象。CNM得到了网络方面的合作伙伴Cisco、IBM、Joyent、Microsoft、Rancher、VMware和Weave的支持,使Libnetwork发展为一个跨平台的容器网络管理工具。

Libnetwork的容器网络模型包含了三个重要概念,Network Sandbox,Endpoint和Network。

20160819171046

网络沙盒Network Sandbox承载Docker容器中一个网络配置的隔离、独立运行环境。Endpoint用于在某个网络上进行网络通讯的接口,一个Endpoint只能加入一个network Sandbox,同时,多个Endpoint也可以在一个网络沙盒中共存。Network就是一个唯一的、可识别的endpoint组,组内endpoint可以相互通讯。不同网络组内的endpoint不能通信。可以创建两个完全隔离的Frontendnetwork和Backend network。

Pipework方案介绍

Pipework是由Docker开发者通过Shell开发,作为一个权宜之计来简化Docker网络配置流程,这个项目使得高级网络配置变得容易,能够自动完成一些网络功能配置,但功能有限。

20160819171054

 

Pipework首先会检查是否存在br0网桥,若不存在,就自己创建。若”ovs”开头,就会创建OpenVswitch网桥,以”br”开头,创建Linux网桥。创建veth pair设备,用于为容器提供网卡并连接到br0网桥。

使用Docker inspect找到容器在主机中的pid,然后通过PID将容器的网络命名空间链接到/var/run/netns/目录下。这么做的目的是,方便在主机上使用ip netns命令配置容器的网络。将之前创建的veth pair设备分别加入容器和网桥中(在容器中默认为eth1)。

最后会配置新网卡eth1的IP。若指定为网关地址,那么pipework会改变默认路由eth0和docker0为该IP,容器通往外网的流量会经由新配置的eth1出去。

Socketplane方案介绍

Socketplane是SND创业公司,目前已经被Docker公司收购,其实现方式是在原有的Docker命令上做了一层封装,通过拦截并修改Docker Client发送给Docker engine的命令来实现网络安全和维护的目前。

20160819171101

Socketplane依赖于OpenvSwitch和Consul。Socketplane作为虚拟交换机实现底层网络通信,Consul实现消息同步和服务发现。SocketPlane在 Socket 层面提供了一个网络的抽象层,对开发者屏蔽VLANs, VXLANs, Tunnels 或TEPs等概念,实现和OpenvSwitch集成,支持多网络和分布式 IP 地址管理,通过可管理的方式去解决各种网络问题。

Tinc方案介绍

Tinc是一个轻量的VPN软件,也是一个开源的VPN解决方案,它采用隧道和加密实现。Tinc是一个健壮的解决方案,它能够使私有网络对任何应用透明。

20160819171122

关于Tinc方案介绍的资料并不多,主要借助VPN技术实现数据网络安全传输,由于采用了“虚拟专用网”技术,即用户实际上并不存在一个独立专用的网络,也能保证Docker间数据安全传输。

Docker容器本身具备对内或对外提供服务是原生网络模型和能力,如通过虚拟接口的配置、子网、NAT表管理和iptables等,但是还需要一些网络项目支持,提供了更高级的网络配置和安全控制。

Weave方案介绍

Weave方案包含两大组件,用户态Shell脚本和Weave虚拟路由容器。Weave虚拟路由容器需要在每个宿主机上布置,把不同宿主机的route容器连接起来。

20160819171109

 

不同主机间的网络通信依赖于Weave虚拟route,通过route拦截所有普通容器的IP请求,以UDP数据包发送到其他宿主机上的普通容器,实现跨主机的多个容器扁平网络。但是Weave解决了不同主机网络间通信问题。

Flannel方案介绍

Flannel原名为Rudder,是由CoreOS团队开发,这个项目被开发的初衷是为每一个宿主系统提供一个共享、完整的网络子网,配合Google kubernetes使用,但在其他场景下也被用来简化端口映射和网络管理的复杂性。

20160819171116

Flannel和OpenvSwitch设计思路基本一致,在Docker在宿主机上创建一个网桥时,通过采用Flannel自己的网桥替代它。其差别在于Flannel通信是用软的UDP来包装IP数据包,而OpenvSwitch用的是采用SDN思想。Flannel网络配置是写入到etcd集群中,Flannel进程一般运行在三台主机上,Docker启动时,运行的Docker从主机所属的完整子网网段中动态分配IP.

作者: ICT架构师技术交流

原标题:Docker网络优化方案,你认为哪种将引爆未来?

 

K8S中文社区微信公众号
分享到:更多 ()

评论 抢沙发

评论前必须登录!