k8s系列 k8s原理 之 简单对比Calico 和 Cilium
摘要: eBPF是Linux内核的高性能可编程技术,Cilium基于eBPF实现Kubernetes网络功能,替代传统iptables,提供更优性能(O(1)规则匹配)、动态更新及L7策略支持。与Calico对比,Cilium纯eBPF架构在延迟(30μs)、观测性(Hubble)和跨集群通信上表现更佳,而Calico适合BGP集成的传统网络。选择建议:高性能场景选Cilium,传统网络用Cali
·
1. eBPF 模式( Cilium的工作模式)啥意思?
官话:eBPF(extended Berkeley Packet Filter)是 Linux 内核中的一种高性能、可编程的网络和观测技术。它允许用户态程序在内核中动态注入代码,无需修改内核源码或加载内核模块,就能实现网络、安全、监控等功能。
大白话:内核的trace追踪技术,需要高版本4.9 最好5.4支持和安装插件
eBPF 在 Kubernetes 网络中的作用
- 替代
iptables
/ipvs
:
eBPF 可以直接在内核层处理Service 负载均衡、NetworkPolicy 等,性能更高(绕过传统iptables
的线性规则匹配)。 - 增强可观测性:
实时监控 Pod 流量、连接追踪、丢包分析等(如cilium monitor
)。 - 支持高级功能:
如基于 DNS 的 NetworkPolicy、跨集群通信等。
Cilium 是啥
Cilium 是一个基于 eBPF 的 Kubernetes CNI 插件,其核心特性包括:
- Service 负载均衡:
- 通过 eBPF 实现
ClusterIP
/NodePort
,性能接近ipvs
,但规则更新更快。
- 通过 eBPF 实现
- NetworkPolicy:
- 支持 L3/L4/L7(HTTP/gRPC)的精细策略,比 Calico 的
iptables
模式更高效。
- 支持 L3/L4/L7(HTTP/gRPC)的精细策略,比 Calico 的
- 透明加密:
- 通过 eBPF 实现 Pod 间通信的自动加密(WireGuard/IPSec)。
eBPF 模式对比 iptables
维度 | eBPF(Cilium) | iptables |
---|---|---|
性能 | 规则匹配 O(1)(哈希表) | O(n)(线性遍历) |
功能扩展 | 支持 L7 策略、加密、观测 | 仅限 L3/L4 |
动态更新 | 无需重启,原子性更新规则 | 全表替换(可能导致短暂中断) |
内核依赖 | 需 Linux 4.9+ | 所有版本兼容 |
2. Calico 和 Cilium 的区别
(1)核心架构对比
特性 | Calico | Cilium |
---|---|---|
数据平面 | 基于 iptables /eBPF (可选) |
纯 eBPF |
网络模型 | BGP 路由或 Overlay(VXLAN/IPIP) | Overlay(VXLAN/Geneve)或原生路由 |
策略能力 | L3/L4 NetworkPolicy | L3/L4/L7(HTTP/gRPC/Kafka) |
性能 | iptables 模式中等,eBPF 模式优 |
极优(eBPF 原生) |
适用场景 | 传统企业网络、混合云 | 云原生、高性能、微服务 |
(2)关键功能对比
① 网络连通性
- Calico:
- 默认使用 BGP 协议通告 Pod 路由,适合物理网络友好的环境。
- 可选
VXLAN/IPIP
封装,用于跨子网通信。
- Cilium:
- 默认
VXLAN
封装,支持 Cluster Mesh(跨集群 Pod 直连)。 - 可搭配 BGP(如 Cilium + BIRD)。
- 默认
② 安全策略
- Calico:
- 通过
iptables
或eBPF
实现 L3/L4 策略。 - 支持
NetworkPolicy
和GlobalNetworkPolicy
。
- 通过
- Cilium:
- 支持 L7 策略(如拦截 HTTP
GET /admin
请求)。 - 提供 身份感知(基于 Kubernetes Service Account)。
- 支持 L7 策略(如拦截 HTTP
③ 可观测性
- Calico:
- 依赖
Felix
组件日志和tigera
商业监控。
- 依赖
- Cilium:
- 内置 Hubble:实时流量拓扑、Prometheus 指标、TCP 丢包分析。
(3)性能对比(示例)
场景 | Calico (iptables) | Calico (eBPF) | Cilium (eBPF) |
---|---|---|---|
Service 延迟 | 150 μs | 50 μs | 30 μs |
规则更新速度 | 慢(全表替换) | 快 | 极快(原子更新) |
CPU 开销 | 高 | 中 | 低 |
3. 如何选择?
选 Calico 如果:
- 需要 BGP 与物理网络集成(如数据中心)。
- 已大量使用
iptables
规则,迁移成本高。 - 只需要基础的 L3/L4 策略。
选 Cilium 如果:
- 追求 高性能和低延迟(如金融交易系统)。
- 需要 L7 策略 或 跨集群通信。
- 重视 可观测性(如 Hubble 的拓扑图)。
共存方案
- 可以同时部署 Calico(负责网络) + Cilium(负责策略和观测),但需避免规则冲突。
4. 案例和命令熟悉:检查Cilium eBPF 模式下的网络问题
现象
Pod 无法访问 ClusterIP
,但直接访问 PodIP
正常。
排查步骤
- 检查 Cilium Agent 状态:
kubectl -n kube-system logs cilium-xxxx
- 验证 eBPF 程序是否加载:
sudo bpftool prog show | grep cilium
- 查看 Service 映射:
cilium service list
- 根本原因:
- eBPF 程序未正确加载(内核版本不兼容或权限不足)。
- 修复方法:
# 重启 Cilium Agent kubectl -n kube-system delete pod -l k8s-app=cilium
总结
维度 | Calico | Cilium |
---|---|---|
核心技术 | iptables/BGP | eBPF |
策略粒度 | L3/L4 | L3/L4/L7 |
性能 | 中等(eBPF 模式优化后) | 极优 |
适用场景 | 传统网络、混合云 | 云原生、高性能、微服务 |
*过渡时期建议(汇报官话)*:
- 测试环境部署 Cilium,体验 eBPF 的高级功能。
- 生产环境若需稳定性,可从 Calico + eBPF 模式 起步。
更多推荐
所有评论(0)