用 Rust 编写 eBPF/XDP 负载均衡器

22-11-12 banq

在当今的云生态系统中,对应用程序及其网络流量的高性能和高性能可观察性、安全性和网络功能的需求与以往一样高。
操作系统在过去一直是动态添加功能的一个非常具有挑战性的地方,通常需要开发和管理非常繁琐的内核模块,近年来eBPF已成为Linux 内核中的一项新兴技术,正在改变这一切。

什么是 eBPF?
eBPF 是一种在运行时将程序动态加载到内核中的简单有效的方法,其安全性和性能由内核本身使用即时 (JIT) 编译器和验证过程提供。使用 eBPF 可以创建多种不同类型的程序,但出于本示例的目的,我们将专注于创建可以读取和修改网络数据包的XDP程序。
我们的目标是构建一个小程序,通过端口跨多个后端服务器对入口UDP流量进行负载平衡。完成本练习后,您应该对 XDP 程序的工作方式有了更好的理解,并能够开始您的eBPF 社区之旅。

eBPF Rust UDP LoadBalancer 演示

这是使用aya框架在Rust中创建UDP负载均衡器作为eXpress 数据路径 (XDP)类型的eBPF程序的示例。

本示例假设您对 Linux、网络和 Rust 编程有相当深入的了解。
这个演示是在使用带有内核版本的Arch LinuxUbuntu x86_64的机器上构建和测试的。预计它将适用于大多数现代 Linux 发行版。

在撰写本文时,Aya 还不是一个成熟的 eBPF 开发生态系统。此演示缺少生产 XDP 程序所需的一些内容,并且 Aya 本身在从现在到它的第一个v1版本之间的时间里会发生重大变化。这仅用于演示和学习目的,请勿在生产中使用。


需完整源代码和进一步阅读,请查看https://github.com/shaneutt/ebpf-rust-udp-loadbalancer-demo

详细步骤点击标题