试验性的开源Cillium项目使用Linux内核的一项现有特性,为容器提供高速、强大的网络功能。一项名为Cilium的开源项目试图基于Linux内核中所用的技术,为容器提供一种新的网络方法。 |
试验性的开源Cillium项目使用Linux内核的一项现有特性,为容器提供高速、强大的网络功能。
网络功能始终是使用容器时最头痛的棘手问题之一。连Google开源的容器集群管理系统Kubernetes在实现网络功能方面也存在着限制,虽然它正迅速成为容器编排的首选技术。这让网络安全之类的棘手问题变得更棘手了。
现在,一项名为Cilium的开源项目试图基于Linux内核中所用的技术,为容器提供一种新的网络方法DD该项目得到了谷歌的部分赞助,目的在于为容器提供更好的网络安全和更简单的网络模型。
以BPF方式来联网
Linux中的网络安全机制(比如iptable)通常只适用于网络、数据包和地址这些层面,即OSI模型的第3层。那些机制无法与HTTP之类的协议对话。
Cilium使用Linux的伯克利数据包过滤(BPF)技术,在网络层面和HTTP层面为Docker容器或Kubernetes pod执行网络安全策略。
BPF被引入到了Linux 2.5,此后就成了内核中的一项稳定功能。由于BPF,人们可以在内核里面编译并运行提供网络过滤机制和性能分析及跟踪分析的小程序。
据Cilium的GitHub代码库说明文档显示,Cilium的工作原理是生成内核层面的BPF程序,这些程序可直接与容器协同运行。Cilium可以为每个容器分配一个IPv6地址(或除此之外的IPv4地址),并使用容器标签而非网络路由规则来执行容器之间的隔离,而不是为容器创建覆盖网络。它还包括了面向编排系统的整合,以便处理创建和执行Cilium策略的工作。
Cilium使用BPF的两大原因是速度和便利。BPF程序被编译成原生机器代码,那样它们运行起来速度与其他任何内核代码一样快。对Cilium使用的BPF程序加以改动不需要重新引导,甚至不需要容器重启。Cilium的开发者还声称,BPF程序针对每个容器进行了优化,那样“某个容器不需要的功能完全不需要编译。”
现处于试验阶段,但最终必不可少
Cilium的一个潜在问题是,它需要版本非常新的Linux内核:4.8.0或更新版本,推荐4.9.17,另外需要LLVM 3.7.1或更新版本。话虽如此,Cilium的功能集合并不受制于任何特定的Linux版本DD比如说,“添加Linux内核不提供的额外统计信息”或者“额外的转发逻辑”。
Cilium是容器处理网络功能的一种试验性解决方案,不过对多种方法而言仍有很大的余地DD即使是Docker发展过程中的现阶段。Docker的最初网络方法很笨拙,很难管理,所以这家公司收购了SocketPlane,并将其类似OpenDaylight的网络结构(network fabric)添加到了Docker 1.9。该解决方案默认情况下随带Docker,但是从理论上来说,它可以换成可与Docker API兼容的其他网络产品。
Cilium的优点在于,它是按照与容器同样的思路构建的,使用了现有的Linux内核技术;Docker式样的容器实际上重新包装了长期以来存在于Linux内核中的功能。同样,Cilium可与存在了一段时间的现有技术兼容,有一系列明确的使用场景,跟容器本身一样接近内核中的容器层面。