Модуль управления внешними подключениями (shturval-ingress-controller)

О сервисе

ПараметрЗначение
Название в интерфейсеМодуль управления внешними подключениями
Системное название (идентификатор)shturval-ingress-controller
Назначение в кластереМаршрутизация внешнего трафика в сервисы кластера по HTTP/HTTPS; Ingress-контроллер.
КритическийДа
Публичный репозиторийIngress NGinx Controller
Зависимостиshturval-networking, shturval-cert-manager-crds
Неймспейсingress

Назначение

shturval-ingress-controller — модуль управления внешними подключениями на базе Ingress NGinx. Обеспечивает доступ к приложениям в кластере по доменным именам и путям, поддержку TLS (в т. ч. через cert-manager).

Развёртывание и управление

shturval-ingress-controller — критический сервис платформы. В платформе «Штурвал» его включение и жизненный цикл в кластере обеспечивает cluster-manager (сервис платформы); объект ShturvalServiceConfig (SSC) для чарта shturval-ingress-controller создаётся и сопровождается как часть платформенной конфигурации, а не как произвольная ручная установка Helm-чарта администратором. Для корректной работы должны быть развёрнуты зависимости из таблицы выше: shturval-networking и CRD shturval-cert-manager.

Рекомендация: не правьте ShturvalServiceConfig вручную для смены параметров релиза — такой объект относится к платформенной конфигурации и может быть перезаписан при обновлениях. Кастомизация (hostPort для HA, NodePort, общий домен для TLS, proxy protocol и др.) выполняется через ShturvalServicePatch (SSP) для shturval-ingress-controller.

Если при развёртывании платформы сервис был отключён, SSC мог получить режим отсутствия (mode: absent); для включения переведите режим в auto. Если модуля нет в списке Установленные сервисы, проверьте политику развёртывания и состояние SSC по документации по настройке кластера; самостоятельная установка чарта из каталога не является типовым сценарием.

Ниже в разделе Где настраивать — переход к управлению уже развёрнутым сервисом в интерфейсе; примеры патчей — в следующих разделах страницы.

Где настраивать

Сервисы и репозитории → Установленные сервисы → найдите Модуль управления внешними подключениями (shturval-ingress-controller) → Управлять.

Кастомизация (hostPort для HA, NodePort, общий домен для TLS, proxy protocol) выполняется через ShturvalServicePatch для shturval-ingress-controller. Подробнее — Ingress. Официальная документация: NGINX Ingress Controller.

Если нужно увеличить допустимый размер HTTP-заголовков для входа пользователя в GUI, см. Восстановить вход в графический интерфейс.

Замена VIP Ingress на внешний балансировщик

Если при добавлении кластера был указан внутренний виртуальный IP и нужно заменить его внешним балансировщиком (например, HAProxy):

  1. Подготовьте ShturvalServicePatch для shturval-ingress-controller с включением hostPort и/или NodePort.
  2. Загрузите патч в кластер через Импорт манифестов (или kubectl).
Пример ShturvalServicePatch для внешнего балансировщика
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: <имя ресурса>
spec:
  shturvalServiceConfigName: shturval-ingress-controller
  customvalues:
    controller:
      hostPort: 
        enabled: true # При включении поды ингресс контроллера так же будут использовать на узлах кластера 80 и 443 порты
      service:
        nodePorts:
          http: "<ваше значение параметра>"
          https: "<ваше значение параметра>"
        type: NodePort
      shturval:
        commonName: <ваше значение параметра>
ПараметрОписаниеТип данныхПример
metadata.nameИмя ShturvalServicePatchstringshturval-ingress-controller-lb
commonNameWildcard домен. Должно быть указано значение, которое прописано в спецификации сервиса до внесения измененийstringclustername.ip-11-12-13-14.shturval.link
nodePorts.httpПорт для подключения по HTTPint30080
nodePorts.httpsПорт для подключения по HTTPSint30443

Когда ShturvalServicePatch будет загружен, потребуется некоторое время для применения конфигурации. После, узлы будут готовы принимать ингресс трафик на указанные порты (например, 30080 и 30443).

Скриншот ShturvalServicePatch для внешнего балансировщика

ShturvalServicePatch для замены VIP Ingress на внешний балансировщик

Включение Proxy Protocol

Для передачи реального IP клиента через внешний балансировщик можно включить proxy protocol в конфигурации Ingress Controller через ShturvalServicePatch:

Пример ShturvalServicePatch для proxy protocol
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: shturval-ingress-controller-proxy
spec:
  shturvalServiceConfigName: shturval-ingress-controller
  customvalues:
    controller:
      config:
        use-proxy-protocol: true

Дополнительные параметры конфигурации — в официальной документации Ingress NGinx.

Скриншот ShturvalServicePatch для Proxy Protocol

ShturvalServicePatch для включения Proxy Protocol

Конфигурирование worker-processes

По умолчанию для Ingress Controller заданы ограничения на количество рабочих процессов NGINX и на лимиты ресурсов:

controller:
  config:
    worker-processes: 4
  resources:
    limits:
      memory: 400Mi
    requests:
      cpu: 200m
      memory: 300Mi

Для переопределения значений примените ShturvalServicePatch:

Пример ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: shturval-ingress-controller-workers
spec:
  shturvalServiceConfigName: shturval-ingress-controller
  customvalues:
    controller:
      config:
        worker-processes: <ваше значение>
      resources:
        limits:
          memory: <ваше значение>
        requests:
          cpu: <ваше значение>
          memory: <ваше значение>
ПараметрОписаниеТипПример
worker-processesКоличество рабочих процессов NGINXint6
limits.memoryОграничение памятиstring800Mi
requests.cpuЗапрос CPUstring400m
requests.memoryЗапрос памятиstring600Mi
Скриншот ShturvalServicePatch для worker-processes и ресурсов

ShturvalServicePatch для worker-processes и ресурсов Ingress Controller

Настройка буфера для HTTP-заголовков

По умолчанию в платформе «Штурвал» для Ingress Controller задано ограничение размера HTTP-заголовков 2 16k (два буфера по 16 КБ). Если пользователь с токеном большего размера не может войти в графический интерфейс, увеличьте значение large-client-header-buffers через ShturvalServicePatch:

Пример ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: shturval-ingress-controller-large-headers
spec:
  shturvalServiceConfigName: shturval-ingress-controller
  customvalues:
    controller:
      config:
        large-client-header-buffers: <ваше значение>
ПараметрОписаниеТипПример
large-client-header-buffersКоличество и размер буферов для чтения HTTP-заголовковstring2 128k

Включение snippet-аннотаций

Для работы snippet-аннотаций в ресурсах Ingress необходимо применить ShturvalServicePatch, разрешающий использование snippet-аннотаций и задающий уровень риска:

ShturvalServicePatch
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
  name: ingress-controller-snippet
spec:
  shturvalServiceConfigName: shturval-ingress-controller
  customvalues:
    controller:
      allowSnippetAnnotations: true
      config:
        annotations-risk-level: Critical