当前位置: 首页 > news >正文

Cilium/eBPF:下一代网络可观测性与安全

文章目录

    • 一、iptables 在大规模集群里的天花板
    • 二、eBPF 是什么:内核里的沙箱
      • 2.1 从 BPF 到 eBPF
      • 2.2 验证器:沙箱的核心
    • 三、Cilium 数据面:怎么用 eBPF 替代 kube-proxy
      • 3.1 三个挂载点
      • 3.2 kube-proxy 的 iptables vs Cilium 的 eBPF
    • 四、bpftrace:自定义网络诊断工具
      • 4.1 为什么 bpftrace 在 CSDN 是空白
      • 4.2 两个完整可运行的单行命令
    • 五、Hubble:服务拓扑与流量可视化的完整实现
      • 5.1 为什么需要 Cilium 专用可观测性
      • 5.2 Hubble 的数据来源
      • 5.3 诊断示例:某服务间调用超时
    • 六、NetworkPolicy:从标签到身份
      • 6.1 传统 iptables 方案的问题
      • 6.2 CiliumNetworkPolicy 示例
    • 七、性能对比:iptables 与 eBPF 的量级差距
    • 八、小结:谁应该考虑 Cilium

核心问题:eBPF 怎么在不修改代码的前提下追踪网络流量?Cilium 凭什么能替代 kube-proxy?


一、iptables 在大规模集群里的天花板

Kubernetes 默认的 Service 负载均衡依赖 kube-proxy 在每个节点上注入 iptables 规则。节点少的时候没问题——5000 个 Pod 的集群,iptables 规则数量轻松突破 10 万条,每次 Service 变更都要全量扫描所有规则,端到端延迟从 0.5ms 跳到 15ms。

这是 iptables 的设计代价:它是通用防火墙,不是高性能负载均衡器。规则越多,查找越慢,没有例外。

Cilium 的答案是:不走 iptables,在内核里直接用 eBPF 程序处理数据包转发。把"规则匹配"变成"哈希查找",把 O(n) 变成 O(1)。


二、eBPF 是什么:内核里的沙箱

2.1 从 BPF 到 eBPF

BPF(Berkeley Packet Filter)最初是 1992 年的一篇论文,目的是让数据包过滤不需要在内核和用户态之间来回拷贝数据。传统方案:内核把包拷给用户态,用户态过滤完再决定要不要。

BPF 的创新:在内核里运行用户提供的过滤程序,只把匹配结果返回用户态。数据包本身不离开内核。

eBPF(extended BPF,Linux 3.15+)在 BPF 基础上大幅扩展:

维度经典 BPFeBPF
指令限制512 条无硬限制,受验证器限制
数据结构只读寄存器64-bit 通用寄存器 + 栈空间
可访问的数据数据包本身所有内核数据结构(sk_buff、socket、task_struct 等)
Map 支持哈希表、数组、堆栈、环形缓冲区……
尾调用eBPF 程序之间互相跳转
JIT 编译即时编译成机器码,接近原生速度

2.2 验证器:沙箱的核心

eBPF 程序不能直接跑在内核里——先经过验证器(Verifier),检查三件事:

  1. 不崩溃:程序不能访问越界内存,不能有未初始化变量
  2. 有穷 loops:必须证明所有循环有限次迭代,不能写出死循环
  3. 不伤害内核:不能做拒绝服务攻击,不能修改内核只读区域

验证通过

用户态:编写 eBPF 程序(clang 编译)

clang → eBPF 字节码

内核验证器
1. 模拟执行,检查所有路径
2. 拒绝无限循环/越界访问
3. 检查特权级别

JIT 编译
字节码 → 机器码

http://www.jsqmd.com/news/665454/

相关文章:

  • 3步解锁VMware隐藏功能:在普通PC上运行macOS的终极指南
  • C# 桌面时钟(透明窗体、定时提醒、开机启动)
  • Lattice CrossLinkNx实战:如何将设计固化到SPI Flash(含JTAG2SPI烧录避坑指南)
  • Git 2.27+ 新警告别慌!3分钟搞懂 pull.rebase 和 pull.ff 到底怎么选(附保姆级配置命令)
  • 别再只会用action了!手把手教你用el-upload的http-request实现自定义文件上传(附完整前后端代码)
  • 有实力的冷库公司怎么选,探讨湖南雪源制冷冷库公司口碑与价格 - 工业推荐榜
  • 免费在线SVG路径编辑器终极指南:零基础快速上手矢量图形编辑
  • MQTTnet 5.0实战:如何用最新特性打造物联网消息系统(附.NET 6+代码示例)
  • Bilibili-Evolved:个性化你的B站体验,解锁高效浏览新姿势
  • 米哈游游戏启动器终极指南:如何用Starward一站式管理你的游戏世界
  • LabVIEW比例流量阀自动测试系统开发
  • 从嵌入式到FPGA:一个RISC-V爱好者的Verilog入门避坑指南
  • 【C++】中INI配置文件读取技术详解
  • Windows 11 高效部署 PyTorch 1.7.1:从 CUDA 环境配置到安装验证全攻略
  • 探讨有实力的钢格板加工厂,哪家专业又靠谱 - 工业品牌热点
  • B站评论区成分检测器:3秒读懂评论者,智能标注让互动更有价值
  • Unity中MoveTowards()的隐藏玩法:结合协程控制UI渐变、物体平滑移动的完整配置流程
  • 抖音内容高效采集:从单视频到批量下载的全流程技术指南
  • Windows驱动管理专业指南:DriverStore Explorer实用教程
  • 2024年最新IntelliJ IDEA插件安装避坑指南:从MybatisCodeHelper到Rainbow Brackets
  • 3分钟快速上手:用Mem Reduct彻底解决Windows内存卡顿问题
  • AtCoder Beginner Contest 454 D 题解
  • 从‘一刀切’到精细化:实战firewall-cmd管理开发、测试、生产环境的SSH访问策略
  • 泉盛UV-K5/K6终极刷机指南:LOSEHU固件功能全面解锁教程
  • 番茄小说下载器:打造个人离线小说图书馆的终极解决方案
  • 手把手教程:5分钟用ollama部署Yi-Coder-1.5B代码助手
  • APP广告网站端口是非标准的
  • 专业指南:如何为Windows 11 24H2 LTSC系统完整恢复微软商店功能
  • 早晚通勤没空做怎么瘦?2026上班族营养减脂早晚代餐红黑榜,精准控卡护代谢 - GrowthUME
  • PowerPaint-V1功能体验:极速图像消除与智能填充,真正语义级的图像理解