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 插件,其核心特性包括:

  1. Service 负载均衡
    • 通过 eBPF 实现 ClusterIP/NodePort,性能接近 ipvs,但规则更新更快。
  2. NetworkPolicy
    • 支持 L3/L4/L7(HTTP/gRPC)的精细策略,比 Calico 的 iptables 模式更高效。
  3. 透明加密
    • 通过 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
    • 通过 iptableseBPF 实现 L3/L4 策略。
    • 支持 NetworkPolicyGlobalNetworkPolicy
  • Cilium
    • 支持 L7 策略(如拦截 HTTP GET /admin 请求)。
    • 提供 身份感知(基于 Kubernetes Service Account)。
③ 可观测性
  • 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 正常。

排查步骤
  1. 检查 Cilium Agent 状态
    kubectl -n kube-system logs cilium-xxxx
    
  2. 验证 eBPF 程序是否加载
    sudo bpftool prog show | grep cilium
    
  3. 查看 Service 映射
    cilium service list
    
  4. 根本原因
    • 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 模式 起步。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