The OpenNET Project / Index page

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

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

07.05.2018 09:00

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

Изначально Cilium был разработан компанией Google, но затем преобразован в независимый проект, развиваемый сообществом. Помимо Google в разработке Cilium принимают участие такие компании, как Facebook, Netflix и Red Hat. Выпуск Cilium 1.0 обусловлен полной стабилизацией API, обеспечением длительной поддержки (LTS) и признанием проекта готовым для промышленного применения.

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

Особенности Cilium:

  • Упрощённая сетевая модель: каждому контейнеру назначается адрес IPv6 (опционально IPv4), все контейнеры соединены с одним общим виртуальным сетевым пространством с изоляцией через систему меток, привязанных к контейнерам. На базе меток могут выделяться сегменты сети и вводиться дополнительные правила доступа. IPv6 выбран в качестве основной модели адресации с поддержкой IPv4 для обеспечения обратной совместимости. Сеть может быть настроена в двух режимах: Overlay/VXLAN и Direct Routing.
  • Расширяемость: пользователи могут дополнить или адаптировать для своих нужд любой аспект работы BPF-программ. Возможности перенаправления и фильтрации пакетов не ограничиваются версией ядра и могут расширяться добавлением новых типов статистики, не поддерживаемых ядром, новыми обработчиками протоколов, внесением изменений в методы отслеживания соединений, реализацией дополнительной логики перенаправления пакетов;
  • Возможность внесения изменений и исправлений в компоненты, отвечающие за обработку и перенаправление пакетов, без перезагрузки ядра, без разрыва установленных соединений и без остановки работающих контейнеров;
  • Интеграция эффективной системы мониторинга, которая может включаться по необходимости во время работы и позволяет отслеживать сетевую активность контейнеров в условиях высокой сетевой нагрузки без внесения задержек при обработке соединений. Кроме IP-адресов отображаются дополнительные метаданные, такие как метки контейнеров и имена сервисов. Система также позволяет производить инспектирование на уровне вызовов API. Постоянно отслеживается связность между узлами кластера и величина задержек при выполнении сетевых операций, что позволяет оперативно выявлять сбои узлов и сетевые проблемы. Также собираются метрики, имеющие отношение к производительности и состоянию сервисов;
  • Все компоненты Cilium могут применяться в полностью распределённом окружении, формируя общую виртуальную сеть для кластера. Демон, управляющие прослойки и генерируемые BPF-приложения могут выполняться на разных узлах. В будущем планируется предоставить средства для объединения разных кластеров без применения сложных прокси-сервисов;
  • Обеспечение сетевой безопасности как на уровне пакетов, так и на уровне API: возможности по фильтрации трафика комбинируются с авторизацией на уровне API, что позволяет обеспечить защиту и для традиционных внедрений и для систем на базе архитектуры микросервисов (микросервисы взаимодействуют через API с идентификацией не по IP, а по именам сервисов, Cilium позволяет избавиться от дополнительных прокси);
  • Применение идентификации: вместо разграничения на основе исходных IP-адресов в Cilium применяется система меток, точно идентифицирующих каждый сетевой пакет (позволяет отследить привязку к контейнеру и сервису). Дополнительно поддерживается и традиционная система контроля доступа на основе правил, отталкивающихся от IP-адресов и подсетей. По возможности в Cilium используется дополнительный уровень абстракции, позволяющий избежать привязки к жестко заданным IP в пользу использования имён сервисов в правилах доступа;
  • Распределённая и масштабируемая система балансировки нагрузки, использующая BPF для организации связи между сервисами. Поддерживается балансировка round-robin с учётом весовых коэффициентов и функция хэширования потоков. Эффективность работы балансировщика не зависит от числа сервисов. Балансировщик может быть настроен в форме Kubernetes Service Implementation (альтернатива kube-proxy, все сервисы Kubernetes ClusterIP автоматически реализуются в форме BPF) или с управлением через API (возможность прямой настройки параметров балансировщика);
  • Высокая производительность. JIT-компилятор позволяет добиться эффективного выполнения BPF-программ. Для каждого контейнера генерируются отдельные программы BPF, обеспечивающие только необходимую функциональность, что позволяет уменьшить размер выполняемого кода.

    При организации перенаправления трафика между большим числом сервисов iptables становится узким местом в производительности (из-за необходимости перебора правил при 5000 сервисов производительность падает на 30%, а при 10000 - на 80%, обновление правил для 5000 сервисов занимает 11 минут). Cilium сводит обновление правил к уровню O(1), при котором производительность не зависит от числа записей. Благодаря хэшированию время поиска и применения правил всегда постоянно и не зависит от числа сервисов. Замена традиционного IPVS в балансировщике нагрузки Facebook на решение на базе BPF и XDP позволило поднять производительность в 10 раз. Применение механизма Sockmap в BPF также позволяет ускорить выполнение операций редиректа запросов, которые в среднем по сравнению с iptables выполняются в 2 раза быстрее.

