写点什么

eBPF 简介

作者:申屠鹏会
  • 2022 年 5 月 31 日
  • 本文字数:1704 字

    阅读完需:约 6 分钟

eBPF 是一项革命性的技术,起源于 Linux 内核,可以在操作系统内核中运行沙盒程序。**它被用来安全和有效地拓展内核功能,而无需修改内核源码或加载内核模块**

长久以来,由于内核本身具有监控和控制整个计算机对的特权,因此操作系统层面一直是实现可观测性、安全性、网络治理功能的理想场所。但是由于对内核的稳定性和安全性的要求,很难对其进行改进,因此与操作系统其它部分的功能相比,内核的创新和演进一直是比较慢的。

eBPF 的出现则是改变了这一切。通过允许在操作系统内运行沙盒程序,应用开发人员可以运行 eBPF 程序,在运行时向操作系统添加额外的功能。操作系统则会保障其安全和执行效率,就像在即时编译(JIT)编译器和验证引擎的帮助下进行本地编译一样。这项技术的出现带来了一系列基于 eBPF 的项目,包括下一代网络、可观测性、安全功能在内的多种领域。

今天,eBPF 被广泛用于各个领域:在现代数据中心和云原生环境中提供高性能的网络和负载均衡、以资源低开销提取细粒度的安全可观测数据、帮助开发人员跟踪应用程序、为性能故障排查提供支撑等。eBPF 释放的创新才刚刚开始。

## 安全

建立在看到和理解所有系统调用的基础上,并与所有网络操作的数据包和套接字级别的视图相结合,可以为系统安全提供革命性的新方法。虽然系统调用过滤、网络级过滤和进程上下文跟踪等方面通常由完全独立的系统处理,但 eBPF 允许将所有方面的可见性和控制结合起来,以更好的控制水平创建运行于更多上下文的安全系统。

## 追踪和分析

将 eBPF 程序附加到跟踪点以及内核和用户应用程序探测点的能力允许对应用程序和系统本身的运行时行为有前所未有的可见性。通过给应用程序和系统方面的内省能力,这两种观点可以结合起来,允许强大和独特的洞察力来解决系统的性能问题。先进的统计数据结构允许以有效的方式提取有意义的可见性数据,而不需要像类似的系统那样输出大量的采样数据。

## 网络

可编程性和效率的结合使 eBPF 成为网络解决方案中所有包处理要求的自然选择。eBPF 的可编程性使其能够添加额外的协议分析器,并轻松地编程任何转发逻辑,以满足不断变化的需求,而无需离开 Linux 内核的数据包处理环境。JIT 编译器提供的效率使执行性能接近于原生编译的内核代码。

## 可观测性与监控

eBPF 不依赖于操作系统暴露的静态计数器和仪表,而是实现了自定义指标的收集和内核内聚合,并基于广泛的可能来源生成可见性事件。这扩展了可以实现的可见性深度,并通过只收集所需的可见性数据和在事件源头生成直方图和类似的数据结构,而不是依赖样本的输出,大大降低了整个系统的开销。

## 基于 eBPF 的应用

### bcc

BCC 是一个建立在 eBPF 基础上的高效内核跟踪和操作程序的工具包,它包括几个有用的命令行工具和例子。BCC 简化了用 C 语言编写 eBPF 程序的过程,包括一个围绕 LLVM 的封装器,以及 Python 和 Lua 的前端程序。它还提供了一个高层次的库,可以直接集成到应用程序中。

### bpftrace

bpftrace 是一个用于 Linux eBPF 的高级跟踪语言。bpftrace 使用 LLVM 作为后端,将脚本编译成 eBPF 字节码,并利用 BCC 作为与 Linux eBPF 子系统以及现有的 Linux 追踪能力和附件点进行交互的库。

### cilium

Cilium 是一个开源项目,提供由 eBPF 驱动的网络、安全和可观察性。它是专门为 Kubernetes 世界带来 eBPF 的优势而设计的,以解决容器工作负载的新的可扩展性、安全性和可视性要求。

### Falco

Falco 是一个行为活动监视器,旨在检测应用程序中的异常活动。Falco 在 eBPF 的帮助下对 Linux 内核层的系统进行审计。它用其他输入流(如容器运行时指标和 Kubernetes 指标)来丰富收集的数据,并允许持续监控和检测容器、应用程序、主机和网络活动。

### Katran

Katran 是一个 C++库和 eBPF 程序,用于建立一个高性能的第四层负载平衡转发平面。Katran 利用 Linux 内核中的 XDP 基础设施,为快速数据包处理提供内核内设施。它的性能与网卡接收队列的数量呈线性扩展,它使用 RSS 友好封装转发到 L7 负载均衡器。

## eBPF 库

eBPF 被设计成一个纯 Go 库,提供加载、编译和调试 eBPF 程序的工具。它具有最小的外部依赖性,并打算在长期运行的进程中使用。

**libbpfgo**是一个围绕 libbpf 的 Go 封装器。它支持 BPF CO-RE,其目标是成为 libbpf APIs 的完整实现。它使用 CGo 来调用 libbpf 的链接版本。


发布于: 刚刚阅读数: 3
用户头像

申屠鹏会

关注

enjoy~ 2018.11.08 加入

https://xabc.site

评论

发布
暂无评论
eBPF 简介_ebpf_申屠鹏会_InfoQ写作社区