首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >eBPF:在Linux命名空间中运行

eBPF:在Linux命名空间中运行
EN

Stack Overflow用户
提问于 2018-02-15 20:22:08
回答 1查看 1.3K关注 0票数 1

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

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

因此,我猜想bpf程序将加载到主机上,并监视/mangle/等数据包到/从名称空间。考虑到struct sock有关于名称空间id的信息,我认为只有某些类型的bpf程序才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-19 14:08:21

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

如果您的意思是从容器中加载一个BPF程序,那么是的,它在主机上也是可见的(为此您需要一个特权容器)。

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

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

不过,你可以使用cgroup/skb型BPF程序。这些连接在cgroup上,并且可以同时作用于入口和出口数据包。它们接收一个struct __sk_buff对象作为参数,作为接收/发送的数据包的sk_buff镜像。他们只能使用几个帮手 (除了公共基础之外),而且似乎没有对数据包的写访问权。

K探针BPF程序可以访问任何可以附加到的内核函数。因此,您可以通过探测适当的函数来检索命名空间信息,然后通过bpf映射将其发送到监视器/mangle/等程序。不过,这不是最简单的选择。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48815633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档