Выпуск Cilium 1.4, сетевой системы для Linux-контейнеров, основанной на BPF
Представлен релиз проекта Cilium 1.1, в рамках которого при участии компаний 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, с временем жизни привязок в соответствии с определенным в DNS 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 v
- Проведена большая работа по оптимизации потребления памяти и нагрузки на CPU.