Ingress-nginx#

Ingress-nginx — контроллер Ingress, построенный на базе веб-сервера Nginx. Предназначен для управления входящим HTTP(S)-трафиком и его маршрутизации к целевым сервисам внутри кластера. Реализует ресурс Ingress Kubernetes API, предоставляя возможности балансировки нагрузки, терминации TLS, гибкой маршрутизации и ограничения трафика.

Основные задачи и возможности
  • Маршрутизация трафика: Позволяет направлять запросы по доменам (host) и путям URL (path) на разные сервисы.

  • Поддержка HTTPS (TLS-терминация): Обрабатывает зашифрованный трафик, используя сертификаты из Kubernetes Secret. Поддерживает автоматическую переадресацию с HTTP на HTTPS.

  • Балансировка нагрузки: Распределяет трафик между pod сервисов с возможностью выбора алгоритма балансировки.

  • Гибкая конфигурация через аннотации: Позволяет настраивать параметры NGINX (время ожидания, переписывание путей, заголовки и т.д.) прямо в манифестах Ingress.

  • Интеграция с Cert-manager: Автоматически работает с Cert-manager для получения и обновления TLS-сертификатов (например, Let’s Encrypt).

  • Работа с внешними IP-адресами: Может использоваться вместе с MetalLB в локальных кластерах для выделения внешних IP.

  • Поддержка современных протоколов: Включает поддержку HTTP/2, WebSocket, gRPC и других.

Примечание

Инструмент Ingress-nginx является частью Ingress-controller и устанавливается по умолчанию в процессе установки всего кластера DropApp.

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

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

namespaceOverride - переопределение пространства имен для ресурсов#

Параметр

Описание

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

namespaceOverride

Переопределение пространства имен для развертывания. По умолчанию используется значение .Release.Namespace

""

commonLabels - общие метки для всех ресурсов#

Параметр

Описание

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

commonLabels

Общие метки для всех создаваемых ресурсов

{}

controller - настройки контроллера Ingress-nginx#

Параметр

Описание

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

controller.name

Имя компонента контроллера

controller

controller.enableAnnotationValidations

Включение валидации аннотаций

false

controller.image.chroot

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

false

controller.image.registry

Реестр образов

'{{ .Values.global.image.registry }}'

controller.image.image

Имя образа контроллера

dapp-ingress-nginx/controller

controller.image.repository

Полный путь к репозиторию образа

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-ingress-nginx/controller'

controller.image.tag

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

"v1.13.9"

controller.image.digest

Дайджест образа

""

controller.image.digestChroot

Дайджест образа для chroot

""

controller.image.pullPolicy

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

IfNotPresent

controller.image.runAsNonRoot

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

true

controller.image.runAsUser

UID пользователя для запуска

101

controller.image.runAsGroup

GID группы контейнера

82

controller.image.allowPrivilegeEscalation

Разрешение на эскалацию привилегий

false

controller.image.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

controller.image.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

false

controller.containerName

Имя контейнера контроллера

controller

controller.containerPort.http

HTTP-порт, на котором контроллер ожидает соединения

80

controller.containerPort.https

HTTPS-порт, на котором контроллер ожидает соединения

443

controller.config

Глобальная конфигурация, передаваемая в ConfigMap контроллера. Значения могут содержать шаблоны Helm

{}

controller.configAnnotations

Аннотации для ConfigMap конфигурации контроллера

{}

controller.proxySetHeaders

Пользовательские заголовки, добавляемые перед отправкой трафика на бэкенды

{}

controller.addHeaders

Пользовательские заголовки, добавляемые в ответ перед отправкой клиенту

{}

controller.dnsConfig

Конфигурация DNS для pod

{}

controller.hostAliases

Псевдонимы хостов в pod.
Пример конфигурации:

hostAliases: []
  - ip: 127.0.0.1
    hostnames:
    - foo.local
    - bar.local
  - ip: 10.1.2.3
    hostnames:
    - foo.remote
    - bar.remote

[]

controller.hostname

Пользовательское имя хоста для pod

{}

controller.dnsPolicy

Политика разрешения DNS.
Возможные значения: ClusterFirst или ClusterFirstWithHostNet (при hostNetwork: true)

ClusterFirst

controller.runtimeClassName

Имя RuntimeClass для запуска pod контроллера

""

controller.reportNodeInternalIp

Использование внутреннего IP-адреса узла при обновлении статуса (актуально для bare-metal установок)

false

controller.watchIngressWithoutClass

Обработка Ingress-объектов без указанной аннотации ingress.class или поля ingressClassName

false

controller.ingressClassByName

Обработка IngressClass по имени (в дополнение к spec.controller)

false

controller.enableTopologyAwareRouting

Включение топологически-осведомленной маршрутизации (совместно с аннотацией service.kubernetes.io/topology-mode="auto")

false

controller.disableLeaderElection

Отключение механизма выбора лидера (leader election) для контроллера

false

controller.electionTTL

Время удержания лидерства (TTL), например 15s, 10m, 1h (по умолчанию: 30s)

""

controller.allowSnippetAnnotations

Разрешение использования аннотаций с конфигурационными сниппетами (snippet annotations)

false

controller.hostNetwork

Использование сетевого стека хоста (hostNetwork). Требуется для некоторых CNI (например, при установке через kubeadm)

false

controller.hostPort.enabled

Включение проброса портов хоста

false

controller.hostPort.ports.http

HTTP-порт хоста

80

controller.hostPort.ports.https

HTTPS-порт хоста

443

controller.networkPolicy.enabled

Включение создания NetworkPolicy для контроллера

false

controller.electionID

Идентификатор для механизма выбора лидера при обновлении статуса. По умолчанию используется имя контроллера с суффиксом leader.

""

controller.ingressClassResource.name

Имя ресурса IngressClass

nginx

controller.ingressClassResource.enabled

Создание ресурса IngressClass

true

controller.ingressClassResource.default

Назначение данного IngressClass ресурсом по умолчанию. Ingress-объекты без явно указанного ingressClassName будут использовать этот класс

true

controller.ingressClassResource.annotations

Аннотации для ресурса IngressClass

{}

controller.ingressClassResource.controllerValue

Значение контроллера для IngressClass (соответствует аргументу --controller-class)

k8s.io/ingress-nginx

controller.ingressClassResource.aliases

Список псевдонимов ресурса IngressClass. Для каждого псевдонима создается копия ресурса с идентичными настройками и соответствующим именем.
Пример конфигурации:

- nginx-alias-1
- nginx-alias-2

[]

controller.ingressClassResource.parameters

Ссылка на пользовательский ресурс с дополнительными параметрами контроллера.
Пример конфигурации:

apiGroup: k8s.example.com
kind: IngressParameters
name: external-lb

{}

controller.ingressClass

Класс Ingress для обеспечения обратной совместимости с устаревшей аннотацией kubernetes.io/ingress.class

nginx

controller.podLabels

Метки для pod контроллера

{}

controller.podSecurityContext.runAsGroup

GID группы pod

10001

controller.podSecurityContext.runAsNonRoot

Запуск pod от имени пользователя без административных полномочий

true

controller.podSecurityContext.runAsUser

UID пользователя для запуска

10001

controller.sysctls

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

"net.core.somaxconn": "8192"

{}

controller.containerSecurityContext.allowPrivilegeEscalation

Разрешение на эскалацию привилегий контейнера

false

controller.containerSecurityContext.capabilities.drop

Список capabilities для удаления

- ALL

controller.containerSecurityContext.capabilities.add

Список добавляемых мандатов (capabilities)

- NET_BIND_SERVICE

controller.containerSecurityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы контейнера в режиме «только для чтения»

false

controller.containerSecurityContext.runAsNonRoot

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

true

controller.containerSecurityContext.runAsUser

UID пользователя внутри контейнера

101

controller.containerSecurityContext.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

controller.publishService.enabled

Публикация адреса Service в статусе Ingress-объектов

true

controller.publishService.pathOverride

Переопределение пути к Service для обновления статуса (формат: <namespace>/<service_name>)

""

controller.scope.enabled

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

false

controller.scope.namespace

Пространство имен, в котором ограничивается работа контроллера. По умолчанию: $(POD_NAMESPACE)

""

controller.scope.namespaceSelector

Селектор пространства имен по меткам (применяется при scope.enabled: false, формат: foo=bar)

""

controller.configMapNamespace

Пространство имен для ConfigMap с конфигурацией Nginx. По умолчанию: $(POD_NAMESPACE)

""

controller.tcp.configMapNamespace

Пространство имен для ConfigMap с конфигурацией TCP-сервисов. По умолчанию: $(POD_NAMESPACE)

""

controller.tcp.annotations

Аннотации для ConfigMap TCP-сервисов

{}

controller.udp.configMapNamespace

Пространство имен для ConfigMap с конфигурацией UDP-сервисов. По умолчанию: $(POD_NAMESPACE)

""

controller.udp.annotations

Аннотации для ConfigMap UDP-сервисов

{}

controller.maxmindLicenseKey

Лицензионный ключ MaxMind для загрузки баз данных GeoLite2.

""

controller.extraArgs

Дополнительные аргументы командной строки

enable-metrics: true
enable-ssl-passthrough: true

controller.extraEnvs

Дополнительные переменные окружения.
Пример конфигурации:

- name: FOO
  valueFrom:
    secretKeyRef:
      key: FOO
      name: secret-resource

[]

controller.kind

Тип ресурса для развертывания контроллера.
Возможные значения: Deployment или DaemonSet

Deployment

controller.annotations

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

keel.sh/pollSchedule: "@every 60m"

{}

controller.labels

Метки для ресурсов контроллера и связанных объектов (при отсутствии отдельных настроек меток).
Пример конфигурации:

keel.sh/policy: patch
keel.sh/trigger: poll

{}

controller.updateStrategy

Стратегия обновления ресурса Deployment или DaemonSet.
Пример конфигурации:

rollingUpdate:
  maxUnavailable: 1
type: RollingUpdate

{}

controller.progressDeadlineSeconds

Время ожидания прогресса Deployment до фиксации ошибки развертывания

0

controller.minReadySeconds

Минимальное время, в течение которого pod должен находиться в состоянии готовности, прежде чем будет считаться доступным

0

controller.tolerations

Toleration для размещения pod на узлах с ограничениями (taints).
Пример конфигурации:

- key: "key"
  operator: "Equal|Exists"
  value: "value"
  effect: "NoSchedule|PreferNoSchedule|NoExecute"

[]

controller.affinity

Настройки правил привязки pod к узлам.
Пример конфигурации:

podAntiAffinity:
  preferredDuringSchedulingIgnoredDuringExecution:
  - weight: 100
    podAffinityTerm:
      labelSelector:
        matchExpressions:
        - key: app.kubernetes.io/name
          operator: In
          values:
          - '{{ include "ingress-nginx.name" . }}'
        - key: app.kubernetes.io/instance
          operator: In
          values:
          - '{{ .Release.Name }}'
        - key: app.kubernetes.io/component
          operator: In
          values:
          - controller
      topologyKey: kubernetes.io/hostname

{}

controller.topologySpreadConstraints

Ограничения топологии для равномерного распределения pod по зонам доступности и узлам.
Пример конфигурации:

- labelSelector:
    matchLabels:
      app.kubernetes.io/name: '{{ include "ingress-nginx.name" . }}'
      app.kubernetes.io/instance: '{{ .Release.Name }}'
      app.kubernetes.io/component: controller
  matchLabelKeys:
  - pod-template-hash
  topologyKey: topology.kubernetes.io/zone
  maxSkew: 1
  whenUnsatisfiable: ScheduleAnyway

[]

controller.terminationGracePeriodSeconds

Время, отводимое на корректное завершение работы pod (включая дренирование активных соединений, до 5 минут)

300

controller.nodeSelector

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

kubernetes.io/os: linux

controller.livenessProbe.httpGet.path

HTTP-путь для проверки работоспособности

"/healthz"

controller.livenessProbe.httpGet.port

Порт для проверки работоспособности

10254

controller.livenessProbe.httpGet.scheme

Схема протокола для проверки работоспособности

HTTP

controller.livenessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой работоспособности

10

controller.livenessProbe.periodSeconds

Интервал в секундах между проверками работоспособности

10

controller.livenessProbe.timeoutSeconds

Тайм-аут ожидания ответа при проверке работоспособности

1

controller.livenessProbe.successThreshold

Количество успешных попыток для подтверждения работоспособности

1

controller.livenessProbe.failureThreshold

Количество неудачных попыток до перевода контейнера в статус NotReady

5

controller.readinessProbe.httpGet.path

HTTP-путь для проверки готовности

"/healthz"

controller.readinessProbe.httpGet.port

Порт для проверки готовности

10254

controller.readinessProbe.httpGet.scheme

Схема протокола для проверки готовности

HTTP

controller.readinessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой готовности

10

controller.readinessProbe.periodSeconds

Интервал в секундах между проверками готовности

10

controller.readinessProbe.timeoutSeconds

Тайм-аут ожидания ответа при проверке готовности

1

controller.readinessProbe.successThreshold

Количество успешных попыток для подтверждения готовности

1

controller.readinessProbe.failureThreshold

Количество неудачных попыток до перевода контроллера в статус NotReady

3

controller.healthCheckPath

Путь эндпоинта для проверки состояния

"/healthz"

controller.healthCheckHost

Адрес привязки эндпоинта для проверки состояния. Рекомендуется указывать внутренний IP-адрес узла при использовании hostNetwork: true

""

controller.podAnnotations

Аннотации для pod контроллера

{}

controller.replicaCount

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

1

controller.minAvailable

Минимальное количество доступных pod, гарантируемое PodDisruptionBudget

1

controller.unhealthyPodEvictionPolicy

Политика высвобождения (eviction) для неработоспособных pod, защищенных PodDisruptionBudget.

""

controller.resources.requests.cpu

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

100m

controller.resources.requests.memory

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

90Mi

controller.autoscaling.enabled

Включение горизонтального автомасштабирования (HPA)

false

controller.autoscaling.annotations

Аннотации для ресурса HPA

{}

controller.autoscaling.minReplicas

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

1

controller.autoscaling.maxReplicas

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

11

controller.autoscaling.targetCPUUtilizationPercentage

Целевой уровень утилизации CPU

50

controller.autoscaling.targetMemoryUtilizationPercentage

Целевой уровень утилизации памяти

50

controller.autoscaling.behavior

Поведение масштабирования HPA (параметры стабилизации и политики).
Пример конфигурации:

scaleDown:
  stabilizationWindowSeconds: 300
  policies:
  - type: Pods
    value: 1
    periodSeconds: 180
scaleUp:
  stabilizationWindowSeconds: 300
  policies:
  - type: Pods
    value: 2
    periodSeconds: 60

{}

controller.autoscalingTemplate

Шаблоны пользовательских метрик для автомасштабирования.
Пример конфигурации:

- type: Pods
  pods:
    metric:
      name: nginx_ingress_controller_nginx_process_requests_total
    target:
      type: AverageValue
      averageValue: 10000m

[]

controller.keda.apiVersion

Версия API KEDA

"keda.sh/v1alpha1"

controller.keda.enabled

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

false

controller.keda.minReplicas

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

1

controller.keda.maxReplicas

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

11

controller.keda.pollingInterval

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

30

controller.keda.cooldownPeriod

Период охлаждения перед масштабированием

300

controller.keda.restoreToOriginalReplicaCount

Восстановление исходного количества реплик после отключения KEDA

false

controller.keda.scaledObject.annotations

Аннотации для ресурса ScaledObject

{}

controller.keda.triggers

Триггеры масштабирования KEDA.
Пример конфигурации:

- type: prometheus
  metadata:
    serverAddress: http://<prometheus-host>:9090
    metricName: http_requests_total
    threshold: '100'
    query: sum(rate(http_requests_total{deployment="my-deployment"}[2m]))

[]

controller.keda.behavior

Поведение масштабирования KEDA.
Пример конфигурации:

scaleDown:
  stabilizationWindowSeconds: 300
  policies:
  - type: Pods
    value: 1
    periodSeconds: 180
scaleUp:
  stabilizationWindowSeconds: 300
  policies:
  - type: Pods
    value: 2
    periodSeconds: 60

{}

controller.enableMimalloc

Использование альтернативного аллокатора памяти mimalloc вместо стандартного malloc для повышения производительности

true

controller.customTemplate.configMapName

Имя ConfigMap, содержащего пользовательский шаблон Nginx

""

controller.customTemplate.configMapKey

Ключ в ConfigMap, содержащий данные пользовательского шаблона

""

controller.service.enabled

Создание основного Service контроллера (не влияет на создание «мутирующего» и валидирующего вебхуков и Service для метрик)

true

controller.service.external.enabled

Создание внешнего Service контроллера (полезно для сценариев, требующих только внутреннего доступа)

true

controller.service.external.labels

Метки для внешнего Service контроллера

{}

controller.service.annotations

Аннотации для внешнего Service контроллера

{}

controller.service.labels

Метки, применяемые к обоим Service (внешнему и внутреннему) контроллера

{}

controller.service.type

Тип внешнего Service контроллера

LoadBalancer

controller.service.clusterIP

Статический clusterIP для внешнего Service (значение неизменяемо после создания)

""

controller.service.clusterIPs

Список статических clusterIP для внешнего Service (значение неизменяемо после создания)

[]

controller.service.externalIPs

Список внешних IP-адресов, ассоциированных с внешним Service

[]

controller.service.loadBalancerIP

Устаревший параметр для задания статического IP-адреса внешнего балансировщика нагрузки

""

controller.service.loadBalancerSourceRanges

Список CIDR-диапазонов, которым разрешен доступ к внешнему Service

[]

controller.service.loadBalancerClass

Класс балансировщика нагрузки для внешнего Service

""

controller.service.externalTrafficPolicy

Политика обработки внешнего трафика. Значение Local сохраняет исходный IP-адрес клиента

"Local"

controller.service.sessionAffinity

Режим сессионной привязки (session affinity) внешнего Service.
Возможные значения: None, ClientIP

""

controller.service.trafficDistribution

Политика распределения трафика внешнего Service, например PreferClose

""

controller.service.ipFamilyPolicy

Политика IP-семейств для внешнего Service.
Возможные значения: SingleStack, PreferDualStack, RequireDualStack.

SingleStack

controller.service.ipFamilies

Список поддерживаемых IP-семейств для внешнего Service

- IPv4

controller.service.enableHttp

Включение HTTP-порта в Service контроллера

true

controller.service.enableHttps

Включение HTTPS-порта в Service контроллера

true

controller.service.ports.http

Номер порта, который Service будет использовать для приема HTTP-трафика

80

controller.service.ports.https

Номер порта, который Service будет использовать для приема HTTPS-трафика

443

controller.service.targetPorts.http

Порт контейнера, на который Service направляет HTTP-трафик

http

controller.service.targetPorts.https

Порт контейнера, на который Service направляет HTTPS-трафик

https

controller.service.appProtocol

Указание appProtocol для HTTP- и HTTPS-портов Service

true

controller.service.nodePorts.http

NodePort для HTTP-порта Service. При пустом значении порт выделяется автоматически

""

controller.service.nodePorts.https

NodePort для HTTPS-порта Service. При пустом значении порт выделяется автоматически

""

controller.service.nodePorts.tcp

Сопоставление TCP-портов Service и NodePort.
Пример конфигурации:

tcp:
  8080: 30080

{}

controller.service.nodePorts.udp

Сопоставление UDP-портов Service и NodePort.
Пример конфигурации:

udp:
  53: 30053

{}

controller.service.internal.enabled

Создание внутреннего Service контроллера. Требует обязательной настройки controller.service.internal.annotations

false

controller.service.internal.labels

Метки для внутреннего Service контроллера

{}

controller.service.internal.annotations

Аннотации для внутреннего Service контроллера (обязательны для корректной работы в облачных средах)

{}

controller.service.internal.type

Тип внутреннего Service. По умолчанию наследуется от controller.service.type

""

controller.service.internal.clusterIP

Статический clusterIP для внутреннего Service (значение неизменяемо после создания).

""

controller.service.internal.clusterIPs

Статический clusterIP для внутреннего Service (значение неизменяемо после создания).

[]

controller.service.internal.externalIPs

Список внешних IP-адресов внутреннего Service

[]

controller.service.internal.loadBalancerIP

Устаревший параметр для задания статического IP-адреса внутреннего балансировщика нагрузки

""

controller.service.internal.loadBalancerSourceRanges

Список CIDR-диапазонов, которым разрешен доступ к внутреннему Service

[]

controller.service.internal.loadBalancerClass

Класс балансировщика нагрузки для внутреннего Service

""

controller.service.internal.externalTrafficPolicy

Политика обработки внешнего трафика для внутреннего Service

""

controller.service.internal.sessionAffinity

Режим сессионной привязки внутреннего Service.
Возможные значения: None, ClientIP

""

controller.service.internal.trafficDistribution

Политика распределения трафика внутреннего Service (например, PreferClose)

""

controller.service.internal.ipFamilyPolicy

Политика IP-семейств для внутреннего Service.
Возможные значения: SingleStack, PreferDualStack, RequireDualStack.

SingleStack

controller.service.internal.ipFamilies

Список поддерживаемых IP-семейств для внутреннего Service

- IPv4

controller.service.internal.ports

Порты публикации внутреннего Service. По умолчанию наследуются от внешнего Service.
Пример конфигурации:

http: 80
https: 443

{}

controller.service.internal.targetPorts

Целевые порты контейнеров для внутреннего Service. По умолчанию наследуются от внешнего Service, но могут быть переопределены.
Пример конфигурации:

http: http
https: https

{}

controller.service.internal.appProtocol

Указание appProtocol для HTTP- и HTTPS-портов внутреннего Service

true

controller.service.internal.nodePorts.http

NodePort для HTTP-порта Service. При пустом значении порт выделяется автоматически

""

controller.service.internal.nodePorts.https

NodePort для HTTPS-порта Service. При пустом значении порт выделяется автоматически

""

controller.service.internal.nodePorts.tcp

Сопоставление TCP-портов Service и NodePort.
Пример конфигурации:

tcp:
  8080: 30080

{}

controller.service.internal.nodePorts.udp

Сопоставление UDP-портов Service и NodePort.
Пример конфигурации:

udp:
  53: 30053

{}

controller.shareProcessNamespace

Включение общего пространства имен процессов между контейнерами pod. Позволяет контейнерам видеть процессы друг друга и взаимодействовать через сигналы (например, с sidecar-контейнерами).

