cilium简介

什么是Cilium

cilium目标是为微服务环境提供网络、负载均衡、安全功能,主要定位是容器平台。Cilium的基础是一种称为BPF的新Linux内核技术,该技术可在Linux自身内部动态插入强大的安全可见性和控制逻辑。由于BPF在Linux内核中运行,因此可以应用和更新Cilium安全策略,而无需更改应用程序代码或容器配置。

为什么需要Cilium

现代数据中心应用程序已经转向面向服务的体系结构(SOA),通常称为“微服务”,其中大型应用程序被分成小型独立服务,这些服务使用HTTP等轻量级协议通过API相互通信。微服务应用程序往往是高度动态的,作为持续交付的一部分,部署的滚动更新期间,单个容器频繁启动或销毁,应用程序扩容/缩容以适应负载变化。

由于微服务高度可变的特性,给确保微服务之间的连接安全提出了挑战。传统的Linux网络安全方法(例如iptables)过滤IP地址和TCP/UDP端口,但IP地址经常在动态微服务环境中流失。容器的高度可变的生命周期导致这些方法难以与应用程序并排扩展,因为负载均衡表和访问控制列表要不断更新,规模可能增长至包含数十万条规则。出于安全目的,协议端口(例如,用于HTTP流量的TCP端口80)不能再用于区分应用流量,因为该端口用于跨服务的各种消息。

另一个挑战是提供准确的可视化,因为传统系统使用IP地址作为主要识别工具,其在微服务架构中的寿命可能才仅仅几秒钟,被大大缩短。利用Linux BPF,Cilium保留了透明地插入安全可视性+强制执行的能力,但这种方式基于服务/pod/容器标识(与传统系统中的IP地址识别相反),并且可以根据应用层进行过滤 (例如HTTP)。因此,通过将安全性与寻址分离,Cilium不仅可以在高度动态的环境中应用安全策略,而且除了提供传统的第3层和第4层分割之外,还可以通过在HTTP层运行来提供更强的安全隔离。

BPF的使用使得Cilium能够以高度可扩展的方式实现以上功能,即使对于大规模环境也不例外。

Cilium应用场景

  • 容器网络模型(替代flannel、calico等)
    • 提供CNI、CNM插件
    • 支持IPv4、IPv6
    • 支持直接路由或者overlay等模式
    • 支持Network Policy
  • 服务的负载均衡
    • Kubernetes服务实现(替代kube-proxy)
    • API驱动:对更超前的使用场景,扩展式API可以用来直接配置负载均衡模块。
  • 微服务安全
    • 基于身份:Cilium将负载和身份信息在每个包内都打包在一起(而不是依靠源IP地址),提供高可扩展安全性。这一设计使得身份可以被嵌入任何基于IP的协议,而且与未来的SPIFFEE或者Kubernetes的Container Identity Working Group兼容。
    • 基于IP/CIDR:如果基于身份的方式不适用,那么可以采用基于IP/CIDR安全方式控制安全访问。Cilium建议在安全策略中尽量采用抽象方式,避免写入具体IP地址。其中一个实例就是定义基于Kubernetes服务名的策略。
    • API自感知安全机制:HTTP/REST、gRPC和Kafka广泛使用暴露出基于IP和端口的服务,其安全机制明显不足。内置自感知API和数据存储相关协议在相关粒度上允许强制使用最小特权级别安全。
  • 服务网格增强
    • 高性能sidecar