CNI 不是装完就完事:Calico、Cilium、Weave,选错一个,集群网络天天加班
引子:
说个真实到扎心的场景。
K8s 集群搭好了,业务也跑起来了,某天产品经理一句话:
“我们想加点网络隔离,不同服务之间最好能细一点。”
你回头一看集群:
- CNI:随手装的
- NetworkPolicy:写了但不生效
- 网络延迟:偶尔抖
- 排障难度:地狱级
这时候你才意识到一件事:
CNI 插件的选型,决定了你未来一年网络相关工单的数量。
今天我们就不讲“官方对比表”,不背参数,我只聊一件事:
CNI 插件到底是如何影响网络策略能力和真实性能的?
重点聊三位“老熟人”:
- Calico
- Cilium
- Weave
一、先把底层逻辑说清楚:CNI 到底在管什么?
很多人对 CNI 的理解还停留在:
“哦,就是让 Pod 能联网。”
说实话,这理解只对了 30%。
一个成熟 CNI 插件,至少影响三件大事:
- 数据怎么走?(路由 / Overlay / eBPF)
- 策略谁来管?(NetworkPolicy 是否真生效)
- 包走得快不快?(延迟、吞吐、CPU 消耗)
你选的不是“插件”,
你选的是 网络实现模型 + 安全模型 + 运维复杂度。
二、Calico:运维界的“老实人”,稳,但不浪
先说 Calico,一句话总结:
Calico 是最像“正经网络工程”的 CNI。
1️⃣ 网络模型:简单、直给
Calico 默认走的是 三层路由(BGP / IP-in-IP / VXLAN),核心思想一句话:
能不用 Overlay,就不用。
优点非常明显:
- 路径清晰
- 延迟低
- 排障像在排传统网络
很多运维喜欢 Calico,不是因为它多牛,而是:
tcpdump 一抓,就知道包去哪了。
2️⃣ 网络策略:K8s 原生友好
Calico 对 NetworkPolicy 的支持,属于教科书级别。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-api
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: api
👉 生效明确、行为可预测。
但问题也在这:
- 只能到 L3/L4
- 想搞 L7?基本没戏
3️⃣ 性能与代价
- 性能:稳
- CPU 消耗:可控
- 高级能力:有限
📌 我的真实感受:
Calico 很少“惊艳”,但也很少“翻车”。
三、Cilium:性能怪兽,但你得配得上它
如果 Calico 是老实人,那 Cilium 就是卷王。
一句话评价:
Cilium 把网络这件事,直接塞进了内核。
1️⃣ eBPF:这是分水岭
Cilium 最大的不同点:
不用 iptables,用 eBPF。
这意味着什么?
- 包在内核态就被处理
- 不需要一堆规则链
- 性能随规模增长更稳定
2️⃣ 网络策略:从“能用”到“能说清楚”
Cilium 的 NetworkPolicy,可以直接写到 L7:
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
spec:
endpointSelector:
matchLabels:
app: backend
ingress:
- fromEndpoints:
- matchLabels:
app: api
toPorts:
- ports:
- port: "80"
protocol: TCP
rules:
http:
- method: "GET"
path: "/health"
你注意到了吗?
👉 方法、路径,全都能控。
这在微服务里,杀伤力非常大。
3️⃣ 性能真的好吗?
实话说一句:
- 大规模集群
- 高频东西向流量
- Service Mesh 前置或替代
👉 Cilium 确实猛。
但代价也很真实:
- 学习成本高
- 内核版本有要求
- 排障要懂 eBPF
📌 我踩过的坑:
Cilium 不适合“照着文档装完就跑”的团队,
它更适合 有内核、网络、平台能力的团队。
四、Weave:简单是真简单,但时代变了
Weave 现在出镜率已经不高了,但不少老集群还在用。
一句话总结:
Weave 是“让你快点跑起来”的 CNI。
1️⃣ 网络模型:纯 Overlay
- VXLAN
- 自动建网
- 零配置起步
适合什么?
测试环境 / Demo / 小集群
2️⃣ 网络策略:存在感不强
Weave 对 NetworkPolicy 的支持,说实话:
- 能用
- 但不优雅
- 大规模下不太稳
3️⃣ 性能与现实
Overlay + 用户态处理,意味着:
- 延迟更高
- CPU 消耗更明显
- 排障路径更长
📌 我的态度很明确:
如果你现在还在纠结 Weave,
那你更该考虑“要不要换 CNI”本身。
五、真正影响你选型的,其实是这三个问题
别看厂商对比表,看这三个问题就够了。
问题一:你要的“网络策略”,到底有多细?
- 只要 Pod 级隔离 👉 Calico
- 要到 API / URL 👉 Cilium
- 只是跑起来 👉 Weave
问题二:你更怕哪种“痛”?
- 怕排障难 👉 Calico
- 怕性能瓶颈 👉 Cilium
- 怕配置复杂 👉 Weave(但后期会更痛)
问题三:你的团队,扛得住复杂度吗?
Cilium 的上限很高,但下限也很高。
六、我的个人选型建议(掏心窝版)
不是标准答案,是“干过活”的答案:
中小规模集群 / 运维主导
👉 Calico微服务重、流量大、安全细、平台化强
👉 Cilium临时环境 / 教学 / 快速验证
👉 Weave(但别长期)
最怕的一种情况是:
业务复杂 + 团队薄弱 + 选了最复杂的 CNI
那不是架构升级,是主动加班。
结尾:
我想留你一句我自己踩坑后才明白的话:
CNI 插件不是“装完就不动”的基础设施,而是长期陪你打仗的网络底盘。
你今天为了省事随便选的那一个,
很可能就是明年凌晨三点你还在排查丢包的原因。
选 CNI,
不是选功能,
是选 未来你熬夜的方式。