false

controller.extraContainers

Дополнительные контейнеры, добавляемые в pod контроллера.
Пример конфигурации:

- name: my-sidecar
  image: nginx:latest
- name: lemonldap-ng-controller
  image: lemonldapng/lemonldap-ng-controller:0.2.0
  args:
    - /lemonldap-ng-controller
    - --alsologtostderr
    - --configmap=$(POD_NAMESPACE)/lemonldap-ng-configuration
  env:
    - name: POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
  volumeMounts:
  - name: copy-portal-skins
    mountPath: /srv/var/lib/lemonldap-ng/portal/skins

[]

controller.extraVolumeMounts

Дополнительные VolumeMounts для основного контейнера контроллера.
Пример конфигурации:

- name: copy-portal-skins
  mountPath: /var/lib/lemonldap-ng/portal/skins

[]

controller.extraVolumes

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

- name: copy-portal-skins
  emptyDir: {}

[]

controller.extraInitContainers

Init-контейнеры, запускаемые до основных контейнеров.
Пример конфигурации:

- name: init-myservice
  image: busybox
  command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']

[]

controller.extraModules

Дополнительные динамические модули, монтируемые в базовый образ Nginx.
Пример конфигурации:

- name: mytestmodule
  image:
    image: ingress-nginx/mytestmodule
    tag: "v1.0.0"
    digest: ""
    distroless: false
  containerSecurityContext:
    runAsNonRoot: true
    runAsUser: <user-id>
    runAsGroup: <group-id>
    allowPrivilegeEscalation: false
    seccompProfile:
      type: RuntimeDefault
    capabilities:
      drop:
      - ALL
    readOnlyRootFilesystem: true
  resources: {}

[]

controller.admissionWebhooks.name

Имя компонента для «мутирующего» и валидирующего вебхуков

admission

controller.admissionWebhooks.annotations

Аннотации для «мутирующего» и валидирующего вебхуков и связанных с ним ресурсов Job

{}

controller.admissionWebhooks.enabled

Включение «мутирующего» и валидирующего вебхуков

true

controller.admissionWebhooks.extraEnvs

Дополнительные переменные окружения для «мутирующего» и валидирующего вебхуков.
Пример конфигурации:

extraEnvs:
  - name: FOO
    valueFrom:
      secretKeyRef:
        key: FOO
        name: secret-resource

[]

controller.admissionWebhooks.failurePolicy

Политика обработки ошибок при вызове «мутирующего» и валидирующего вебхуков

Fail

controller.admissionWebhooks.port

Порт, на котором работают «мутирующий» и валидирующий вебхуки

8443

controller.admissionWebhooks.certificate

Путь к файлу сертификата для «мутирующего» и валидирующего вебхуков внутри контейнера

"/usr/local/certificates/cert"

controller.admissionWebhooks.key

Путь к файлу приватного ключа для «мутирующего» и валидирующего вебхуков внутри контейнера

"/usr/local/certificates/key"

controller.admissionWebhooks.namespaceSelector

Селектор пространства имен для применения правил

{}

controller.admissionWebhooks.objectSelector

Селектор объектов для применения правил

{}

controller.admissionWebhooks.labels

Метки для ресурсов

{}

controller.admissionWebhooks.service.annotations

Аннотации для Service

{}

controller.admissionWebhooks.service.externalIPs

Список внешних IP-адресов Service

[]

controller.admissionWebhooks.service.loadBalancerSourceRanges

Список CIDR-диапазонов, которым разрешен доступ к Service

[]

controller.admissionWebhooks.service.servicePort

Порт Service

443

controller.admissionWebhooks.service.type

Тип Service

ClusterIP

controller.admissionWebhooks.createSecretJob.name

Имя pod Job, создающего Secret

create

controller.admissionWebhooks.createSecretJob.activeDeadlineSeconds

Максимальное время выполнения pod Job, выполняющего создания Secret, в секундах. Значение 0 означает отсутствие ограничений

0

controller.admissionWebhooks.createSecretJob.securityContext.runAsNonRoot

Запуск pod Job создания Secret от имени пользователя без административных полномочий

true

controller.admissionWebhooks.createSecretJob.securityContext.runAsUser

UID пользователя pod Job создания Secret

65532

controller.admissionWebhooks.createSecretJob.securityContext.runAsGroup

GID группы pod Job создания Secret

65532

controller.admissionWebhooks.createSecretJob.securityContext.allowPrivilegeEscalation

Разрешение на эскалацию привилегий

false

controller.admissionWebhooks.createSecretJob.securityContext.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

controller.admissionWebhooks.createSecretJob.securityContext.capabilities.drop

Список capabilities для удаления

- ALL

controller.admissionWebhooks.createSecretJob.securityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

controller.admissionWebhooks.createSecretJob.resources

Запросы и лимиты ресурсов pod Job создания Secret.
Пример конфигурации:

limits:
  cpu: 10m
  memory: 20Mi
requests:
  cpu: 10m
  memory: 20Mi

{}

controller.admissionWebhooks.patchWebhookJob.name

Имя pod Job, выполняющего патч

patch

controller.admissionWebhooks.patchWebhookJob.activeDeadlineSeconds

Максимальное время работы pod Job, выполняющего патч, в секундах. Значение 0 означает отсутствие ограничений

0

controller.admissionWebhooks.patchWebhookJob.securityContext.runAsNonRoot

Запуск pod Job, выполняющего патч, от имени пользователя без административных полномочий

true

controller.admissionWebhooks.patchWebhookJob.securityContext.runAsUser

UID пользователя для pod Job, выполняющего патч

65532

controller.admissionWebhooks.patchWebhookJob.securityContext.runAsGroup

GID группы для pod Job, выполняющего патч

65532

controller.admissionWebhooks.patchWebhookJob.securityContext.allowPrivilegeEscalation

Разрешение на эскалацию привилегий

false

controller.admissionWebhooks.patchWebhookJob.securityContext.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

controller.admissionWebhooks.patchWebhookJob.securityContext.capabilities.drop

Список capabilities для удаления

- ALL

controller.admissionWebhooks.patchWebhookJob.securityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

controller.admissionWebhooks.patchWebhookJob.resources

Запросы и лимиты ресурсов pod Job, выполняющего патч

{}

controller.admissionWebhooks.patch.enabled

Включение pod Jobдля автоматического применения патча

false

controller.admissionWebhooks.patch.image.image

Имя образа pod Job

ingress-nginx/kube-webhook-certgen

controller.admissionWebhooks.patch.image.tag

Тег образа pod Job

v1.6.9

controller.admissionWebhooks.patch.image.digest

Дайджест образа для pod Job

sha256

controller.admissionWebhooks.patch.image.pullPolicy

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

IfNotPresent

controller.admissionWebhooks.patch.priorityClassName

PriorityClass для pod Job применения патча

""

controller.admissionWebhooks.patch.runtimeClassName

RuntimeClass для pod Job применения патча

""

controller.admissionWebhooks.patch.podAnnotations

Аннотации для pod Job применения патча

{}

controller.admissionWebhooks.patch.networkPolicy.enabled

Включение NetworkPolicy для pod Job, выполняющего патч

false

controller.admissionWebhooks.patch.nodeSelector.kubernetes.io/os

Селектор узлов по ОС для pod Job, выполняющего патч

linux

controller.admissionWebhooks.patch.tolerations

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

[]

controller.admissionWebhooks.patch.labels

Метки pod Job, выполняющего патч

{}

controller.admissionWebhooks.patch.securityContext

Контекст безопасности для pod Job, создающего Secret и выполняющего патч

{}

controller.admissionWebhooks.patch.rbac.create

Создание RBAC для pod Job, выполняющего патч

true

controller.admissionWebhooks.patch.serviceAccount.create

Включение автоматического создания ServiceAccount для pod Job, выполняющего патч

true

controller.admissionWebhooks.patch.serviceAccount.name

Имя ServiceAccount (генерируется автоматически, если не указано и serviceAccount.create: true)

""

controller.admissionWebhooks.patch.serviceAccount.automountServiceAccountToken

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

true

controller.admissionWebhooks.certManager.enabled

Использование Cert-manager для автоматического выпуска сертификатов для «мутирующего» и валидирующего вебхуков

true

controller.admissionWebhooks.certManager.rootCert.duration

Срок действия корневого самоподписанного сертификата

""

controller.admissionWebhooks.certManager.rootCert.revisionHistoryLimit

Лимит истории ревизий для ресурса корневого сертификата

0

controller.admissionWebhooks.certManager.admissionCert.duration

Срок действия сертификата

""

controller.admissionWebhooks.certManager.admissionCert.revisionHistoryLimit

Лимит истории ревизий для ресурса сертификата

0

controller.metrics.port

Порт для экспорта метрик контроллера

10254

controller.metrics.portName

Имя порта для экспорта метрик

metrics

controller.metrics.enabled

Включение экспорта метрик контроллера

true

controller.metrics.service.enabled

Создание Service для доступа к метрикам

true

controller.metrics.service.annotations

Аннотации Service метрик

{}

controller.metrics.service.labels

Метки для Service метрик

{}

controller.metrics.service.externalIPs

Список внешних IP-адресов Service метрик

[]

controller.metrics.service.loadBalancerSourceRanges

Список CIDR-диапазонов, которым разрешен доступ к Service метрик

[]

controller.metrics.service.servicePort

Порт Service метрик

10254

controller.metrics.service.type

Тип Service метрик

ClusterIP

controller.metrics.serviceMonitor.enabled

Создание ServiceMonitor для сбора метрик оператором Prometheus

true

controller.metrics.serviceMonitor.additionalLabels

Дополнительные метки для ServiceMonitor

{}

controller.metrics.serviceMonitor.annotations

Аннотации для ServiceMonitor

{}

controller.metrics.serviceMonitor.namespace

Пространство имен для ServiceMonitor

""

controller.metrics.serviceMonitor.namespaceSelector

Селектор пространства имен для поиска целей ServiceMonitor.
Пример конфигурации:

any: true

{}

controller.metrics.serviceMonitor.scrapeInterval

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

30s

controller.metrics.serviceMonitor.targetLabels

Метки Service, которые необходимо перенести на собираемые метрики

[]

controller.metrics.serviceMonitor.relabelings

Правила фильтрации и преобразования меток, применяемые к целям сбора до начала сбора метрик

[]

controller.metrics.serviceMonitor.metricRelabelings

Правила фильтрации и преобразования меток, применяемые к собранным метрикам

[]

controller.metrics.serviceMonitor.labelLimit

Максимальное количество меток на одну выборку

0

controller.metrics.serviceMonitor.labelNameLengthLimit

Максимальная длина имени метки на одну выборку

0

controller.metrics.serviceMonitor.labelValueLengthLimit

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

0

controller.metrics.serviceMonitor.sampleLimit

Максимальное число выборок за один цикл сбора (scrape)

0

controller.metrics.serviceMonitor.targetLimit

Максимальное число целей за один цикл сбора (scrape)

0

controller.metrics.prometheusRule.enabled

Создание правил Prometheus с оповещениями для Ingress-nginx

false

controller.metrics.prometheusRule.additionalLabels

Дополнительные метки правил Prometheus

{}

controller.metrics.prometheusRule.annotations

Аннотации правил Prometheus

{}

controller.metrics.prometheusRule.rules

Список правил правил Prometheus.
Пример конфигурации:

- alert: NGINXConfigFailed
  expr: count(nginx_ingress_controller_config_last_reload_successful == 0) > 0
  for: 1s
  labels:
    severity: critical
  annotations:
    description: bad ingress config - nginx config test failed
    summary: uninstall the latest ingress changes to allow config reloads to resume
- alert: NGINXCertificateExpiry
  expr: (avg(nginx_ingress_controller_ssl_expire_time_seconds{host!="_"}) by (host) - time()) < 604800
  for: 1s
  labels:
    severity: critical
  annotations:
    description: ssl certificate(s) will expire in less then a week
    summary: renew expiring certificates to avoid downtime
- alert: NGINXTooMany500s
  expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"5.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
  for: 1m
  labels:
    severity: warning
  annotations:
    description: Too many 5XXs
    summary: More than 5% of all requests returned 5XX, this requires your attention
- alert: NGINXTooMany400s
  expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"4.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
  for: 1m
  labels:
    severity: warning
  annotations:
    description: Too many 4XXs
    summary: More than 5% of all requests returned 4XX, this requires your attention

[]

controller.lifecycle.preStop.exec.command

Команда, выполняемая хуком preStop для корректного завершения работы и дренирования активных соединений

- /wait-shutdown

controller.priorityClassName

PriorityClass для pod контроллера

""

revisionHistoryLimit - лимит хранимых ревизий Deployment#

Параметр

Описание

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

revisionHistoryLimit

Максимальное количество сохраняемых ревизий Deployment

10

defaultBackend - настройки бэкенда по умолчанию для ответов 404#

Параметр

Описание

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

defaultBackend.enabled

Включение развертывания компонента DefaultBackend (для обработки ответов 404)

false

defaultBackend.name

Имя компонента DefaultBackend

defaultbackend

defaultBackend.image.image

Имя образа DefaultBackend

defaultbackend-amd64

defaultBackend.image.tag

Тег образа DefaultBackend

"1.5"

defaultBackend.image.pullPolicy

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

IfNotPresent

defaultBackend.image.runAsNonRoot

Запуск контейнера DefaultBackend от имени пользователя без административных полномочий

true

defaultBackend.image.runAsUser

UID пользователя внутри контейнера DefaultBackend

65534

defaultBackend.image.runAsGroup

GID группы внутри контейнера DefaultBackend

65534

defaultBackend.image.allowPrivilegeEscalation

Разрешение на эскалацию привилегий

false

defaultBackend.image.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

defaultBackend.image.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

defaultBackend.extraArgs

Дополнительные аргументы командной строки для DefaultBackend

{}

defaultBackend.serviceAccount.create

Включение автоматического создания ServiceAccount для DefaultBackend

true

defaultBackend.serviceAccount.name

Имя ServiceAccount (генерируется автоматически, если не указано и serviceAccount.create: true)

""

defaultBackend.serviceAccount.automountServiceAccountToken

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

true

defaultBackend.extraEnvs

Дополнительные переменные окружения pod DefaultBackend

[]

defaultBackend.port

Порт контейнера DefaultBackend

8080

defaultBackend.livenessProbe.failureThreshold

Количество неудачных попыток до перевода контейнера в статус NotReady

3

defaultBackend.livenessProbe.initialDelaySeconds

Задержка в секундах перед первой проверкой работоспособности

30

defaultBackend.livenessProbe.periodSeconds

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

10

defaultBackend.livenessProbe.successThreshold

Количество успешных попыток для подтверждения работоспособности

1

defaultBackend.livenessProbe.timeoutSeconds

Тайм-аут ожидания ответа при проверке работоспособности

5

defaultBackend.readinessProbe.failureThreshold

Количество неудачных проверок готовности перед исключением контейнера из балансировки

6

defaultBackend.readinessProbe.initialDelaySeconds

Начальная задержка перед первой проверкой готовности

0

defaultBackend.readinessProbe.periodSeconds

Интервал между проверками готовности

5

defaultBackend.readinessProbe.successThreshold

Количество успешных попыток для подтверждения готовности

1

defaultBackend.readinessProbe.timeoutSeconds

Тайм-аут ожидания ответа при проверке готовности

5

defaultBackend.updateStrategy

Стратегия обновления ресурса Deployment или DaemonSet.
Пример конфигурации:

rollingUpdate:
  maxUnavailable: 1
type: RollingUpdate

{}

defaultBackend.minReadySeconds

Минимальное время, в течение которого pod должен находиться в состоянии готовности, прежде чем будет считаться доступным

0

defaultBackend.tolerations

Toleration для размещения pod на узлах с ограничениями (taints).
Пример конфигурации:

- key: "key"
  operator: "Equal|Exists"
  value: "value"
  effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"

[]

defaultBackend.affinity

Настройки правил привязки pod к узлам DefaultBackend.
Пример конфигурации:

podAntiAffinity:
  preferredDuringSchedulingIgnoredDuringExecution:
  - weight: 100
    podAffinityTerm:
      labelSelector:
        matchExpressions:
        - key: app.kubernetes.io/name
          operator: In
          values:
          - '{{ include "ingress-nginx.name" . }}'
        - key: app.kubernetes.io/instance
          operator: In
          values:
          - '{{ .Release.Name }}'
        - key: app.kubernetes.io/component
          operator: In
          values:
          - default-backend
      topologyKey: kubernetes.io/hostname

{}

defaultBackend.topologySpreadConstraints

Ограничения топологии для равномерного распределения pod по зонам доступности и узлам.
Пример конфигурации:

- labelSelector:
    matchLabels:
      app.kubernetes.io/name: '{{ include "ingress-nginx.name" . }}'
      app.kubernetes.io/instance: '{{ .Release.Name }}'
      app.kubernetes.io/component: default-backend
  matchLabelKeys:
  - pod-template-hash
  topologyKey: topology.kubernetes.io/zone
  maxSkew: 1
  whenUnsatisfiable: ScheduleAnyway
- labelSelector:
    matchLabels:
      app.kubernetes.io/name: '{{ include "ingress-nginx.name" . }}'
      app.kubernetes.io/instance: '{{ .Release.Name }}'
      app.kubernetes.io/component: default-backend
  matchLabelKeys:
  - pod-template-hash
  topologyKey: kubernetes.io/hostname
  maxSkew: 1
  whenUnsatisfiable: ScheduleAnyway

[]

defaultBackend.podSecurityContext

Контекст безопасности для pod DefaultBackend

{}

defaultBackend.containerSecurityContext

Контекст безопасности для контейнера DefaultBackend

{}

defaultBackend.podLabels

Метки для pod DefaultBackend

{}

defaultBackend.nodeSelector.kubernetes.io/os

Селектор узлов по ОС для DefaultBackend

linux

defaultBackend.podAnnotations

Аннотации для pod DefaultBackend

{}

defaultBackend.replicaCount

Количество реплик DefaultBackend

1

defaultBackend.minAvailable

Минимальное количество доступных pod, гарантируемое PodDisruptionBudget (недопустимо использовать совместно с maxUnavailable)

1

defaultBackend.unhealthyPodEvictionPolicy

Политика вытеснения неработоспособных pod, защищенных PodDisruptionBudget

""

defaultBackend.resources

Запросы и лимиты ресурсов для контейнера DefaultBackend.
Пример конфигурации:

limits:
  cpu: 10m
  memory: 20Mi
requests:
  cpu: 10m
  memory: 20Mi

{}

defaultBackend.extraVolumeMounts

Дополнительные VolumeMounts контейнера DefaultBackend.
Пример конфигурации:

- name: copy-portal-skins
 mountPath: /var/lib/lemonldap-ng/portal/skins

[]

defaultBackend.extraVolumes

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

- name: copy-portal-skins
  emptyDir: {}

[]

defaultBackend.extraConfigMaps

Дополнительные ресурсы ConfigMap, подключаемые к pod DefaultBackend.
Пример конфигурации:

- name: my-extra-configmap-1
  labels:
    type: config-1
  data:
    extra_file_1.html: |
      <!-- Дополнительный HTML-контент для ConfigMap1 -->
- name: my-extra-configmap-2
  labels:
    type: config-2
  data:
    extra_file_2.html: |
      <!-- Дополнительный HTML-контент для ConfigMap2 -->

[]

defaultBackend.autoscaling.annotations

Аннотации для ресурса HPA DefaultBackend

{}

defaultBackend.autoscaling.enabled

Включение горизонтального автомасштабирования (HPA) для DefaultBackend

false

defaultBackend.autoscaling.minReplicas

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

1

defaultBackend.autoscaling.maxReplicas

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

2

defaultBackend.autoscaling.targetCPUUtilizationPercentage

Целевой процент загрузки CPU для HPA DefaultBackend

50

defaultBackend.autoscaling.targetMemoryUtilizationPercentage

Целевой процент использования памяти для HPA DefaultBackend

50

defaultBackend.networkPolicy.enabled

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

false

defaultBackend.service.annotations

Аннотации для Service DefaultBackend

{}

defaultBackend.service.clusterIPs

Список статических clusterIP для Service DefaultBackend (значение неизменяемо после создания)

[]

defaultBackend.service.externalIPs

Список внешних IP-адресов Service DefaultBackend

[]

defaultBackend.service.loadBalancerSourceRanges

Список CIDR-диапазонов, которым разрешен доступ к Service DefaultBackend

[]

defaultBackend.service.servicePort

Порт Service DefaultBackend

80

defaultBackend.service.type

Тип Service DefaultBackend

ClusterIP

defaultBackend.priorityClassName

PriorityClass для pod DefaultBackend

""

defaultBackend.runtimeClassName

RuntimeClass для запуска pod DefaultBackend

""

defaultBackend.labels

Метки ресурсов DefaultBackend

{}

rbac - настройки RBAC#

Параметр

Описание

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

rbac.create

Включение автоматического создания ресурсов RBAC

true

rbac.scope

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

false

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

Параметр

Описание

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

serviceAccount.create

Включение автоматического создания ServiceAccount

true

serviceAccount.name

Имя ServiceAccount (генерируется автоматически, если не указано и serviceAccount.create: true)

""

serviceAccount.automountServiceAccountToken

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

true

serviceAccount.annotations

Аннотации для ServiceAccount

{}

imagePullSecrets - секреты для загрузки образов#

Параметр

Описание

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

imagePullSecrets

Список Secret для аутентификации при загрузке контейнерных образов из приватных реестров.
Пример конфигурации:

- name: secretName

[]

tcp - публикация TCP-сервисов через Ingress-nginx#

Параметр

Описание

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

tcp

Пары «ключ-значение» для публикации TCP-сервисов через Ingress-nginx

{}

udp - публикация UDP-сервисов через Ingress-nginx#

Параметр

Описание

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

udp

Пары «ключ-значение» для публикации UDP-сервисов через Ingress-nginx

{}

portNamePrefix - префикс имен портов TCP и UDP#

Параметр

Описание

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

portNamePrefix

Префикс для имен TCP- и UDP-портов в Service контроллера Ingress-nginx (может требоваться провайдерами облачных балансировщиков нагрузки)

""

dhParam - параметр Диффи — Хеллмана#

Параметр

Описание

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

dhParam

Base64-кодированная строка с параметром Диффи — Хеллмана для SSL/TLS

""