eBPF: работает в пространствах имен Linux

Таким образом, BPF программы являются объектами ядра, поскольку они выполняются в пространстве ядра. С другой стороны, пространства имен Linux, также известные как контейнеры, обеспечивают изоляцию на уровне приложений, и в этом случае все они совместно используют ядро ​​хоста, модули ядра и т. д.

Так что я думаю, что нет смысла загружать программу bpf для каждого контейнера, так как она также станет видимой на хосте?

Поэтому я предполагаю, что bpf программы будут загружаться на хост и монитор/мангл/и т.д. пакеты в/из пространств имен. Учитывая, что struct sock имеет информацию об идентификаторе пространства имен, я думаю, что только определенные типы программ bpf смогут это сделать?


person Mark    schedule 15.02.2018    source источник


Ответы (1)


Так что я думаю, что нет смысла загружать bpf программу для каждого контейнера, так как она также станет видимой на хосте?

Если вы имеете в виду загрузку программы BPF из контейнера, то да, она также будет видна на хосте (и для этого вам понадобится привилегированный контейнер).

Учитывая, что struct sock имеет информацию об идентификаторе пространства имен, я думаю, что только определенные типы программ bpf смогут это сделать?

Я не смог найти какой-либо тип программы BPF, который имел бы прямой доступ к struct sock. программы BPF типа sockops имеют доступ к struct bpf_sock, но содержит несколько актуальная информация.

Вы можете использовать программы BPF типа cgroup/skb . Они присоединяются к контрольным группам и могут работать как с входящими, так и с исходящими пакетами. Они получают struct __sk_buff объект в качестве аргумента, зеркало sk_buff для полученного/отправленного пакета. Они могут использовать только несколько помощников (в дополнение к общей базе), и, похоже, не имеет права записи в пакеты.

программы kprobe BPF имеют доступ к любой функции ядра, которую kprobes может быть привязанным к. Таким образом, вы можете получить информацию о пространстве имен, выполнив поиск соответствующей функции, а затем отправить ее на свой монитор/мангл/и т. д. программа через карту bpf. Хотя и не самый простой вариант.

person pchaigno    schedule 19.02.2018