作者 | 刘勤龙、黄扬
2019 年网易轻舟使用 sockmap+sk redirect 来优化轻舟 Service Mesh 的延迟,2020 年开始,我们逐步对 eBPF Service、Cilium NetworkPolicy,Cilium 容器网络进行实践,到 2021 年中旬,网易轻舟对外部客户提供了 Cilium 整体解决方案。
本文会深入介绍 Cilium,并澄清一些认知误区,然后给出网易数帆轻舟云原生团队是如何使用 Cilium 的。目前国内这方面深入解析材料较少,如果您也正在探究,希望这篇文章能给您带来帮助。
1 eBPF 容器网络探索背景
目前容器网络方案仍然呈现着百花齐放的态势,这主要是由于不同的 CNI 各有优势。开源的原生 CNI 具备较广的使用场景,即插即用。其中支持 overlay 方式的几个方案(openshift-sdn、flannel-vxlan、calico-ipip),能更好地适配 L2/L3 的网络背景,而 underlay 方式的几个方案(calico-bgp、kube-router、flannel-hostgw),则在性能上更趋近于物理网络,在小包场景中性能明显好过 overlay 类型方案。此外,许多主流云厂商基于还会自建 VPC 能力,实现 VPC-based CNI ,这类 CNI 与集群交付场景深度耦合,但也赋予了容器网络 VPC 的属性,具备更强的安全特性。
此外,业界还有大量针对 CNI 或四层负载均衡的优化措施,例如:
-
优化封装协议,基于 vxlan 有更好的兼容性,基于 ipip 协议则能提升一定的带宽能力(部分云厂商如 AWS 并不支持 ipip 协议的包)
-
使用 IPVS 替换 kube-proxy 解决大规模环境里,Service 带宽降低和数据路径下发时间变长
-
使用 eBPF 技术来加速 IPVS,进一步降低延迟,提升 Service 数据路径性能
-
利用 multus 组合 CNI 多网络平面,并利用 SR-IOV 技术做定向硬件加速
-
虚拟网卡时使用 ipvlan 替代 vethpair,提升性能
总的来说,通过方案整合和调优的方式进一步满足了业务发展的需求,但是当前流行的 CNI 支持场景要么是不够通用,要么在高 IO 业务下存在性能问题,要么不具备安全能力,要么因 Kubernetes service 性能问题,集群规模上不去。因此我们想使用 eBPF 技术实现一套无硬件依赖的高性能、高兼容性的容器网络解决方案,这个方案解决的问题如下:
-
解决 kube-proxy 性能问题
-
优化数据路径降低业务端到端的延时解决高 IO 业务的性能瓶颈
-
降低 Service Mesh 路径延迟
-
支持链路加密和高性能安全策略
-
支持无成本集成到主流的容器网络方案
基于 eBPF 技术做的比较好的是 Cilium,所以 2019 年末开始,我们就开始了相关的探索。
2 Cilium 功能解析
Cilium 功能解析,从功能列表,亮点功能,功能限制,三个角度进行阐述。
(1)功能列表
(2)亮点功能
Cilium 支持的功能更像一个容器网络功能的复合体,其具有 Underlay 路由模式、Overlay 模式,也具有链路加密能力,此外其独特能力如下:
-
带宽管理
-
集群联邦
-
IPVLAN 模式
-
七层安全策略
-
DSR 模式保留源地址,节省带宽,避免 SNAT 端口耗尽问题
-
Kubernetes Service 性能调优,支持 Maglev 算法
-
XDP 性能调优,高性能南北向 Service
-
Local Redirect Policy
-
流量可见性,细粒度流量控制,用于审计
-
高性能更能适配高带宽的网卡(eg: 50G、100G)
从功能范畴看,其亮点功能有安全、性能、功能三个方面,其有一部分亮点能力是 Cilium 社区对容器网络最佳实践的功能支持,有一部分能力是来源于 eBPF 能力的创新,所以 Cilium 是一个复合品;社区思路可以一句话概括为 “在容器网络领域,大家有的功能我也有,而且我性能更好,此外我借助 eBPF 能力从内核侧创新了大部分功能”。
(3)功能限制
Cilium 带来的技术红利让不少国内外公司去实践,国内公司来说,除网易轻舟外,我们看到腾讯、阿里、爱奇艺、携程等同行在生产环境中落地 Cilium。虽然 Cilium 通过 eBPF 给容器网络提供了创新机会,但是也带来了两点问题,这两点问题让绝大部分用户持观望态度。
问题 1: eBPF 相比 iptables 调试难度更大,技术要求较高
iptables 存在内核已经存在几十年了,相关技术栈的开发者多,已经被广泛的接受,而 2014 年 eBPF 概念才被提出