Stephy 译 分布式实验室

Linux内核为高级容器网络提供关键技术_Java

实验性开源项目Cilium使用现有的Linux内核特性为容器提供更快更有力的网络。


容器使用过程中,网络一直是最令人头疼的问题之一(http://suo.im/16jxVB)。即使是Kubernetes这种快速成为容器编排的首选技术,在完善网络方面也存在局限性。类似网络安全这类棘手问题也变得更棘手。


由Google支持的源项目Cilium(https://www.cilium.io/)也在试图提供一种基于Linux内核已有技术的全新网络技术。项目的目标是为容器提供更好的网络安全以及更简单的网络模式。


BPF式网络

Linux内核为高级容器网络提供关键技术_Java_02


Linux里的网络安全机制,例如iptables,只是工作在网络、数据包以及地址层面,也就是OSI模式中的第三层。然而这些机制并不会涉及类似HTTP等协议。


Cilium利用Linux的巴克利包过滤(BPF,https://lwn.net/Articles/599755/)技术,在网络层和HTTP层为Docker容器或者Kubernetes pods实现网络安全策略。


Linux 2.5版本引入BPF并从此稳定在内核里。多亏了BPF技术,使得我们可以编译并运行内核态程序,通过这些程序实现网络过滤机制,实现性能分析和跟踪。


按照Cilium的GitHub资源库文档,Cilium的工作模式是生成内核级别的BPF程序与容器直接交互。 区别于为容器创建overlay网络,Cilium允许每个容器分配一个IPv6地址(或者IPv4地址),使用容器标签而不是网络路由规则去完成容器间的网络隔离。它还包含创建并实施Cilium规则的编排系统的整合。


使用BPF的两大理由是快速性和方便性。BPF被编译成内部机器代码,所以它能像其它内核代码一样快速运行。Cilium使用的BPF程序变化时不需要重启机器甚至容器也不需要重启。Cilium的创造者也指出BPF程序是基于单个容器进行优化,因此特定容器所不需要的特性不编译进去就行了。


实验性质,后续可能成为必要

Linux内核为高级容器网络提供关键技术_Java_02


Cilium的一个潜在争议是它需要较新的内核版本——4.8.0及以后,建议4.9.17同时LLVM版本要求3.7.1及以后。尽管如此,Cilium的一系列特性并不和特定的Linux版本绑定,举个例子,附加的额外统计不是由Linux内核提供,此外其它转发逻辑也是如此。


Cilium为容器展示了一个实验性质的网络解决方案,在多方面都有很大的发展空间,在这点上,Docker解决方案亦然。Docker原生的网络方案不灵活而且不易于管理,于是公司引入了SocketPlane(http://suo.im/kjgtB)并且把它的网络结构OpenDaylight添加到了Docker 1.9(http://suo.im/2ciN6f)版本里。这成为Docker默认的网络方案,但是理论上如果有其它网络产品和Docker API配合良好的话,我们可以把SocketPlane方案替换掉。


Cilium的优点在于它使用与容器相同的思路,利用现有的Linux内核技术构建;Docker类型的容器本质上还是既有Linux内核能力的重新整合。同样的,Cilium兼容现有技术,拥有一系列被充分了解的使用场景,接近于容器在内核中的级别。


原文链接:http://www.infoworld.com/article/3185419/networking/cilium-leverages-linux-kernel-for-advanced-container-networking.html