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

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

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

Основные новшества

  • Добавлена возможность маршрутизации и проброса трафика сервисов между несколькими кластерами Kubernetes. Также предложена концепция глобальных сервисов (вариант штатных сервисов Kubernetes с бэкендами в нескольких кластерах). Новая функциональность позволяет в случае выхода из строя бэкендов, обеспечивающих работу сервиса в одном кластере, автоматически перенаправить трафик к обработчикам данного сервиса в другом кластере.

  • Реализованы средства для задания правил обработки запросов и ответов DNS в привязке к группам контейнеров (pods), позволяющие увеличить контроль за обращением к внешним ресурсами из контейнеров. Дополнительно появилась поддержка ведения лога всех запросов и ответов DNS в привязке к pod-ам. Помимо правил доступа на уровне IP-адресов теперь можно определить какие DNS-запросы и DNS-ответы допустимы, а какие нужно блокировать. Например, можно блокировать доступ к определённым доменам или разрешить запросы только для локального домена, без необходимости отслеживания изменений привязки доменов к IP. В том числе реализована возможность использования возвращённого в процессе запроса к DNS IP-адреса для ограничения последующих сетевых операций (например, можно разрешить только обращение к IP-адресам, которые были возвращены при резолвинге в DNS, т.е. предоставлен своеобразный межсетевой экран, манипулирующий доменами вместо IP, с временем жизни привязок в соответствии с определённым TTL);

  • Добавлена экспериментальная поддержка прозрачного шифрования всего трафика между сервисами. Шифрование может применяться как для трафика между разными кластерами, так и в пределах одного кластера. Также добавлена возможность аутентификации узлов, что позволяет размещать кластер в не заслуживающей доверия сети;
  • Добавлена экспериментальная поддержка сетевых интерфейсов IPVLAN, позволяющих добиться более высокой производительности и снизить задержки при взаимодействии между двумя локальными контейнерами;

  • Добавлен модуль для интеграции с Flannel, системой для автоматизации настройки сетевого взаимодействия между узлами в кластере Kubernetes, позволяющий работать бок о бок или запустить Cilium поверх Flannel (сетевое взаимодействие от Flannel, политики доступа и балансировка от Cilium);
  • Обеспечена экспериментальная поддержка определения правил доступа на основе метаданных AWS (Amazon Web Services), таких как метки EC2, группы безопасности и имена VPC;
  • Предоставлена возможность запуска Cilium в GKE (Google Kubernetes Engine в Google Cloud) с использованием COS (Container-Optimized OS);
  • Обеспечена тестовая возможность для использования Sockmap BPF для ускорения коммуникаций между локальными процессами (например, полезно для ускорения взаимодействия между sidecar proxie и локальными процессами);

  • Добавлены дополнительные метрики для системы мониторинга Prometheus и предложены новые графики в сводной панели Grafana;

  • Добавлена поддержка Kubernetes 1.13 и новых версий CRI-O;
  • Проведена большая работа по оптимизации потребления памяти и нагрузки на CPU.

Источник: OpenNET