eBPF 编程类型与网络应用深度解析
1. eBPF 应用的前期考量
在使用 eBPF 对应用进行探测时,有几个关键因素需要考虑。首先,应用程序可能被构建为独立的二进制文件,这意味着它不会触发你在共享库中设置的任何探针。其次,容器通常运行在自己的文件系统副本上,其共享库的路径与主机上的共享库路径不同。此外,eBPF 程序可能需要了解应用程序所使用的编程语言,因为不同语言传递函数参数的方式不同。例如,在 C 语言中,函数参数通常通过寄存器传递,而在 Go 语言中则通过栈传递,这可能会影响存储寄存器信息的 pt_args 结构的使用。
不过,有很多实用的工具可以使用 eBPF 来对用户空间应用程序进行插桩。例如,可以挂钩到 SSL 库以跟踪解密后的加密信息,还可以使用如 Parca 这样的工具对应用程序进行持续性能分析。
2. LSM 程序类型
BPF_PROG_TYPE_LSM 程序与 Linux 安全模块(LSM)API 相结合,该 API 是内核中一个稳定的接口,最初用于内核模块实施安全策略。现在,eBPF 安全工具也可以使用这个接口。这些程序通过 bpf(BPF_RAW_TRACEPOINT_OPEN) 进行挂载,在很多方面它们被当作跟踪程序处理。其独特之处在于返回值会影响内核的行为,非零返回码表示安全检查未通过,内核将不会继续执行请求的操作,这与性能相关的程序类型有显著区别,后者会忽略返回码。
3. 网络相关的 eBPF 程序类型
网络方面有许多不同的 eBPF 程序类型,用于在网络栈的不同点处理网络消息。这些程序类型都需要 CAP_
超级会员免费看
订阅专栏 解锁全文
27

被折叠的 条评论
为什么被折叠?



