eBPF:在Linux命名空间中运行

问题描述 投票:1回答:1

所以BPF程序是内核实体,因为它们在内核空间中运行。另一方面,Linux名称空间也称为容器,提供应用程序级隔离,在这种情况下,它们共享主机的内核,内核模块等。

所以我想每个容器加载一个bpf程序是没有意义的,因为它也会在主机上显示出来?

因此,我猜想bpf程序会加载主机和监视器/ mangle / etc。到/来自命名空间的数据包。鉴于struct sock有关于名称空间id的信息,我认为只有某些类型的bpf程序才能做到这一点?

bpf linux-namespaces ebpf
1个回答
4
投票

所以我想每个容器加载一个bpf程序是没有意义的,因为它也会在主机上显示出来?

如果您的意思是从容器加载BPF程序,那么它也会在主机上可见(并且您需要一个特权容器才能这样做)。

鉴于struct sock有关于名称空间id的信息,我认为只有某些类型的bpf程序才能做到这一点?

我找不到任何可以直接访问struct sock的BPF程序类型。 BPF programs of type sockops可以访问struct bpf_sock,但它包含的实际信息很少。

你可以使用BPF programs of type cgroup/skb。这些附加到cgroup并且可以对入口和出口数据包起作用。他们收到一个struct __sk_buff对象作为参数,是收到/发送的数据包的q​​azxswpoi的镜像。他们只能使用sk_buff(除了公共基础),并且似乎没有对数据包的写访问权限。

a few helpers可以访问任何可以附加kprobes的内核函数。因此,您可以通过探测适当的函数来检索命名空间信息,然后将其发送到您的monitor / mangle / etc.通过bpf地图编程。虽然不是最简单的选择。

© www.soinside.com 2019 - 2024. All rights reserved.