The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Google представил Cilium, сетевую систему для Linux-контейнеров, основанную на BPF

03.11.2016 11:14

Компания Google представила проект Cilium, в рамках которого подготовлена система для обеспечения сетевого взаимодействия и применения политик безопасности для изолированных контейнеров, основанная на применении загружаемых в ядро Linux программ eBPF, генерируемых на лету. Проект создан в результате эксперимента по применению для контейнерной изоляции новых технологий ядра Linux, таких как BPF (Berkeley Packet Filter) и XDP (eXpress Data Path). Исходные тексты компонентов, работающих на уровне пользователя, написаны на языке Go и распространяются под лицензией Apache 2.0. Загружаемые в ядро Linux сценарии BPF доступны под лицензией GPLv2.

Cilium состоит из специализированного фонового процесса, набора BPF-программ и модулей интеграции. Фоновый процесс работает в пространстве пользователя и выполняет работу по генерированию и компилированию BPF-программ, а также взаимодействует с runtime, обеспечивающим работу контейнеров. В форме BPF-программ реализованы системы обеспечения связности контейнеров, интеграции с сетевой подсистемой (физические и виртуальные сети, VXLAN, Geneve) и балансировки нагрузки. Модули интеграции предоставляются для CNI, Kubernetes и Docker.

eBPF представляет собой встроенный в ядро Linux интерпретатор байткода, позволяющий создавать обработчики сетевых операций, контролировать доступ и отслеживать работу систем, в том числе BPF-программы могут применяться для низкоуровневой обработки входящих/исходящих пакетов, принятия решений о перенаправлении пакетов, перехвата системных вызовов, контроля доступа и использования kprobes. 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, обеспечивающие только необходимую функциональность, что позволяет уменьшить размер выполняемого кода;
  • Возможность внесения изменений и исправлений в компоненты, отвечающие за обработку и перенаправление пакетов, без перезагрузки ядра, без разрыва установленных соединений и без остановки работающих контейнеров;
  • Интеграция эффективной системы мониторинга, которая может включаться по необходимости во время работы. Возможность отслеживать сетевую активность контейнеров в условиях высокой сетевой нагрузки без внесения задержек при обработке соединений.


  1. Главная ссылка к новости (https://opensource.googleblog....)
  2. OpenNews: Началось тестирование ОС Subgraph, использующей контейнерную изоляцию приложений на десктопе
  3. OpenNews: Intel представил Clear Linux с контейнерами приложений на базе виртуализации
  4. OpenNews: Компания Canonical выпустила систему управления контейнерами LXD 2.0
  5. OpenNews: Компания Google открыла код системы изолированных контейнеров Lmctfy
  6. OpenNews: Google анонсировал Kubernetes, открытую систему управления кластером изолированных контейнеров
Лицензия: CC-BY
Тип: К сведению
Короткая ссылка: https://opennet.ru/45421-bpf
Ключевые слова: bpf, container, cilium
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (26) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 11:42, 03/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    кучеряво ... но как-то излишествами попахивает
     
     
  • 2.2, SysA (?), 11:47, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    для локалхоста?.. ;)
     
     
  • 3.5, Аноним (-), 12:30, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • –7 +/
    холокоста
     
     
  • 4.6, A.Stahl (ok), 12:45, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    На своём локалхосте можете и холокостом заниматься. Только не рассказывайте никому.
     
     
  • 5.19, Аноним (-), 19:31, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    нельзя.
     
  • 4.18, Аноним (-), 19:25, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    адъмин лохокоста
     

  • 1.3, anonymous (??), 12:18, 03/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Я что-то не понимаю, а чем плохи стандартные network namespace, множественные таблицы роутов, и нат через обычный файервол?
     
     
  • 2.15, evkogan (?), 15:50, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Присоединяюсь.
    Если есть есть плюсы то может кто-то их опишет.
    А заодно и минусы.
     
  • 2.25, Аноним (-), 01:02, 05/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Гугл обнаружил в namespaces фатальный недостаток: код написали не они и там нет go :)
     
  • 2.29, Валик228 (?), 10:59, 09/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    всем хорош.
    в случае с обычными контейнерами в привычном нам всем виде.
    но сейчас ведь в тренде docker на локалхостах недокодеров.
    переставьте себе штук 30 работающих на ноуте у Васи контейнеров, которые к тому же непойми кем клепались и подгружаются, зачастую, напрямую из git без всяких проверок и наладок.
    теперь возьмите iproute2 и iptabes и попробуйте весь этот балаган как-то разрулить.
    субъективно, это как-раз тот случай, когда для исправления ситуации с каким-то одним костылем делается еще один костыль, еще более кривой и несуразный.
     

  • 1.4, Аноним (-), 12:29, 03/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Грузим в ведро какой-то непонятный код, но при этом говорим о повышении безопасности каких-то контейнеров.
    Что-то статья напоминает кашу из плохого перевода и профанации.
     
     
  • 2.9, Anonymouys528 (?), 13:12, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Посмотрите код, а потом говорим годный он или не очень.
     
     
  • 3.10, Аноним (-), 13:32, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А ты вообще комментарий-то понял? Я говорю про то, что эти BPF программы непонятные (которые генерятся из кода юзера, судя по всему) грузятся и работают в ведре.

    Какой код я должен смотреть и что там должно быть годным и не очень в итоге?

     
     
  • 4.24, Аноним (-), 00:51, 05/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Собственно это не программы, а правила фильтрации в бинарном виде.
     
     
  • 5.26, Аноним (-), 01:04, 05/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Собственно это не программы, а правила фильтрации в бинарном виде.

    Собственно, это тюринг-полные программы, вгружаемые из юзермода в ведро что выглядит достаточно стремно. Как минимум из-за halting problem. Там конечно клянутся что такое обнаруживается, но... но давать юзеру грузить свой код в ядро, даже в VM, затейка довольно на любителя. По крайней мере юзер получит немало вариантов как ему поfuzz'ить ядро совершенно левым способом.

     

  • 1.11, Аноним (-), 13:58, 03/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Программы для eBPF могут определяться на подмножестве языка C, компилироваться при помощи специального бэкенда LLVM

    еще один гвоздь в гроб gcc.

     
     
  • 2.13, Uri (??), 14:26, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    "не дождетесь" (с)
     
     
  • 3.17, Аноним (-), 18:55, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а чего же gcc не использовали? только llvm.
     
     
  • 4.28, Аноним (-), 11:25, 05/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что gcc не компилирует в BPF, а вы думали почему?
     
  • 2.21, Led (ok), 22:07, 03/11/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > еще один гвоздь в гроб gcc.

    - послышался голос из могилы.

     
  • 2.27, Аноним (-), 01:05, 05/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > еще один гвоздь в гроб gcc.

    Это при том что майнлайновое ядро Linux ничем кроме gcc не собирается? У вас гвоздь погнулся - вы его в бетон пытаетесь забивать.

     

  • 1.16, KOT040188 (ok), 16:40, 03/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А клиент для дрйава не представил...
     
  • 1.20, Аноним (-), 21:11, 03/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прочитайте внимательно первые строки оригинальной статьи:

    > 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 не имеет. Но проект годный, да.

     
     
  • 2.22, Аноним (-), 00:11, 04/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Никакого отношения проект к Google не имеет. Но проект годный, да.

    Ну дак и написано, что "Google представил", а не "открыл" или "опубликовал".

     
     
  • 3.23, AR (?), 11:09, 04/11/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Google предоставил свой блог для гостевого поста, а не проект.
     

  • 1.30, Аноним (-), 19:11, 09/11/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    чувствуется влияние идей Qubes OS, но КАК оно воспроизведено и на чем... ужс.
    овэерхэд должен быть эпичным. _рукалицо
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру