Tukamat

Tukamat

Алексей Баранович, 26 лет. DevOps-инженер с упором на автоматизацию, Kubernetes и домашние лаборатории. Техногик по призванию, строю инфраструктуру с нуля и в облаке.
На Пикабу
140 рейтинг 7 подписчиков 11 подписок 3 поста 1 в горячем
Награды:
5 лет на Пикабу
10

Cilium как универсальный компонент Kubernetes-инфраструктуры: от CNI до Service Mesh

Всем привет! На связи Алексей Баранович, сегодня я хочу вам рассказать о Cilium.

В современных Kubernetes-платформах стремление к упрощению архитектуры и снижению числа зависимостей становится всё более актуальным. Особенно это заметно при построении MVP-решений или управляемых платформ, где каждый дополнительный компонент — это не только рост сложности, но и увеличение поверхности для потенциальных сбоев и уязвимостей. В этом контексте Cilium выделяется как один из немногих проектов, способных заменить сразу несколько традиционных инструментов: CNI-плагин, Ingress-контроллер, Service Mesh и даже внешний LoadBalancer. Давайте разберёмся, как это работает и почему Cilium может стать единственным «сетевым» компонентом в вашем кластере.

Cilium как CNI: основа всего

Изначально Cilium позиционировался как высокопроизводительный CNI-плагин, использующий eBPF (extended Berkeley Packet Filter) вместо iptables или IPVS. Это даёт не только значительный прирост производительности, но и гибкость на уровне ядра Linux: политики сети, observability, балансировка трафика — всё это реализуется без перезаписи цепочек правил или установки дополнительных прокси.

Но Cilium быстро вырос за рамки CNI. Сегодня он предлагает полноценную платформу для сетевой и сервисной безопасности, объединяя в себе функциональность, которая раньше требовала развёртывания десятков отдельных компонентов.

Установка Cilium через Helm

Самый распространённый способ установки Cilium — через Helm. Сначала добавьте официальный репозиторий:

helm repo add cilium https://helm.cilium.io/

helm repo update

Затем установите с базовыми настройками (для большинства сред подойдёт):

helm install cilium cilium/cilium \

--namespace kube-system \

--set ipam.mode=kubernetes

Если вы хотите использовать собственный Pod CIDR (например, 10.224.0.0/13), как часто делают в on-prem:

helm install cilium cilium/cilium \

--namespace kube-system \

--set ipam.mode=cluster-pool \

--set ipam.operator.clusterPoolIPv4PodCIDRList="{10.224.0.0/13}" \

--set ipam.operator.clusterPoolIPv4MaskSize=22 \

--set ipv4NativeRoutingCIDR=10.224.0.0/13 \

--set routingMode=native \

--set autoDirectNodeRoutes=true

Эти параметры включают режим cluster-pool для IPAM и native routing через eBPF, что даёт максимальную производительность без kube-proxy.

Встроенный LoadBalancer без MetalLB или облачных провайдеров

Одна из самых болезненных тем в on-prem Kubernetes — отсутствие встроенного решения для внешнего LoadBalancer. Обычно приходится ставить MetalLB, использовать внешние балансировщики или обходиться NodePort.

Cilium решает эту проблему с помощью BGP-интеграции и DSR (Direct Server Return). Начиная с версии 1.13, Cilium поддерживает собственный L2 и BGP-режимы для сервисов типа LoadBalancer, что позволяет:

  • Назначать внешние IP-адреса сервисам без MetalLB.

  • Работать в bare-metal и виртуальных средах (включая VMware).

  • Использовать DSR для минимизации latency и снижения нагрузки на worker-ноды.

Чтобы включить встроенный LoadBalancer через Helm:

helm install cilium cilium/cilium \

--namespace kube-system \

--set loadBalancer.mode=dsr \

--set loadBalancer.acceleration=native \

--set loadBalancer.serviceTopology=true

Если вы используете BGP, добавьте:

--set loadBalancer.mode=bgp \

--set loadBalancer.bgp.announce=pool

И определите IP-пул в ConfigMap или через Helm-параметры, например:

--set loadBalancer.ipam.kubernetes.serviceIPBlocks="{192.168.10.0/24}"

Теперь любой Service с типом LoadBalancer автоматически получит IP из этого пула.

Gateway API: единая модель для Ingress и Egress

Традиционные Ingress-контроллеры (Nginx, Traefik, HAProxy) требуют отдельного развёртывания, настройки TLS, rate limiting, WAF и т.д. Cilium предлагает нативную поддержку Kubernetes Gateway API — современного стандарта управления трафиком, который заменяет устаревший Ingress API.

Чтобы включить Gateway API в Cilium, достаточно установить:

helm install cilium cilium/cilium \

--namespace kube-system \

--set gatewayAPI.enabled=true

