【发布时间】:2018-12-20 18:31:45
【问题描述】:
我正在尝试实现一项功能,根据 HTTP 请求的路径,我可以将请求转发到不同的端口。
例如如果请求GET /foo,我想转发到81端口,如果是/bar我想转发到82端口。如果是别的,我想继续传入时将其转发到端口 80。
有这样的 eBPF 程序示例吗?
我试图弄清楚我将如何确定 HTTP 请求是什么,因为 eBPF 将应用于数据包级别
【问题讨论】:
我正在尝试实现一项功能,根据 HTTP 请求的路径,我可以将请求转发到不同的端口。
例如如果请求GET /foo,我想转发到81端口,如果是/bar我想转发到82端口。如果是别的,我想继续传入时将其转发到端口 80。
有这样的 eBPF 程序示例吗?
我试图弄清楚我将如何确定 HTTP 请求是什么,因为 eBPF 将应用于数据包级别
【问题讨论】:
我目前不知道这样的例子。我知道Cilium 项目使用 BPF 在 HTTP API 级别创建过滤器,但它们会动态生成 BPF 程序,我不相信 repo 有预编译的示例。
如您所述,eBPF 程序处理整个数据包,包括 L2/L3/L4 标头。因此,为了确定您的 HTTP 请求,您必须执行以下操作:
GET␣吗?如果没有,请退出。/foo 和 /bar
至少对于第一步(以太网、IP、TCP 的处理),您在网络上有可用的示例。从 parse_simple.c in kernel samples 到更复杂的,例如 Netronome 示例存储库中的 this L4 load balancer。
【讨论】: