Cilium-haegress-operator#

Cilium-haegress-operator – это оператор, предназначенный для обеспечения высокой доступности исходящего трафика (Egress) в кластерах, использующих сетевое решение Cilium. В стандартной конфигурации ресурс CiliumEgressGatewayPolicy не поддерживает автоматическое перемещение Egress IP между узлами в случае сбоя, что создает единую точку отказа. Данный оператор решает эту проблему, создавая виртуальный IP-адрес, который автоматически мигрирует между узлами, обеспечивая бесперебойный исходящий трафик для выбранных подов.

Основные задачи и возможности
  • Обеспечение высокой доступности исходящего трафика: Cilium-haegress-operator позволяет реализовать отказоустойчивый Egress Gateway, автоматически перемещая виртуальный IP-адрес на другой узел в случае падения текущего.

  • Интеграция с Kube-vip: оператор использует kube-vip в качестве менеджера плавающих IP-адресов, что гарантирует быстрое и надежное переключение при сбоях узлов без ручного вмешательства.

  • Автоматическое управление политиками: оператор динамически обновляет CiliumEgressGatewayPolicy, привязывая его к узлу, на котором в данный момент активен виртуальный IP-адрес, и поддерживает постоянную синхронизацию состояния всех связанных объектов (при удалении одного из них оператор воссоздаст его).

Основные компоненты Cilium-haegress-operator:

  • Operator Controller: разворачивается как Deployment и отслеживает аннотации сервисов, создаваемых kube-vip (например, kube-vip.io/vipHost), и синхронизирует состояние CiliumEgressGatewayPolicy и Service.

  • **Kube-vip**: внешний компонент, который управляет назначением и перемещением виртуального IP-адреса между узлами кластера, помечая активный узел соответствующими аннотациями.

Конфигурация values#

Значения можно переопределить через редактирование инструмента с именем cilium-haegress-operator и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».

replicaCount – количество реплик#

Параметр

Описание

Значение по умолчанию

replicaCount

Количество реплик pod инструмента

1

image – параметры контейнерного образа#

Параметр

Описание

Значение по умолчанию

image.repository

Путь к Docker-образу

{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-cilium-haegress-operator/cilium-haegress-operator

image.pullPolicy

Политика загрузки образа.
Возможные значения: Always, IfNotPresent, Never

IfNotPresent

image.tag

Тег образа контейнера

"0.3.1"

logLevel – уровень журналирования#

Параметр

Описание

Значение по умолчанию

logLevel

Уровень журналирования.
Возможные значения: debug, info, error

"info"

logFormat – формат журналирования#

Параметр

Описание

Значение по умолчанию

logFormat

Формат вывода логов.
Возможные значения: text, json

"json"

imagePullSecrets – Secret для загрузки образов#

Параметр

Описание

Значение по умолчанию

imagePullSecrets

Список Secret для загрузки образа контейнера из приватных реестров

[]

nameOverride – переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

nameOverride

Переопределение базового имени ресурсов чарта для генерации имен

""

fullnameOverride – полное переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

fullnameOverride

Полное переопределение имени для всех создаваемых ресурсов чарта

""

serviceAccount – настройки сервисного аккаунта#

Параметр

Описание

Значение по умолчанию

serviceAccount.create

Включение создания ServiceAccount

true

serviceAccount.automount

Автоматическое монтирование учетных данных API ServiceAccount

true

serviceAccount.annotations

Аннотации, добавляемые ко всем создаваемым ресурсам

{}

serviceAccount.name

Имя ServiceAccount; при пустом значении и create: true генерируется из шаблона fullname

""

rbac – настройки RBAC (управление доступом на основе ролей)#

Параметр

Описание

Значение по умолчанию

rbac.create

Активация автоматического создания ресурсов RBAC

true

autoscaling – настройки автомасштабирования#

Параметр

Описание

Значение по умолчанию

autoscaling.enabled

Включение автомасштабирования

false

autoscaling.minReplicas

Минимальное количество реплик при автоматическом масштабировании

1

autoscaling.maxReplicas

Максимальное количество реплик при автоматическом масштабировании

3

autoscaling.targetCPU

Целевая загрузка CPU в процентах

80

autoscaling.targetMemory

Целевая загрузка памяти в процентах

80

podAnnotations – аннотации pod#

Параметр

Описание

Значение по умолчанию

podAnnotations

Аннотации для pod.
Пример конфигурации:

prometheus.io/scrape: "true"
prometheus.io/port: "8080"
prometheus.io/path: "/metrics"

{}

podLabels – метки pod#

Параметр

Описание

Значение по умолчанию

podLabels

Метки для pod

{}

podSecurityContext – параметры контекста безопасности pod#

Параметр

Описание

Значение по умолчанию

podSecurityContext

Параметры контекста безопасности pod.
Пример конфигурации:

fsGroup: 2000

{}

securityContext – контекст безопасности контейнера#

Параметр

Описание

Значение по умолчанию

securityContext

Контекст безопасности на уровне контейнера.
Пример конфигурации:

capabilities:
  drop:
    - ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000

{}

resources – запросы и ограничения ресурсов контейнера#

Параметр

Описание

Значение по умолчанию

resources.limits.cpu

Ограничение ресурсов CPU для контейнера

500m

resources.limits.memory

Ограничение ресурсов памяти для контейнера

128Mi

resources.requests.cpu

Запрашиваемые ресурсы CPU для контейнера

10m

resources.requests.memory

Запрашиваемые ресурсы памяти для контейнера

128Mi

volumes – дополнительные тома (Volume)#

Параметр

Описание

Значение по умолчанию

volumes

Дополнительные тома (Volume) для pod.
Пример конфигурации:

- name: foo
  secret:
    secretName: mysecret
    optional: false

[]

volumeMounts – дополнительные точки монтирования томов (VolumeMounts)#

Параметр

Описание

Значение по умолчанию

volumeMounts

Дополнительные точки монтирования томов (VolumeMount).
Пример конфигурации:

- name: foo
  mountPath: "/etc/foo"
  readOnly: true

[]

nodeSelector – селектор узлов для планирования pod#

Параметр

Описание

Значение по умолчанию

nodeSelector

Селектор узлов для планирования pod

{}

tolerations – параметры Toleration для pod#

Параметр

Описание

Значение по умолчанию

tolerations

Toleration для размещения pod на узлах с ограничениями (taints)

[]

affinity – правила привязки (affinity и anti-affinity) pod к узлам#

Параметр

Описание

Значение по умолчанию

affinity.nodeAffinity

Правила для привязки pod к узлам, обладающим определенными метками

requiredDuringSchedulingIgnoredDuringExecution:
  nodeSelectorTerms:
    - matchExpressions:
        - key: kubernetes.io/os
          operator: In
          values:
            - linux