eBPF представляет собой встроенный в ядро Linux интерпретатор байткода, позволяющий создавать обработчики сетевых операций, контролировать доступ и отслеживать работу систем, в том числе BPF-программы могут применяться для низкоуровневой обработки входящих/исходящих пакетов, принятия решений о перенаправлении пакетов, перехвата системных вызовов, контроля доступа и использования kprobes. XDP предоставляет средства для запуска BPF-программ на уровне сетевого драйвера, с возможностью прямого доступа к DMA-буферу пакетов, что позволяет создавать высокопроизводительные обработчики для работы в условиях большой сетевой нагрузки.

Программы для eBPF могут определяться на подмножестве языка C, компилироваться при помощи специального бэкенда LLVM и загружаться в ядро. Перед выполнением интерпретатор eBPF проверяет байткод на предмет применения разрешённых инструкций и налагает определённые правила на код (например, отсутствие циклов). Благодаря применению JIT-компиляции, байткод на лету транслируется в машинные инструкции и выполняется с производительностью нативного кода. При помощи программ BPF в Cilium реализованы такие возможности, как NAT64, балансировщики для сетевых уровней L3/L4, механизм отслеживания соединений, система маппинга сетевых портов, средства управления доступом, обработчики запросов NDisc и ARP, инкапсуляция пакетов через VXLAN, Geneve и GRE.



  1. Главная ссылка к новости (https://cilium.io/blog/2018/04...)
  2. OpenNews: Для ядра Linux предложен новый пакетный фильтр bpfilter
  3. OpenNews: Выпуск sandboxed-tor-browser, прослойки для изоляции Tor Browser
  4. OpenNews: Четвёртый тестовый выпуск ОС Subgraph
  5. OpenNews: Oracle перелицензировал код DTrace под GPLv2
  6. OpenNews: Критические уязвимости в подсистеме eBPF ядра Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48556-bpf
Ключевые слова: bpf, cilium, cluster, container, firewall, k8s, kubernetes
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, MPEG LA (ok), 10:33, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ждем в докере из коробки
     
     
  • 2.2, Аноним (-), 10:34, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Контейнеры из коробок -- вот оно, современное ИТ :)
     
     
  • 3.37, Аноним (-), 18:10, 08/05/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Зато когда вопрос встает ребром, девопсы Пашеньки рубят лулзы с церберов вовочки, так что их даже зобанить толком не могут: гаденыши разворачивают новые серваки быстрее чем жандарм банхаммером успевает махать. А мягкотелые ветеран юникс админы получили бы пару раз банхаммером в табло и угомонились бы, потому что неделю окучивать новый серв взамен зобаненого им видите ли тяжко.
     
     
  • 4.40, angra (ok), 05:34, 09/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Прикинь, ветераны юникс администрирования новые сервера разворачивали за пару минут за очень много лет до появления всяких докеров и девопсов. Эти ветераны вообще очень многое умели и умеют такого, о чем девопсы не имеет понятия.
     
     
  • 5.41, Аноним (-), 14:26, 09/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Прикинь, ветераны юникс администрирования новые сервера разворачивали за пару минут за
    > очень много лет до появления всяких докеров и девопсов.

    Прям BBC на DOS или что там было в доконтейнеровую эпоху?
    Да врети вы фсе!(с)
    Потому что я точно слышал, что разворот рабочей станции полностью с нуля (федора, сузя или ХР) через PXT в 2005 году длился целых десять или даже 15 минут! Воть!

     
     
  • 6.42, Аноним (-), 14:27, 09/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > (федора, сузя или ХР) через PXT в 2005 году длился целых

    s/PXT/PXE/

     
  • 5.43, Аноним (-), 23:47, 09/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, за 5 минут. Что раньше что сейчас сервак 10-20 минут наливается в зависимости чем наливать.
    Так что не рассказывайте мне про 5 минут.
     
     
  • 6.44, angra (ok), 06:28, 10/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Есть серверное железо, которое за 10 минут только биос проходит. Есть, которое это делает за секунды. Есть задачи, для которых надо поместить на диск нового сервера десятки гигабайт, а есть те, где хватает нескольких сотен метров, которые за полминуты будут переданы по сети и останутся в памяти. Так что запуск нового сервера может занять как больше 5 минут, так и меньше. Но в любом случае речь идет о минутах, а не неделях.
     

  • 1.3, Аноним (-), 10:42, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Что за "Orchestration systems" на картинке?
     
     
  • 2.12, ваш К.О. (?), 13:29, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    та, к которой ты, Анон, напишешь плагин для управления этой хренью.

     
  • 2.30, Аноним (-), 20:05, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Админы локалхоста не палятся.
     

  • 1.6, Аноним (-), 11:19, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хватит этих контейнеров. Хоть один до конца допилите лучше.
     
     
  • 2.7, Аноним (-), 11:48, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > до конца

    нет у контейнеров начала, нет у контейнеров конца

     
     
  • 3.8, Вася Совесть (?), 12:20, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    и дна тоже нет
     
     
  • 4.9, Crazy Alex (ok), 12:29, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Там кругом дно пока что
     

  • 1.10, Аноним (-), 12:46, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Очередная оверлейная сеть? Чем она лучше, чем Weave или Flannel?
     
     
  • 2.11, пох (?), 12:53, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Очередная оверлейная сеть? Чем она лучше, чем Weave или Flannel?

    тем что держит
    3,000,000 req/s
    (впрочем, тут нигде не написано что это в overlay mode и что там была включена хоть какая-то фильтрация ;)

     
     
  • 3.21, Аноним (-), 17:06, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Как насчет 12Mpps (million packets per)?
     
     
  • 4.25, пох (?), 17:44, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    req - это не один пакет, это полноценная сессия.
     

  • 1.16, Аноним (-), 16:32, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    да просто нужно отказаться от IP-адресов в локальной сети и всё сразу станет намного лучше, эти ребята сделали первый шаг к этому отказу
     
     
  • 2.17, Аноним (-), 16:34, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    вот оно: "микросервисы взаимодействуют через API с идентификацией не по IP, а по именам сервисов, Cilium позволяет избавиться от дополнительных прокси"
     
     
  • 3.34, Аноним (34), 21:08, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А в чем принципиальное отличие от имен контейнеров в докере?
     
  • 2.35, Алконим (?), 01:27, 08/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В локалке нужно по IPX работать, как уже когда-то было.
     

  • 1.22, Аноним (-), 17:17, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Нескучный аналог Open vSwitch?
     
  • 1.26, Аноним (-), 18:19, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Calico выглядит как-то более безопасным на уровне L2.
     
  • 1.27, Аноним (-), 19:42, 07/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не понимаю. BPF ведь только-только выкатили, а тут уже продукты на его основе? Далее... Какой ipv6?? Kubernetes и близко про ipv6 не слышал
     
     
  • 2.31, Аноним (-), 20:05, 07/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Facebook внутри работает на нативном ipv6, про Гугл все верно...
     
     
  • 3.38, Аноним (-), 18:19, 08/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Facebook внутри работает на нативном ipv6, про Гугл все верно...

    Так, блин, IPv4, натурально, заканчивается. Поэтому тысячи внутренних серверов на нем - становится все более и более проблематично.

     
     
  • 4.39, Andrey Mitrofanov (?), 20:40, 08/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Facebook внутри работает на нативном ipv6, про Гугл все верно...
    > Так, блин, IPv4, натурально, заканчивается. Поэтому тысячи внутренних серверов на нем -

    Шо, прям тыщи мульёнов? Вот прям в 10.0.0.0/8 не вмещается?

    Гига-а-ант!  То ли индустрии, то ли падежа на букву π.


    > становится все более и более проблематично.

     

  • 1.36, Аноним (-), 14:11, 08/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ожидаем Neo Cilium 1.1
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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