После этого вы можете создавать ресурсы Gateway, HTTPRoute и другие. Пример Gateway:

apiVersion: gateway.networking.k8s.io/v1

kind: Gateway

metadata:

name: public-gateway

namespace: default

spec:

gatewayClassName: cilium

listeners:

- name: http

port: 80

protocol: HTTP

И HTTPRoute:

apiVersion: gateway.networking.k8s.io/v1

kind: HTTPRoute

metadata:

name: my-app-route

namespace: default

spec:

parentRefs:

- name: public-gateway

rules:

- matches:

- path:

type: PathPrefix

value: /api

backendRefs:

- name: my-app

port: 8080

Всё это работает без sidecar-прокси, благодаря eBPF и L7-парсингу на уровне ядра.

Service Mesh без Istio: Cilium + Envoy (опционально)

Istio — мощный, но тяжёлый Service Mesh. Он требует внедрения sidecar-прокси (Envoy) в каждый под, что увеличивает потребление ресурсов и усложняет отладку.

Cilium предлагает альтернативу: Cilium Service Mesh. Он реализует ключевые функции Service Mesh:

  • mTLS между сервисами (на основе SPIFFE/SPIRE или собственного PKI).

  • L7-наблюдаемость (HTTP, gRPC, Kafka).

  • Трассировка (через OpenTelemetry).

  • Retry, timeout, circuit breaking — через Envoy только при необходимости.

Чтобы включить базовые функции Service Mesh через Helm:

helm install cilium cilium/cilium \

--namespace kube-system \

--set l7Proxy=true \

--set hubble.enabled=true \

--set hubble.relay.enabled=true \

--set hubble.ui.enabled=true \

--set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}"

Для mTLS:

--set encryption.enabled=true \

--set encryption.type=wireguard

Или для TLS на уровне сервисов:

--set serviceMesh.enabled=true

Если нужны продвинутые L7-политики с Envoy:

--set envoy.enabled=true

При этом sidecar не обязателен: базовые функции (шифрование, политики, метрики) работают через eBPF. Envoy подключается лишь тогда, когда нужны продвинутые L7-фичи. Это даёт гибкость: вы получаете Service Mesh без накладных расходов там, где он не нужен.

Cluster Mesh: много-кластерная сеть «из коробки»

Если у вас несколько Kubernetes-кластеров (например, dev/stage/prod или multi-region), традиционно для их объединения требуются сложные решения: submariner, istio multi-cluster, custom overlay-сети.

Cilium предлагает Cluster Mesh — встроенную возможность объединять кластеры в единую логическую сеть:

  • Сервисы из одного кластера доступны в другом по DNS-имени.

  • Единые сетевые политики применяются кросс-кластерно.

  • Поддержка identity-based security (не привязка к IP!).

Для включения Cluster Mesh нужно:

  1. Установить Cilium в каждом кластере с уникальным cluster.id и cluster.name.

  2. Настроить общий etcd или использовать clustermesh-apiserver.

Пример установки с поддержкой Cluster Mesh:

helm install cilium cilium/cilium \

--namespace kube-system \

--set cluster.name=cluster-a \

--set cluster.id=1 \

--set clustermesh.enabled=true \

--set clustermesh.useAPIServer=true

Затем выполнить настройку связи между кластерами с помощью cilium-cli:

cilium clustermesh enable --context cluster-a

cilium clustermesh enable --context cluster-b

cilium clustermesh connect cluster-a cluster-b

После этого сервисы автоматически станут доступны через DNS вида <service>.<namespace>.svc.clusterset.local.

Заключение

Cilium — это не просто CNI. Это единая платформа для всего сетевого стека Kubernetes, которая позволяет отказаться от Nginx Ingress, MetalLB, Istio и даже внешних балансировщиков в большинстве сценариев. Для инженеров, строящих управляемые, безопасные и минималистичные Kubernetes-платформы, Cilium становится не просто выбором, а стратегическим решением.

Если вы стремитесь к «меньше компонентов — больше контроля», Cilium стоит рассмотреть уже сегодня.

Показать полностью
21

Talos OS — способ сделать Kubernetes безопасным

Привет, друзья! Меня зовут Алексей Баранович, и сегодня я хочу рассказать о системе, которая кардинально изменила мой подход к развёртыванию и управлению Kubernetes — Talos Linux. Это не просто «ещё одна лёгкая ОС». Talos — это операционная система, спроектированная исключительно для Kubernetes, с философией иммутабельности, безопасности и полной автоматизации. Давайте разберёмся, почему он действительно крут — и что он умеет «из коробки».

Talos Linux: Kubernetes-нативная ОС нового поколения

Talos Linux — это open-source операционная система, разработанная компанией Sidero Labs, которая полностью отказывается от традиционных концепций Linux-дистрибутивов. В Talos нет:

  • пакетного менеджера (apt, yum, dnf);

  • shell-доступа (даже для root);

  • SSH-сервера;

  • возможности редактировать файлы вручную после загрузки.


