Cilium:用 eBPF 重写 Kubernetes 网络层

Cilium 在 GitHub 上已经拿到 24.6K Star 了。

这是一个基于 eBPF 的 Kubernetes 网络方案,干的事情覆盖了网络、安全、可观测性三层。它能完全替代 kube-proxy,能做 L3 到 L7 的网络策略,还能跨集群组网。

正文顶部截图

1、 eBPF 是什么

eBPF 是 Linux 内核里的一项技术,允许在内核的网络 IO、应用 socket、tracepoint 等位置动态插入字节码。不用改内核源码,不用重启,就能在数据路径上执行自定义逻辑。

Cilium 把 eBPF 当成整个数据面的底座。网络转发、负载均衡、策略执行、可观测性采集,全部跑在 eBPF 上。好处是绕过了 iptables 的线性规则匹配,用哈希表做查找,规模上去以后性能不会塌。

2、 它解决了什么问题

传统 Kubernetes 网络存在几个痛点。

kube-proxy 基于 iptables 做 Service 转发,Service 数量一多,规则链就膨胀,转发延迟跟着涨。Cilium 用 eBPF 的哈希表替掉了这套机制,东西向和南北向流量都能做负载均衡,支持 DSR(直接服务器返回)和 Maglev 一致性哈希。

网络策略方面,传统方案靠 IP 地址做白名单。Pod 漂一次 IP 就变了,策略就废了。Cilium 给每个 Pod 分配安全身份标识,策略跟着身份走,不跟 IP 走。而且能做到 L7 层面的过滤,比如只允许 GET 请求访问 /public 路径。

README区域截图

3、 核心能力

组网模式

三种可选:Overlay(VXLAN/Geneve 封装)、原生路由(走宿主机路由表)、BGP 路由通告。Overlay 对底层网络没要求,能通就行;原生路由性能更好,但需要底层网络能路由 Pod IP。

Cluster Mesh

跨集群组网。多个 Kubernetes 集群之间做服务发现和策略统一,适合多云或者混合云场景。一个集群挂了,流量自动切到另一个集群的后端。

Service Mesh

不用 Sidecar 代理,直接在内核层面做 mTLS 加密和 L7 策略。跟 Kubernetes Gateway API 集成,用 CRD 声明路由规则。

可观测性

Hubble 是内置的观测平台,能画实时服务拓扑图,能看到每条流的 identity、label、DNS 信息。丢包原因、策略违规都有记录,接 Prometheus 和 Grafana 直接出面板。

4、 怎么装

# 用 Helm 安装
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --namespace kube-system

装完用 CLI 检查状态:

cilium status
cilium connectivity test

镜像支持 AMD64 和 AArch64 两个架构,从 v1.13.0 开始每个版本都带 SBOM(软件物料清单)。

5、 谁适合用

  • 运行 Kubernetes 集群、需要替代 kube-proxy 提升 Service 转发性能的团队

  • 有多云或混合云部署、需要跨集群统一网络和安全策略的场景

  • 对网络可观测性有要求、需要实时看到服务间通信拓扑的运维人员

  • 在做服务网格、但不想引入 Sidecar 代理额外开销的架构

  • 对网络可观测性有要求、需要实时看到服务间通信拓扑的运维人员

  • 在做服务网格、但不想引入 Sidecar 代理额外开销的架构

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