Cilium — это CNI‑плагин, который обеспечивает эффективную маршрутизацию трафика для сервисов приложения ELMA365 благодаря интеграции с технологией eBPF. В отличие от классических прокси, eBPF позволяет применять фильтры, балансировку и L7‑политики непосредственно в ядре Linux, не тратя ресурсы на копирование данных между ядром и приложением.
Это позволяет:
- исключить потери производительности, связанные с переключением контекстов;
- обеспечить линейное масштабирование при росте нагрузки;
- реализовать обработку пиковых нагрузок ELMA365 с минимальными задержками.
Установка плагина состоит из трёх этапов:
- Скачивание helm-чарта и конфигурационного файла.
- Заполнение конфигурационного файла.
- Установка с помощью helm в Kubernetes-кластер.
начало внимание
Если вы ранее использовали другой CNI‑плагин, перед установкой Cilium полностью удалите его, а также компонент kube-proxy, чтобы избежать конфликтов.
конец внимание
Шаг 1. Скачать helm-чарт и конфигурационный файл
Для установки через интернет получите конфигурационный файл values-cilium.yaml, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/cilium > values-cilium.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
- На компьютере с доступом в интернет скачайте архив актуальной версии (latest) чарта cilium, выполнив следующую команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm pull elma365/cilium
- Скопируйте полученный архив чарта cilium-X.Y.Z.tgz на сервер, где будет выполняться установка.
- Распакуйте чарт cilium-X.Y.Z.tgz и создайте копию конфигурационного файла values.yaml с названием values-cilium.yaml:
tar -xf cilium-X.Y.Z.tgz
cp cilium/values.yaml values-cilium.yaml
|
Шаг 2. Заполнить конфигурационный файл
Задайте настройки для установки Cilium в конфигурационном файле values-cilium.yaml.
Важно: проверьте, что в параметре url: http://kube-system-kube-prometheus-prometheus.kube-system.svc указан путь к вашему сервису Prometheus.
Пример содержания файла values-cilium.yaml
## Настройки cilium
cilium:
# Отключить L2-объявления (Advertisement) сервисов
l2announcements:
enabled: false
## Хост Kubernetes API (пусто = автоопределение)
k8sServiceHost: ""
k8sServicePort: "6443"
## Включить поддержку Kubernetes Gateway API
gatewayAPI:
enabled: false
## Использовать hostNetwork для Gateway (иначе CNI) необходимо расскомментировать envoy.securityContext.capabilities
hostNetwork:
enabled: false
## Автоматически генерировать TLS-сертификаты для внутреннего взаимодействия
certgen:
generateCA: true
## Hubble — наблюдаемость сети (eBPF)
hubble:
metrics:
## Какие метрики собирать
enabled: [dns,drop,tcp,flow,icmp,http]
relay:
enabled: false
## Включение Hubble UI
ui:
enabled: false
backend:
image:
## IP Address Management — управление IP-адресами
ipam:
## Режим: пул IP для всего кластера
mode: "cluster-pool"
operator:
clusterPoolIPv4PodCIDRList: ["10.0.0.0/8"]
clusterPoolIPv4MaskSize: 24
clusterPoolIPv6PodCIDRList: ["fd00::/104"]
clusterPoolIPv6MaskSize: 120
## Поддержка диапазонов
ipv4:
enabled: true
ipv6:
enabled: false
## Полная замена kube-proxy на eBPF (включая kube-proxy)
kubeProxyReplacement: "true"
## Включить L7 прокси (HTTP/gRPC через Envoy)
l7Proxy: true
## Режим работы L7 прокси
loadBalancer:
l7:
backend: envoy
## Включить Envoy внутри Cilium
envoy:
enabled: false
## При включенном hostNetwork.enabled=true, раскомметировать securityContext
# securityContext:
# capabilities:
# keepCapNetBindService: true
# envoy: [NET_BIND_SERVICE,BPF,SYS_ADMIN,NET_ADMIN,NET_RAW]
## Cilium Operator — управление кластером
operator:
enabled: true
|
Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет
Для подключения к приватному registry:
- Скачайте образы ELMA365 и загрузите их в локальный реестр образов. Подробнее читайте в статье «Загрузка образов ELMA365».
- В файле values-cilium.yaml:
- в параметре image.repository — задайте путь к приватному registry в формате registry.example.com;
- в параметре imagePullSecrets — укажите наименование секрета с правами доступа к приватному registry. Он должен быть создан вручную и зашифрован в Base64.
cilium:
## параметры подключения к приватному registry
image:
repository: "registry.example.com/docker/addons/cilium/cilium"
tag: "v1.19.3"
useDigest: false
## секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64
imagePullSecrets: []
## На каких узлах запускать Cilium
nodeSelector:
kubernetes.io/os: linux
tolerations:
- operator: Exists
certgen:
image:
## параметры подключения к приватному registry
repository: "registry.example.com/docker/addons/cilium/certgen"
tag: "v0.4.1"
useDigest: false
## На каких узлах запускать Cilium
nodeSelector: {}
tolerations: []
hubble:
ui:
backend:
image:
## параметры подключения к приватному registry
repository: "registry.example.com/docker/addons/cilium/hubble-ui-backend"
tag: "v0.13.3"
useDigest: false
frontend:
image:
## параметры подключения к приватному registry
repository: "registry.example.com/docker/addons/cilium/hubble-ui"
tag: "v0.13.3"
useDigest: false
## На каких узлах запускать Cilium
nodeSelector:
kubernetes.io/os: linux
tolerations: []
operator:
image:
## параметры подключения к приватному registry
repository: "registry.example.com/docker/addons/cilium/operator"
tag: "v1.19.3"
## На каких узлах запускать Cilium
nodeSelector:
kubernetes.io/os: linux
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: Exists
- key: "node-role.kubernetes.io/master
operator: Exists
- key: "node.kubernetes.io/not-ready"
operator: Exists
- key: "node.cloudprovider.kubernetes.io/uninitialized"
operator: Exists
|
Шаг 3. Установить чарт cilium в Kubernetes-кластер
C помощью helm установите чарт cilium в namespace kube-system:
- для установки через интернет выполните команду:
helm upgrade --install -n kube-system cilium elma365/cilium -f values-cilium.yaml
- для установки в закрытом контуре без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:
helm upgrade --install cilium ./cilium -f values-cilium.yaml -n kube-system
Удалить чарт Cilium в Kubernetes-кластере
Чтобы удалить чарт cilium в namespace kube-system, выполните команду:
helm uninstall -n kube-system cilium
Использовать Hubble для визуализации кластеров
Hubble — это инструмент для наблюдения за сетями, встроенный в Cilium, который предоставляет карту сервисов Kubernetes-кластера. Hubble использует возможности eBPF‑программ Cilium, поэтому собирает данные о сетевых потоках без существенной затраты ресурсов.
Для визуализации и фильтрации потоков данных используется веб-интерфейс Hubble UI. При развёртывании приложений в нём автоматически строится диаграмма связей и зависимостей между сервисами на уровнях L3, L4 и L7.
Hubble можно использовать для:
- отладки сетевых проблем;
- проверки сетевых политик;
- анализа поведения сервисов;
- диагностики ошибок, например, при обработке запросов.
Чтобы открыть Hubble UI в браузере:
- Настройте переадресацию портов на сервис hubble-ui с помощью команды:
kubectl port-forward -n kube-system svc/hubble-ui 8080:80 --address 0.0.0.0
- Перейдите в веб-интерфейс по адресу http://<node_ip>:8080/.