Модуль управления внешними подключениями (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 Имя ShturvalServicePatch string shturval-ingress-controller-lb
commonName Wildcard домен. Должно быть указано значение, которое прописано в спецификации сервиса до внесения изменений string clustername.ip-11-12-13-14.shturval.link
nodePorts.http Порт для подключения по HTTP int 30080
nodePorts.https Порт для подключения по HTTPS int 30443

Когда 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 Количество рабочих процессов NGINX int 6
limits.memory Ограничение памяти string 800Mi
requests.cpu Запрос CPU string 400m
requests.memory Запрос памяти string 600Mi
Скриншот 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-заголовков string 2 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