在Kubernetes网络世界中,Cilium(西力姆)凭借其基于eBPF技术的强大性能和功能而备受关注。特别是其Layer 7(应用层)功能,允许基于HTTP请求路径(GET /api/v1)或gRPC方法设置策略,在将Cilium塑造为“下一代CNI”方面发挥了重要作用。
然而,如果只知道“Cilium是L7 CNI”,那么您可能错过了最重要的核心。Cilium的真正力量源自何处?让我们一起深入探究其核心。🚀

🏛️ Cilium的核心数据路径:L3和L4才是真正的主角
开门见山地说,Cilium的核心数据路径直接在Linux内核中运行,其主要舞台是OSI模型的Layer 3(网络层)和Layer 4(传输层)。
1. Layer 3(网络层)🌐:所有通信的基础
- 作用:负责基于IP地址的路由,这是Pod网络最基本的部分。
- Cilium的作用:Cilium为每个Pod分配IP地址,并利用eBPF高效处理节点间的Pod通信路径。它在内核级别直接传输数据包,无需复杂的iptables规则或叠加网络的性能下降。这是Cilium引以为傲的高速的第一个秘诀。
2. Layer 4(传输层)🔌:服务和策略的核心
- 作用:基于TCP/UDP端口将数据准确地传输到正确的服务(进程)。
- Cilium的作用:Kubernetes的核心功能,即服务(Service)负载均衡和网络策略(Network Policy),正是在L4层面实现的。
- 替代kube-proxy:Cilium使用eBPF完全替代了kube-proxy的功能。它在内核中直接处理将发送到Service的ClusterIP和端口的请求转换为实际Pod的IP和端口并进行分发的过程,从而带来了巨大的性能提升。
- 核心网络策略:“Pod A只能通过80端口与Pod B通信”等基本网络策略都在L4层面处理。
通过这种方式,Cilium通过eBPF在L3/L4层面已经构建了一个快速高效的网络基础。大多数流量都在此阶段迅速处理。
✨ 那么,强大L7功能的真正面貌是什么?
“等等,那么Cilium引以为傲的L7策略是如何运作的呢?”
这是一个很好的问题。Cilium的L7功能确实强大,但这只是在L3/L4数据路径之上构建的“智能扩展功能”。因为在L7层面检查所有流量是低效的。
分步查看Cilium的工作方式会更清晰。
- 数据包到达:当数据包到达节点时,内核的eBPF程序会首先拦截它。
- L3/L4检查 (eBPF):eBPF会快速检查数据包的源/目的IP(L3)和端口(L4),以判断是否与网络策略匹配。
- 决策点 (Decision Point):
- 没有L7策略的情况 ✅:如果该流量没有适用的L7策略,eBPF会在内核层面直接进行ALLOW或DENY处理并结束。速度非常快!
- 有L7策略的情况 ➡️:如果存在L7策略,例如“只允许80端口传入流量中的GET /public”,eBPF会将该流量发送到用户空间(User Space)中运行的Envoy代理。
- L7检查 (Envoy Proxy):Envoy代理会详细分析接收到的流量的HTTP头部、路径、方法等,并根据策略决定是允许还是阻止。
也就是说,Cilium采用了一种高效的混合模型,只在必要时选择性地将流量发送到L7代理进行处理。它兼顾了L3/L4的速度和L7的深度!
📜 通过代码看L4和L7策略的关系
下面的CiliumNetworkPolicy示例可以清晰地说明这种结构。
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: api-access-policy
spec:
endpointSelector:
matchLabels:
app: my-api
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
# ⬇️ L4 Policy: 首先,允许进入80端口的TCP流量。
toPorts:
- ports:
- port: "80"
protocol: TCP
# ⬇️ L7 Policy: 在符合上述L4规则的流量中,额外应用HTTP规则。
rules:
http:
- method: "GET"
path: "/public/.*"
- method: "POST"
path: "/data"
如您所见,L7规则(rules.http)定义在L4规则(toPorts)内部。这直观地证明了L7策略是在L4这个更大的框架内运作的扩展功能。
❌ “Cilium是L7 CNI”这个误解为何危险
如果将Cilium纯粹理解为L7解决方案,可能会导致以下误解:
- 性能误解:可能会误以为所有流量都通过代理,从而担心性能下降。但实际上,大部分流量都在内核中快速处理。
- 策略设计的低效性:可能会为在L4层面可以简单阻止的流量创建不必要的复杂L7策略。最好从L4开始作为基础。
- 问题解决的困难:当出现通信问题时,可能只会查看L7代理(Envoy)。但很容易忽视问题根源可能在于L3/L4的基本路由或端口策略。
🎯 结论:看清全貌才能理解真相
Cilium的真正优势不仅仅在于其出色的L7功能。
一种混合架构,它以eBPF驱动的超高速L3/L4数据路径为基础,并根据需要智能地集成L7可见性和控制功能。
这正是理解Cilium的关键。它就像一座设计精良的建筑,在坚实的基础(L3/L4)之上构建了精巧的功能(L7)。现在,当您看待Cilium时,请务必记住其强大基础L3和L4的作用!✨
发表回复