Cilium#
Cilium — это сетевое решение для мониторинга и обеспечения безопасности с плоскостью данных на основе eBPF.
eBPF - технология, позволяющая запускать изолированные программы в привилегированном контексте, таком как ядро операционной системы. Используется для безопасного и эффективного расширения возможностей ядра без необходимости изменения исходного кода ядра или загрузки модулей ядра.
Решение обеспечивает простую плоскую сеть уровня L3 с возможностью охвата нескольких кластеров либо в режиме собственной маршрутизации, либо в режиме наложения. Cilium поддерживает протокол L7 и может применять сетевые политики на уровнях L3-L7, используя модель безопасности на основе идентификации, не связанную с сетевой адресацией.
Cilium реализует распределенную балансировку нагрузки для трафика между модулями и внешними службами и может полностью заменить kube-proxy, используя эффективные хеш-таблицы в eBPF.
Cilium-operator-generic - это компонент, который управляет жизненным циклом Cilium в кластер DropApp. Отслеживает состояние Cilium и автоматически обновляет его при необходимости.
Hubble-relay - это компонент, который позволяет Cilium собирать и анализировать сетевые данные. Работает как прокси между Cilium и Hubble, который является инструментом для мониторинга и анализа. Hubble-relay позволяет Cilium собирать информацию о сетевом трафике и использовать ее для обеспечения безопасности и мониторинга приложений.
Cilium управляется посредством командной строки. Этот интерфейс командной строки представляет собой отдельное приложение, которое управляется посредством команд, представленных в таблице.
Таблица. Доступные команды Cilium.
Синтаксис команды |
Описание |
|---|---|
|
Предоставляет прямой доступ к локальным картам eBPF |
|
Используется для сброса состояния агента |
|
Выводит код завершения оболочки для bash |
|
Позволяет управлять вариантами конфигурации Cilium |
|
Используется для запроса доступной отладочной информации у агента |
|
Используется для управления конечными точками |
|
Используется для управления удостоверениями безопасности |
|
предоставляет прямой доступ к |
|
Используется для мониторинга |
|
Используется для управления политиками безопасности |
|
Используется для управления фильтрами XDP CIDR |
|
Используется для управления службами и балансировщиками нагрузки |
|
Используется для отображения статуса демона |
|
Используется для вывода информации о версии |
Таблица. Доступные флаги Cilium
Синтаксис флага |
Описание |
|---|---|
|
Опция, которая позволяет указать конфигурационный файл для программы (по умолчанию находится в директории |
|
Опция, которая включает отладочные сообщения в программе |
|
Опция, которая позволяет указать URI для серверного API API |
Используйте команду cilium [command] --help для получения подробной информации о составе команд.
Все приведенные команды возвращают список с информацией, полученной от Cilium Daemon.
Для корректной работы при интеграции с service mesh в конфигурации Cilium параметру --cni-exclusive необходимо установить значение false:
...
lifecycle:
postStart:
exec:
command: --cni-exclusive=false
...
Сценарии использования Cilium#
Пример выполнения балансировки#
Выполните команду:
kubectl exec <pod-name> -c <container-name> – <command>
В результате выполняется связанная команда в указанных контейнере и pod. Pod-name - имя pod, container-name - имя контейнера, command - команда, которую необходимо выполнить в контейнере.
Проверка сетевого трафика кластера с помощью Hubble Relay#
Для проверки сетевого трафика кластера с помощью Hubble Relay выполните следующие команды:
Выполните запрос, который разрешен политикой:
kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landingРезультат выполнения:
Ship landedВыполните запрос, который запрещен политикой:
kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-portРезультат выполнения:
Access deniedВведите запрос, который не может быть выполнен, так как pod
xwingне имеет меткиorg=empire, требуемой политикой. Прервите запрос или дождитесь истечения времени ожидания:kubectl exec xwing -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landingРезультат выполнения:
command terminated with exit code 28Просмотрите трафик на уровне приложения (L7, HTTP) к pod
deathstar:hubble observe --pod deathstar --protocol httpВ результате выполнения команды увидите информацию о проходящем трафике.
Просмотрите весь трафик к pod
deathstar, который был заблокирован:hubble observe --pod deathstar --verdict DROPPEDВ результате выполнения команды увидите информацию о заблокированном трафике.