Представлен (https://cilium.io/blog/2019/02/12/cilium-14/) релиз проекта Cilium 1.1 (https://cilium.io), в рамках которого при участии компаний Google, Facebook, Netflix и Red Hat развивается система для обеспечения сетевого взаимодействия и применения политик безопасности для изолированных контейнеров и процессов. Для разграничения сетевого доступа в Cilium применяются е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-программ, а также взаимодействию с runtime, обеспечивающим работу контейнеров. В форме BPF-программ реализованы системы обеспечения связности контейнеров, интеграции с сетевой подсистемой (физические и виртуальные сети, VXLAN, Geneve) и балансировки нагрузки. Фоновый процесс дополняют управляющий cli-интерфейс, репозиторий правил доступа, система мониторинга и модули интеграции с поддержкой Kubernetes, Mesos, Istio, и Docker. Производительность решения на базе
Cilium при большом числе сервисов и соединений в два раза опережает решения на базе iptables из-за больших накладных расходов на перебор правил. Более подробно про особенности Cilium можно прочитать в тексте анонса (https://www.opennet.dev/opennews/art.shtml?num=48556) первого выпуска проекта.
Основные новшества:
- Добавлена возможность маршрутизации и проброса трафика сервисов между несколькими кластерами Kubernetes, а также предложена концепция глобальных сервисов (вариант штатных сервисов Kubernetes с бэкендами в нескольких кластерах). Новая функциональность позволяет в случае выхода из строя бэкендов, обеспечивающих работу сервиса в одном кластере, автоматически перенаправить трафик к обработчикам данного сервиса в другом кластере.
- Реализованы средства для задания правил обработки запросов и ответов DNS в привязке к группам контейнеров (pods), позволяющие увеличить контроль за обращением к внешним ресурсами из контейнеров. Дополнительно появилась поддержка ведения лога всех запросов и ответов DNS в привязке к pod-ам. Помимо правил доступа на уровне IP-адресов теперь можно определить какие DNS-запросы и DNS-ответы допустимы, а какие нужно блокировать, например, можно блокировать доступ к определённым доменам или разрешить запросы только для локального домена, без необходимости отслеживания изменений привязки доменов к IP. В том числе реализована возможность использования возвращённого в процессе запроса к DNS IP-адреса для ограничения последующих сетевых операций (например, можно разрешить только обращение к IP-адресам, которые были возвращены при резолвинге в DNS, т.е. предоставлен своеобразный межсетевой экран, манипулирующий доменами вместо IP, с временем жизни привязок в соответствии с определённым в DNS TTL);
- Добавлена экспериментальная поддержка прозрачного шифрования всего трафика между сервисами. Шифрование может применяться как для трафика между разными кластерами, так и в пределах одного кластера. Также добавлена возможность аутентификации узлов, что позволяет размещать кластер в не заслуживающей доверия сети;
- Добавлена (https://docs.cilium.io/en/v1.4/gettingstarted/ipvlan/) экспериментальная поддержка сетевых интерфейсов IPVLAN (https://www.kernel.org/doc/Documentation/networking/ipvlan.t... позволяющих добиться более высокой производительности и снизить задержки при взаимодействии между двумя локальными контейнерами;
- Добавлен модуль для интеграции с Flannel (https://github.com/coreos/flannel), системой для автоматизации настройки сетевого взаимодействия между узлами в кластере Kubernetes, позволяющий работать бок о бок или запустить Cilium поверх Flannel (сетевое взаимодействие от Flannel, политики доступа и балансировка от Cilium);
- Обеспечена экспериментальная поддержка определения правил доступа на основе метаданных AWS (Amazon Web Services), таких как метки EC2, группы безопасности и имена VPC;
- Предоставлена (https://docs.cilium.io/en/v1.4/gettingstarted/k8s-install-gke/) возможность запуска Cilium в GKE (Google Kubernetes Engine в Google Cloud) с использованием COS (https://cloud.google.com/container-optimized-os/) (Container-Optimized OS);
- Обеспечена тестовая возможность для использования Sockmap BPF для ускорения коммуникаций между локальными процессами (например, полезно для ускорения взаимодействия между sidecar proxie и локальными процессами);
- Добавлены дополнительные метрики для системы мониторинга Prometheus и предложен новые графики в сводной панели Grafana;
- Добавлена поддержка Kubernetes 1.13 и новых версий CRI-O v
- Проведена большая работа по оптимизации потребления памяти и нагрузки на CPU.
URL: https://cilium.io/blog/2019/02/12/cilium-14/
Новость: https://www.opennet.dev/opennews/art.shtml?num=50144