Всё управление происходит через единый gRPC API, защищённый mTLS, и утилиту командной строки talosctl.

Официальный сайт

Полная документация

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

  • Корневая файловая система Talos монтируется только для чтения. Это означает:

  • Невозможно случайно или злонамеренно изменить системные файлы.

  • Все обновления — атомарные: система загружается либо полностью новой версией, либо откатывается.

  • Минимальная поверхность атаки: в образе нет интерпретаторов (Python, Bash), ненужных библиотек или демонов.

Даже диагностика не требует shell: для просмотра логов, состояния сервисов или ядра используется утилита osctl, работающая поверх API.

Подробнее о модели безопасности

Декларативная конфигурация: один YAML на всё

Вся конфигурация Talos задаётся в одном файле — machine.yaml. Он описывает:

  • тип ноды (control plane или worker);

  • сетевые настройки;

  • параметры времени и сертификатов;

  • статические поды (если нужны);

  • настройки kubelet и kube-proxy.

Пример минимальной конфигурации control plane:

version: v1alpha1

machine:

type: controlplane

token: supersecret

ca:

crt: LS0t...

key: LS0t...

cluster:

id: my-cluster

controlPlane:

endpoint: https://192.168.1.10:6443

Этот файл передаётся ноде при загрузке (через cloud-init, ISO, PXE и т.д.) и не может быть изменён вручную — только через обновление через talosctl apply.

Примеры конфигураций

Сетевая подсистема: что есть «из коробки»?

Важный момент: Talos не включает CNI по умолчанию. Однако он нативно поддерживает Flannel как встроенный CNI-плагин. Это означает, что при указании:

cluster:

network:

cni:

name: flannel

Flannel будет автоматически развёрнут как часть bootstrap-процесса — без необходимости применять манифесты вручную.

Если вы хотите использовать другой CNI (Calico, Cilium, Weave и т.д.), его нужно устанавливать вручную после инициализации кластера, например, через kubectl apply или Helm. Talos не навязывает выбор — он даёт вам чистую, предсказуемую основу.

Поддерживаемые CNI

Полный жизненный цикл кластера — без ручного вмешательства

  • Talos управляет не только запуском Kubernetes, но и всем его жизненным циклом:

  • Инициализация кластера: talosctl bootstrap — инициирует etcd и control plane.

  • Обновление ОС и Kubernetes: через talosctl upgrade — с возможностью отката.

  • Резервное копирование etcd: talosctl etcd backup — создаёт снапшоты etcd.

  • Восстановление из бэкапа: talosctl etcd restore.

  • Безопасное удаление нод: talosctl reset — полностью очищает ноду.

Всё это работает без shell, без SSH, без риска человеческой ошибки.

Управление кластером

Локальная разработка и тестирование

Хотите попробовать Talos? За пару минут можно развернуть кластер на своём ноутбуке:

talosctl cluster create --nodes 3 --controlplanes 1

Это запустит виртуальные машины через QEMU или Docker (в зависимости от ОС), настроит сеть и выдаст готовый kubeconfig.

Локальные платформы

Почему Talos — это прорыв?

  • Предсказуемость: все ноды идентичны, конфигурация декларативна.

  • Безопасность: нет shell, нет пакетов, только необходимый минимум.

  • Автоматизация: всё через API, идеально для GitOps и CI/CD.

  • Сертификация: Talos прошёл официальные тесты CNCF Kubernetes Conformance.

Результаты conformance-тестов

Полезные ссылки

GitHub

Документация:

CLI-инструменты: talosctl

Сообщество в Slack:

Заключение

Talos Linux — это не просто инструмент, а новая парадигма управления инфраструктурой. Он убирает всё лишнее, оставляя только то, что нужно для надёжного и безопасного запуска Kubernetes. Если вы устали от «снежинок-серверов», ручных правок и нестабильных обновлений — пришло время попробовать Talos.

Удачи в автоматизации, и пусть ваши кластеры будут иммутабельными!

Показать полностью
7

Кабардинка 2024 июль

Короче решили мы съездить в Кабардинку этим летом. Нас предупреждали, что там пылает ротовирус. Но мы молодые и горячие, какой вирус, взяли каких-то лекарств от рвоты и диареи, и полетели.
Второй день отдыха мы по очереди, а иногда и нет, бегаем в туалет. Порой не знаешь какой стороной поворачиваться к унитазу, откуда польется
Конечно отдыху (и так довольно короткому) это не способствует
Если думаете съездить Геленджик, Анапа, Кабардинка, лучше подумайте ещё разок

Чукча не писатель, сильно тапками не кидайте

Отличная работа, все прочитано!