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.

Синтаксис команды

Описание

bpf

Предоставляет прямой доступ к локальным картам eBPF

cleanup

Используется для сброса состояния агента

completion

Выводит код завершения оболочки для bash

config

Позволяет управлять вариантами конфигурации Cilium

debuginfo

Используется для запроса доступной отладочной информации у агента

endpoint

Используется для управления конечными точками

identity

Используется для управления удостоверениями безопасности

kvstore

предоставляет прямой доступ к kvstore

monitor

Используется для мониторинга

policy

Используется для управления политиками безопасности

prefilter

Используется для управления фильтрами XDP CIDR

service

Используется для управления службами и балансировщиками нагрузки

status

Используется для отображения статуса демона

version

Используется для вывода информации о версии

Таблица. Доступные флаги Cilium

Синтаксис флага

Описание

--config string

Опция, которая позволяет указать конфигурационный файл для программы (по умолчанию находится в директории $HOME/.cilium.yaml)

-D, --debug

Опция, которая включает отладочные сообщения в программе

-H, --host string

Опция, которая позволяет указать 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 выполните следующие команды:

  1. Выполните запрос, который разрешен политикой:

    kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing
    

    Результат выполнения:

      ~~~bash
      Ship landed
      ~~~
    
  2. Выполните запрос, который запрещен политикой:

    kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port
    

    Результат выполнения:

    Access denied
    
  3. Введите запрос, который не может быть выполнен, так как pod xwing не имеет метки org=empire, требуемой политикой. Прервите запрос или дождитесь истечения времени ожидания:

    kubectl exec xwing -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing
    

    Результат выполнения:

    command terminated with exit code 28
    
  4. Просмотрите трафик на уровне приложения (L7, HTTP) к pod deathstar:

    hubble observe --pod deathstar --protocol http
    

    В результате выполнения команды увидите информацию о проходящем трафике.

  5. Просмотрите весь трафик к pod deathstar, который был заблокирован:

    hubble observe --pod deathstar --verdict DROPPED
    

    В результате выполнения команды увидите информацию о заблокированном трафике.