Компания Google представила (https://opensource.googleblog.com/2016/11/cilium-networking-... проект Cilium (https://github.com/cilium/cilium), в рамках которого подготовлена система для обеспечения сетевого взаимодействия и применения политик безопасности для изолированных контейнеров, основанная на применении загружаемых в ядро Linux программ eBPF, генерируемых на лету. Проект создан в результате эксперимента по применению для контейнерной изоляции новых технологий ядра Linux, таких как BPF (https://en.wikipedia.org/wiki/Berkeley_Packet_Filter#Extensi... (Berkeley Packet Filter) и XDP (https://www.iovisor.org/technology/xdp) (eXpress Data Path). Исходные тексты компонентов, работающих на уровне пользователя, написаны на языке Go и распространяются (https://github.com/cilium/cilium) под лицензией Apache 2.0. Загружаемые в ядро Linux сценарии BPF доступны под лицензией GPLv2.Cilium состоит из специализированного фонового процесса, набора BPF-программ и модулей интеграции. Фоновый процесс работает в пространстве пользователя и выполняет работу по генерированию и компилированию BPF-программ, а также взаимодействует с runtime, обеспечивающим работу контейнеров. В форме BPF-программ реализованы системы обеспечения связности контейнеров, интеграции с сетевой подсистемой (физические и виртуальные сети, VXLAN, Geneve) и балансировки нагрузки. Модули интеграции предоставляются для CNI, Kubernetes и Docker.
eBPF представляет собой встроенный в ядро Linux интерпретатор байткода, позволяющий создавать обработчики сетевых операций, контролировать доступ и отслеживать работу систем, в том числе BPF-программы могут применяться для низкоуровневой обработки входящих/исходящих пакетов, принятия решений о перенаправлении пакетов, перехвата системных вызовов, контроля доступа и использования kprobes (https://www.kernel.org/doc/Documentation/kprobes.txt). XDP предоставляет средства для запуска BPF-программ на уровне сетевого драйвера, с возможностью прямого доступа к DMA-буферу пакетов, что позволяет создавать высокопроизводительные обработчики для работы в условиях большой сетевой нагрузки.
Программы для eBPF могут определяться на подмножестве языка C, компилироваться при помощи специального бэкенда LLVM и загружаться в ядро. Перед выполнением интерпретатор eBPF проверяет байткод на предмет применения разрешённых инструкций и налагает определённые правила на код (например, отсутствие циклов). Благодаря применению JIT-компиляции, байткод на лету транслируется в машинные инструкции и выполняется с производительностью нативного кода. При помощи программ BPF в Cilium реализованы такие возможности, как NAT64, балансировщики для сетевых уровней L3/L4, механизм отслеживания соединений, система маппинга сетевых портов, средства управления доступом, обработчики запросов NDisc и ARP, инкапсуляция пакетов через VXLAN, Geneve и GRE.
Из преимуществ применения Cilium для контейнерной изоляции отмечается:
- Простота: каждому контейнеру назначен адрес IPv6 (опционально IPv4), все контейнеры соединены с одним общим виртуальным сетевым пространством с изоляцией через систему меток, привязанных к контейнерам. IPv6 выбран в качестве основной модели адресации с поддержкой IPv4 для обеспечения обратной совместимости;- Расширяемость: пользователи могут дополнить или адаптировать для своих нужд любой аспект работы BPF-программ. Возможности перенаправления и фильтрации пакетов не ограничиваются версией ядра и могут расширяться добавлением новых типов статистики, не поддерживаемых ядром, новыми обработчиками протоколов, внесением изменений в методы отслеживания соединений, реализацией дополнительной логики перенаправления пакетов;
- Высокая производительность: JIT-компилятор позволяет добиться эффективного выполнения BPF-программ. Для каждого контейнера генерируются отдельные программы BPF, обеспечивающие только необходимую функциональность, что позволяет уменьшить размер выполняемого кода;
- Возможность внесения изменений и исправлений в компоненты, отвечающие за обработку и перенаправление пакетов, без перезагрузки ядра, без разрыва установленных соединений и без остановки работающих контейнеров;
- Интеграция эффективной системы мониторинга, которая может включаться по необходимости во время работы. Возможность отслеживать сетевую активность контейнеров в условиях высокой сетевой нагрузки без внесения задержек при обработке соединений.
URL: https://opensource.googleblog.com/2016/11/cilium-networking-...
Новость: http://www.opennet.me/opennews/art.shtml?num=45421
кучеряво ... но как-то излишествами попахивает
для локалхоста?.. ;)
холокоста
На своём локалхосте можете и холокостом заниматься. Только не рассказывайте никому.
нельзя.
адъмин лохокоста
Я что-то не понимаю, а чем плохи стандартные network namespace, множественные таблицы роутов, и нат через обычный файервол?
Присоединяюсь.
Если есть есть плюсы то может кто-то их опишет.
А заодно и минусы.
Гугл обнаружил в namespaces фатальный недостаток: код написали не они и там нет go :)
всем хорош.
в случае с обычными контейнерами в привычном нам всем виде.
но сейчас ведь в тренде docker на локалхостах недокодеров.
переставьте себе штук 30 работающих на ноуте у Васи контейнеров, которые к тому же непойми кем клепались и подгружаются, зачастую, напрямую из git без всяких проверок и наладок.
теперь возьмите iproute2 и iptabes и попробуйте весь этот балаган как-то разрулить.
субъективно, это как-раз тот случай, когда для исправления ситуации с каким-то одним костылем делается еще один костыль, еще более кривой и несуразный.
Грузим в ведро какой-то непонятный код, но при этом говорим о повышении безопасности каких-то контейнеров.
Что-то статья напоминает кашу из плохого перевода и профанации.
Посмотрите код, а потом говорим годный он или не очень.
А ты вообще комментарий-то понял? Я говорю про то, что эти BPF программы непонятные (которые генерятся из кода юзера, судя по всему) грузятся и работают в ведре.Какой код я должен смотреть и что там должно быть годным и не очень в итоге?
Собственно это не программы, а правила фильтрации в бинарном виде.
> Собственно это не программы, а правила фильтрации в бинарном виде.Собственно, это тюринг-полные программы, вгружаемые из юзермода в ведро что выглядит достаточно стремно. Как минимум из-за halting problem. Там конечно клянутся что такое обнаруживается, но... но давать юзеру грузить свой код в ядро, даже в VM, затейка довольно на любителя. По крайней мере юзер получит немало вариантов как ему поfuzz'ить ядро совершенно левым способом.
> Программы для eBPF могут определяться на подмножестве языка C, компилироваться при помощи специального бэкенда LLVMеще один гвоздь в гроб gcc.
"не дождетесь" (с)
а чего же gcc не использовали? только llvm.
Потому что gcc не компилирует в BPF, а вы думали почему?
> еще один гвоздь в гроб gcc.- послышался голос из могилы.
> еще один гвоздь в гроб gcc.Это при том что майнлайновое ядро Linux ничем кроме gcc не собирается? У вас гвоздь погнулся - вы его в бетон пытаетесь забивать.
А клиент для дрйава не представил...
Прочитайте внимательно первые строки оригинальной статьи:> This is a guest post by Daniel Borkmann who was recently recognized through the Google Open Source Peer Bonus program for his work on the Cilium project. We invited Daniel to share his project on our blog.
Никакого отношения проект к Google не имеет. Но проект годный, да.
> Никакого отношения проект к Google не имеет. Но проект годный, да.Ну дак и написано, что "Google представил", а не "открыл" или "опубликовал".
Google предоставил свой блог для гостевого поста, а не проект.
чувствуется влияние идей Qubes OS, но КАК оно воспроизведено и на чем... ужс.
овэерхэд должен быть эпичным. _рукалицо