基于 BPF 技术的 Cilium 项目简介

什么是 Cilium

Cilium 是一个基于 BPF (Berkeley Packet Filter)的开源高性能容器网络方案,用于透明地保护在 Docker 和 Kubernetes 等容器平台部署的应用程序服务之间的网络连接。

Cilium 一年多前才推出,社区却相当活跃,成员有来自 Google、Facebook、Netflix、Red Hat 等公司的开 发人员(为什么是这几家大厂,我们后文详解),前几天还刚刚发布了 1.6 版本,据称可以 100%替换 kube-proxy。总之越来越多的人关注到这一项目。

为什么需要 Cilium

现代数据中心系统已变迁至“微服务”架构,大型应用程序被分成小的独立服务,这些服务使用 HTTP 等轻量级协议通过 API 相互通信。微服务往往是高度动态的:随着负载的变化,上层应用扩展或收缩伴 随底层容器的启动或销毁,这整个过程则是持续交付的一部分。

这一高度动态的变化,对于确保微服务之间的连通性提出了挑战。传统的 Linux 网络安全方法(如 iptables)通过 IP 地址和端口进行过滤,但容器不稳定的生命周期导致 IP 地址在微服务环境中难以跟 踪。同时,负载平衡策略和访问控制列表增长迅速,某些案例中甚至达到数十万条规则的规模。常用的 服务端口(如 HTTP 的 TCP 80)无法根据安全要求区分应用流量,因为这些端口用于跨服务的各种消息。

缺乏准确的可见性也是一个问题,因为作为传统系统识别标记的 IP 地址,在微服务架构中可能仅仅存在几秒钟。

Cilium 主要功能

Cilium 可以透明地插入安全可见性和策略强制性。相对于传统系统的 IP 地址,它基于 service/pod/container 标识,并在应用层(如 HTTP)过滤。

其重要功能特性包括:

  • 安全上,支持 L3/L4/L7 安全策略,这些策略按照使用方法又可以分为:
    • 基于应用协议(允许特定 HTTP 请求,或允许特定 service 生成或消费特定的 Kafka topic)
    • 基于身份(Identity)
    • 基于标签
    • 基于 CIDR
  • 网络上,支持 Layer 3 三层网络,如:
    • 覆盖网络(Overlay),包括 VXLAN 和 GENEVE
    • 原生路由网络(Native Routing),包括原生的 IPv6 网络和云服务商的高级网络路由
    • 负载均衡
    • 便利的监控和排错能力

从 BPF 到 Cilium

Cillium 基于 BPF,官网称其为”a new Linux kernel technology”,其实不然。

BPF 的设计,最早可以追溯到 1992 年的一篇论文:The BSD Packet Filter: A New Architecture for User-level Packet Capture。由于最初版本的 BPF 是实现于 BSD 系统的,于是在论文中作者称之为”BSD Packet Filter”。

知道 BPF 的人或许不多,但是基于 BPF 技术(libpcap)的两大抓包工具 tcpdump 和 Wireshark,知道的 人就很多了,这两个都是网络工程师和系统运维的必备工具。

BPF 是 Linux 内核中的一个高性能沙盒(sandbox)虚拟机。Linux 内核本质上是事件驱动的,BPF 提供了

在事件发生时运行指定的 BPF 程序的能力(可编程)。例如,我们可以在以下事件发生时运行我们的 BPF 程序:

  • 应用发起 read/write/connect 等系统调用
  • TCP 发生重传
  • 网络包达到网卡

“内核级”三个字往往还意味着高性能,官方性能测试比较如下图:

注:Cilium 实际使用的是 eBPF(extended BPF),它是早期的 BPF 一路技术演进而来。

除了上面说的 tcpdump 和 Wireshark,很多大公司也在各自场景中使用或融合了 BPF 技术:

BPF 牵涉到非常底层的技术,那么必须得了解所有这些细节才能使用 BPF 吗?有了 Cilium 后,我们就可 以大胆地说 No 了。这也是项目组创建 Cilium 的原因。

Cilium 项目非常年轻,大多数运维团队可能不会现阶段就将生产环境中的 kube-proxy 替换掉。但如果想 通过 Cilium 来研究 BPF 的技术和理念,还是非常不错的。哪一天几大容器平台直接把它给整合进去了也 说不定。就像因为性能问题,Kubernetes 的 Service 从 1.9 版本起将 iptables 换成了 LVS。

期待 Cilium 项目能越来越完美!

 1,531 total views,  1 views today