@Rays
2018-03-07T09:18:49.000000Z
字数 2745
阅读 1994
架构&设计
摘要: Cilium是一种开源软件,它使用Docker和Kubernetes等Linux容器管理平台,实现应用服务间网络连接性的透明安全部署。Cilium 1.0.0-rc4于近期发布,其中包括:将CNCF力推的Envoy配置为默认的HTTP/gRPC代理、给出了一种针对连接性和其它一些错误的基本健康情况总览、改进了可扩展的键值存储交互层。
作者: Daniel Bryant
正文:
Cilium是一种开源软件,它使用Docker和Kubernetes等Linux容器管理平台,实现应用服务间网络连接性的透明安全部署。Cilium 1.0.0-rc4于近期发布,其中包括:将CNCF(云原生计算基金会,Cloud Native Computing Foundation)力推的Envoy配置为默认的HTTP/gRPC代理、给出了一种针对连接性和其它一些错误的基本健康情况总览、改进了可扩展的键值存储交互层。
微服务应用呈现出高度动态的特点,这对于微服务间的安全连接性不仅是一个挑战,而且也是一个机会。当前,解决该问题的方法结合使用了CNCF力推的CNI(容器网络接口,Container Network Interface),以及Istio和Conduit等日益广为使用的“服务网格(Service Mesh)”技术。Cilium文档中指出,传统的Linux网络安全方法(例如iptables)是根据IP地址和TCP/UDP端口做过滤。但是容器和IP地址的生命周期存在高度不稳定的问题,导致这些网络安全方法难以和应用一起扩展,因为必须要不断地更新大量的负载平衡表和访问控制列表。
Cilium尝试通过使用一种称为“Berkeley Packet Filter”(BPF)的相对较新技术解决这一问题,并实现扩展性。BPF是一种Linux内核字节码解释器,最初用于实现tcpdump和Socker过滤器那样的网络包过滤。通过使用哈希表、数组等一些额外的数据结构扩展,及一些额外的操作,BPF现已支持网络包的修改(packet mangling)、转发和封装等操作。此外,BPF还提供了一个驻留内核的验证器以确保BPF程序安全运行、一个将字节码转换为特定于CPU架构的指令的JIT编译器以保证原生的执行效率。性能大师Brendan Gregg对“Linux BPF超能力”做了一些了深入的讲解和文章,可供对探索BPF更多细节的读者参考。
Cilium部署中包括如下组件,这些组件运行在Linux容器集群中的每个容器节点上。
图1 Cilium的架构(图片来自于Cilium概念文档)
Cilium可为REST/HTTP、gRPC和Kafka等现代应用协议提供安全功能。传统的防火墙通常操作于网络第三层和第四层上,运行于特定端口上的协议或者是完全受信的,或者被完全拒绝。Cilium提供了对单个应用协议请求的过滤功能,例如:
在Cilium文档的“Layer 7 Policy”一节中给出了最新支持协议的列表,并提供了如何使用的例子。因为BPF运行在Linux内核中,(理论上)可在不对应用代码或容器配置做任何更改的情况下,应用和更新Cilium的安全策略。
Cilium提供了全面的网络安全实现方法,其核心理念围绕着指定一组共享同样安全策略的应用容器安全身份而构建。进而,安全身份会关联到应用容器所发出的所有网络包,并在接收节点处对身份进行验证。安全身份管理的执行使用了一种键值存储。
Cilium还提供了其它很多网络特性,包括:具备跨多个集群连接所有应用容器能力的基本第三层扁平网络(这意味着无需任何主机间协调就可分配每个主机的IP)、用于应用容器间流量和外部服务的分布式负载均衡(负载均衡使用允许“几乎可无限扩展”的高效哈希表通过BPF实现)、具有元数据的事件监测等深入可观察性、政策决策追踪,以及通过Prometheus导出各种度量等。
在近期召开的KubeCon北美大会上,“服务网格”得到了广泛的讨论(尤其是围绕着Istio控制面板)。Cilium社区相应编写了一份指南,阐明了Cilium技术及BPF的总体前景将如何辅助Istio实现。Istio本身使用了Envoy实现自身的数据面板,并且代理以附加(sidecar)配置形式运行在应用Pod内。Cilium在应用Pod外运行Envoy,并为单个Pod配置独立的监听器。Cilium建议:
模型中没有所谓的对错,各自在一系列方面上分别具有一些优点和不足,例如运维复杂性、安全、资源核算、占用空间等。Cilium未来可能支持运行两个模型中的任一种。
Cilium项目网站上提供了更多信息,还可以通过Cilium Slack提问。
查看英文原文: Cilium 1.0.0-rc4 Released: Transparently Secure Container Network Connectivity Utilising Linux BPF