BumbleBee - 一个简化 eBPF 程序的创建和分发的工具包

Solo.io 是一家开发用于运行云系统、微服务、隔离容器和无服务器计算的产品的公司,该公司发布了 BumbleBee,这是一个开源工具包,旨在简化在内部特殊虚拟机中运行的 eBPF 程序的准备、分发和启动Linux 内核并允许处理网络操作、控制访问和监视系统。 该代码是用 Go 编写的,并根据 Apache 2.0 许可证分发。

BumbleBee 使得将 eBPF 程序打包为 OCI(开放容器计划)格式的容器镜像成为可能,该镜像可以在任何系统上运行,无需重新编译,也无需在用户空间使用其他组件。 与核心中的 eBPF 代码的交互,包括处理来自 eBPF 处理程序的数据,由 BumbleBee 接管,它自动以指标、直方图或日志的形式导出这些数据,例如可以使用卷曲实用程序。 所提出的方法允许开发人员专注于编写 eBPF 代码,而不会因组织与用户空间、汇编和加载到内核中的代码的交互而分心。

为了管理 eBPF 程序,提供了 Docker 风格的“bee”实用程序,使用它您可以立即从外部存储库下载感兴趣的 eBPF 处理程序并在本地系统上运行它。 该工具包允许您为选定主题的 eBPF 处理程序生成 C 代码框架(当前仅支持拦截对网络堆栈和文件系统的调用的网络和文件操作的处理程序)。 基于生成的框架,开发人员可以快速实现他感兴趣的功能。

与 BCC(BPF 编译器集合)不同,BumbleBee 不会完全重建每个版本的 Linux 内核的处理程序代码(BCC 在每次启动 eBPF 程序时使用 Clang 进行即时编译)。 为了解决可移植性问题,正在开发 CO-RE 和 libbpf 工具,允许您仅构建一次代码并使用特殊的通用加载器,使加载的程序适应当前内核和 BTF 类型格式。 BumbleBee 是 libbpf 的附加组件,提供了用于自动解释和显示位于标准 eBPF 映射结构 RingBuffer 和 HashMap 中的数据的附加类型。

要构建最终的 eBPF 程序并将其保存为 OCI 映像,只需运行命令“bee build file_with_code name:version”,然后运行命令“bee run name:version”。 默认情况下,从处理程序接收到的事件将输出到终端窗口,但如果需要,您可以通过使用curl或wget实用程序到绑定到处理程序的网络端口来获取数据。 处理程序可以通过 OCI 兼容的存储库进行分发,例如,要从 ghcr.io 存储库(GitHub 容器注册表)运行外部处理程序,您可以运行命令“bee run ghcr.io/solo-io/bumblebee/tcpconnect: $(蜜蜂版本)”。 为了在存储库中放置处理程序,建议使用“bee Push”命令,并绑定版本“bee tag”。

来源: opennet.ru

添加评论