Cilium
Описание
Cilium — это сетевой плагин (CNI) и система безопасности для Kubernetes, которая работает на уровне ядра операционной системы с использованием технологии eBPF.
Поддержка микросегментации сети на уровне CNI (NetworkPolicy)
Микросегментация на уровне CNI позволяет реализовать принцип нулевого доверия (Zero Trust) в Kubernetes, ограничивая сетевое взаимодействие между рабочими нагрузками. Cilium предоставляет для этого расширенный набор ресурсов NetworkPolicy, основанный на идентификации подов по меткам, а не на IP-адресах.
Основные ресурсы микросегментации
Cilium предлагает трехуровневую модель политик для микросегментации:
1. CiliumNetworkPolicy: Политика уровня пространства имен (namespace). Позволяет определять правила гранулярного доступа для отдельных подов, микросервисов или групп в рамках одного пространства имен.
2. CiliumClusterwideNetworkPolicy: Кластерная политика. Действует глобально, позволяя задавать правила, общие для всего кластера, что упрощает управление микросегментацией в мультитенантных средах.
3. Стандартный NetworkPolicy: Cilium полностью поддерживает и встроенный ресурс Kubernetes NetworkPolicy, обеспечивая совместимость с базовыми сценариями.
Такой подход гарантирует необходимую иерархию:
Кластерный администратор может задать глобальные правила изоляции через CiliumClusterwideNetworkPolicy (например, запретить весь межпространственный трафик по умолчанию).
Разработчик или владелец сервиса может детализировать разрешения для своих микросервисов внутри конкретного неймспейса с помощью CiliumNetworkPolicy.
Модели микросегментации
Cilium позволяет реализовать микросегментацию на нескольких уровнях, каждый из которых имеет свою гранулярность разграничения доступа:
Микросегментация подов: Политики применяются к конкретным подам одной меткой, что позволяет изолировать друг от друга отдельные экземпляры сервисов.
Микросегментация микросервисов/CNF: Политики связывают группу подов, реализующих единую функцию, по общему селектору меток, контролируя их взаимодействие с другими сервисами.
Микросегментация неймспейсов: Политики изолируют пространства имен целиком, запрещая любой межпространственный трафик, кроме явно разрешенного.
Гранулярность разграничения доступа
Гибкость политик Cilium обеспечивается богатым синтаксисом правил и детальными селекторами:
По подам и микросервисам (endpointSelector, fromEndpoints, toEndpoints): Правила задаются через стандартные Kubernetes-селекторы меток (matchLabels), что позволяет гибко связывать поды, сервисы и их группы.
По пространствам имен (namespace): Политики могут изолировать отдельные пространства имен. Cilium позволяет как запретить весь входящий трафик в пространство имен (ingress: []), так и точечно указать разрешенные пространства-источники через метки kubernetes.io/metadata.name.
На уровне L7 (Application Layer): В дополнение к L3/L4 правилам (toPorts), Cilium позволяет фильтровать трафик на прикладном уровне. Например, можно разрешить только HTTP-запросы GET /health, но запретить POST /admin.
На основе DNS-имен (toFQDNs): Правила могут ссылаться на DNS-имена внешних сервисов, что упрощает управление доступом к сторонним API, не привязываясь к IP-адресам.
Практические примеры гранулярной микросегментации
Микросегментация микросервисов (L3/L4)
Разрешить фронтенду общаться с бэкендом, а бэкенду — с базой данных:
# Политика, разрешающая доступ к базе данных только от бэкенда
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: allow-backend-to-database
spec:
endpointSelector:
matchLabels:
app: database
ingress:
- fromEndpoints:
- matchLabels:
app: backend
egress:
- toEntities:
- all
Гранулярная изоляция по HTTP-методам (L7)
Разрешить только чтение (GET) для сервиса:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "l7-rule-get-only"
spec:
endpointSelector:
matchLabels:
app: api-server
ingress:
- fromEndpoints:
- matchLabels:
app: api-client
toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http:
- method: "GET"
Глобальная изоляция и точечное разрешение
Можно скомбинировать кластерную политику для запрета всего трафика по умолчанию с именованными политиками, разрешающими только необходимые взаимодействия. Это классический подход Zero Trust.
Изоляция неймспейсов
Запретить трафик между неймспейсами:
apiVersion: cilium.io/v2
kind: CiliumClusterwideNetworkPolicy
metadata:
name: deny-cross-ns-traffic
spec:
endpointSelector: {}
ingress:
- fromEndpoints:
- matchLabels: {}
Дополнительные возможности:
- Идентификация на основе меток: Cilium оперирует не IP-адресами, а идентификаторами рабочих нагрузок, что критически важно в среде с короткоживущими подами.
- Наблюдаемость через Hubble: Для проверки и отладки политик микросегментации Cilium предоставляет Hubble, который визуализирует сетевые потоки и позволяет верифицировать, что трафик разрешен или заблокирован в соответствии с ожиданиями.
- Приоритет политик: Порядок правил не важен, они объединяются, однако Cilium позволяет явно задавать приоритеты для разрешения конфликтов.
QoS в Cilium: управление трафиком на уровне CNI
Cilium предоставляет три взаимодополняющих механизма для управления качеством обслуживания сетевого трафика непосредственно на уровне CNI:
1. Bandwidth Manager – аппаратно-программное ограничение полосы;
2. NetworkPolicy QoS – приоритизация доступа средствами политик;
3. DSCP‑маркировка – сквозная классификация пакетов во внешней сети.
Заметка
Все механизмы работают на базе eBPF и не требуют изменения кода приложений.
Bandwidth Manager
Назначение
EDT‑шейпинг (Earliest Departure Time) на eBPF, ограничивающий исходящую/входящую полосу подов и включающий поддержку алгоритма TCP BBR.
Активация
Для активации необходимо переключить bandwidthManager.enabled в true в конфигурации cilium
Важно
Для работы BBR необходим Bandwidth Manager.
Применение к подам
Укажите аннотации в спецификации пода:
metadata:
annotations:
kubernetes.io/egress-bandwidth: "10M" # исходящий лимит
kubernetes.io/ingress-bandwidth: "5M" # входящий лимит
Ограничение действует на интерфейсе пода и не влияет на маркировку за пределами узла.
NetworkPolicy QoS
Регулирует приоритеты доступа через расширенную модель политик, оперируя на L3, L4 и L7.
Ресурсы
-
CiliumNetworkPolicy– политики уровня namespace -
CiliumClusterwideNetworkPolicy– кластерные политики
Ключевые возможности
- Идентификация трафика по pod‑селекторам, namespace, FQDN, HTTP‑методам и т.д.
- Режимы применения:
default– разрешать, если не запрещено явноalways– всегда применять правилоnever– отключить политику
- Маркировка трафика на L3/L4 для последующей обработки другими компонентами (например, DSCP‑маркировкой в будущем).
Пример политики
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "priority-ingress"
spec:
endpointSelector:
matchLabels:
app: frontend
ingress:
- fromEndpoints:
- matchLabels:
app: backend
toPorts:
- ports:
- port: "8080"
protocol: TCP
egress:
- toEndpoints:
- matchLabels:
app: database
Политика автоматически применяет QoS‑правила к трафику между помеченными подам.
DSCP‑маркировка (экспериментальная)
Позволяет выставлять поле DSCP в заголовке IP на исходящем трафике из пода, обеспечивая сквозную приоритизацию во внешней сети.
Статус
Экспериментальная возможность, реализуемая через новые CRD. Включается флагом enable-qos и требует установки CR‑схем.
Необходимые ресурсы
1. QoSMechanism (администратор кластера) – регистрирует доступный механизм.
2. QoSClass (сетевой администратор) – описывает конкретный класс на базе механизма.
3. QoSPolicy (разработчик) – назначает классы подам.
Пример конфигурации
QoSMechanism
apiVersion: cilium.io/v1alpha1
kind: QoSMechanism
metadata:
name: dscp
spec:
type: DSCP
description: "DSCP tagging for egress traffic"
QoSClass
apiVersion: cilium.io/v1alpha1
kind: QoSClass
metadata:
name: voice
spec:
mechanismRef:
name: dscp
parameters:
value: 46 # Expedited Forwarding (EF)
QoSPolicy
apiVersion: cilium.io/v1alpha1
kind: QoSPolicy
metadata:
name: voip-qos
spec:
endpointSelector:
matchLabels:
app: asterisk
qosClasses:
- voice
После создания политики Cilium‑агент выставит DSCP 46 для всех исходящих IP‑пакетов подов с меткой app=asterisk.
Совместное использование
Все три механизма можно комбинировать:
- Bandwidth Manager ограничивает скорость локально;
- NetworkPolicy QoS задаёт правила доступа;
- DSCP‑маркировка передаёт приоритеты во внешнюю инфраструктуру.
Заметка
При обновлении конфигурации политик или аннотаций Cilium применяет изменения без перезапуска подов.