Loginapp#

Loginapp - это веб-приложение для настройки аутентификации в Kubernetes CLI через OIDC (OpenID Connect). Оно упрощает процесс входа в кластер, позволяя пользователям проходить аутентификацию через внешний провайдер (например, Dex, Keycloak, Google), получать ID-токен и автоматически настраивать kubeconfig для использования с Kubectl.

Основные задачи и возможности
  • Позволяет пользователям кластера аутентифицироваться через стандартный OIDC-flow (authorization code flow) и получать токены без ручного взаимодействия с URL-адресами или файлами конфигурации.

  • После успешного входа формирует готовый kubeconfig, который можно скачать или использовать напрямую.

  • Конфигурируется через флаги командной строки, переменные окружения или YAML-файл, что удобно для развертывания в Kubernetes.

  • Работает с любым OIDC-совместимым провайдером, таким как Dex, что позволяет использовать единую точку входа для доступа к нескольким кластерам.

  • Поддерживает настройку названия приложения, шаблонов и статических ресурсов.

Примечание

Loginapp интегрирован с Dex, при этом он не является инструментом по умолчанию в компоненте Auth, его нужно включить в spec Component или установить как отдельный инструмент.

Настройка#

Для регистрации кластера в Loginapp укажите его параметры в конфигурации инструмента, в разделе config.clusters:

values:
  config:
    clusters:
      - name: my-cluster
        server: https://apiserver.my-cluster.dapp.ru:6443
        certificate-authority: |
          -----BEGIN CERTIFICATE-----
          ...
          -----END CERTIFICATE-----

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

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

replicas - количество реплик deployment#

Параметр

Описание

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

replicas

Количество реплик pod для обеспечения высокой доступности приложения

1

imagePullPolicy - политика загрузки образов#

Параметр

Описание

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

imagePullPolicy

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

IfNotPresent

imagePullSecrets - секреты для доступа к приватным registry#

Параметр

Описание

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

imagePullSecrets

Список Kubernetes-секретов типа kubernetes.io/dockerconfigjson для аутентификации в приватных container registry

[]

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

Параметр

Описание

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

nameOverride

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

""

fullnameOverride - полное переопределение имени релиза#

Параметр

Описание

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

fullnameOverride

Полное переопределение имени для всех создаваемых ресурсов, игнорирует стандартную генерацию имени

""

serviceAccount - настройки учетной записи сервиса#

Параметр

Описание

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

serviceAccount.create

Создание ServiceAccount для приложения

true

serviceAccount.annotations

Аннотации для добавления к ServiceAccount (например, для связи с IAM-ролями в облаках)

{}

serviceAccount.name

Имя ServiceAccount для использования. Если не указано и create: true, имя генерируется на основе fullname-шаблона

Не задан

podSecurityContext - контекст безопасности на уровне pod#

Параметр

Описание

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

podSecurityContext.runAsNonRoot

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

true

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

Параметр

Описание

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

securityContext.capabilities.drop

Список Linux capabilities, которые необходимо удалить у контейнера для повышения безопасности

[ALL]

securityContext.readOnlyRootFilesystem

Сделать корневую файловую систему контейнера доступной только для чтения

true

securityContext.runAsNonRoot

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

true

securityContext.runAsUser

UID пользователя, от имени которого запускается процесс в контейнере

1001

service - настройки Kubernetes Service#

Параметр

Описание

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

service.type

Тип Kubernetes Service. Возможные значения: ClusterIP, NodePort, LoadBalancer

ClusterIP

service.port

Порт, на котором Service будет принимать входящие подключения

5555

service.nodePort

Фиксированный порт на узлах кластера для типа NodePort. Диапазон 30000-32767

Не задан

service.loadBalancerIP

Фиксированный IP-адрес для LoadBalancer (поддерживается не всеми облачными провайдерами)

Не задан

ingress - настройки входящего трафика#

Параметр

Описание

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

ingress.enabled

Создание Ingress-ресурса для внешнего доступа к приложению

true

ingress.className

Имя IngressClass для определения контроллера Ingress

nginx

ingress.annotations

Дополнительные аннотации для настройки поведения Ingress-контроллера

nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

ingress.hosts

Список хостов и путей для маршрутизации трафика

Один хост: loginapp.{{ include "ingress.domain" . }} с путем /

ingress.hosts[0].host

Доменное имя для доступа к Loginapp

loginapp.{{ include "ingress.domain" . }}

ingress.hosts[0].paths[0].path

URL-путь для маршрутизации запросов

/

ingress.hosts[0].paths[0].pathType

Тип соответствия пути. Возможные значения: Prefix, Exact, ImplementationSpecific

Prefix

ingress.tls

Конфигурация TLS для защищенного HTTPS-соединения

Использует секрет ingress-tls для хоста

ingress.tls[0].secretName

Имя Kubernetes Secret типа kubernetes.io/tls с сертификатом и ключом

ingress-tls

ingress.tls[0].hosts

Список доменных имен, для которых применяется TLS-сертификат

['loginapp.{{ include "ingress.domain" . }}']

resources - лимиты и запросы ресурсов#

Параметр

Описание

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

resources.limits.cpu

Максимальное количество ядер CPU, которое может использовать контейнер

200m

resources.limits.memory

Максимальное количество оперативной памяти, которое может использовать контейнер

256Mi

resources.requests.cpu

Гарантированное количество ядер CPU для контейнера при планировании

100m

resources.requests.memory

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

128Mi

nodeSelector - селектор узлов для размещения pod#

Параметр

Описание

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

nodeSelector

Набор меток для выбора узлов кластера, на которых можно запускать pod-приложения

{}

tolerations - допуски для размещения на узлах с taint#

Параметр

Описание

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

tolerations

Список допусков, позволяющих подам размещаться на узлах с соответствующими taint

[]

affinity - правила привязки pod к узлам#

Параметр

Описание

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

affinity

Правила node affinity, pod affinity и pod anti-affinity для управления размещением pod

{}

env - дополнительные переменные окружения#

Параметр

Описание

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

env

Произвольные переменные окружения для контейнера в формате «ключ-значение». Поддерживаются переменные с префиксом LOGINAPP_

{}

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

Параметр

Описание

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

args

Дополнительные аргументы для передачи в команду запуска Loginapp, например, -v для подробного логирования

[]

config - основная конфигурация приложения#

Параметр

Описание

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

config.name

Название приложения, отображаемое в веб-интерфейсе

Имя Helm-релиза

config.existingSecret

Имя существующего Kubernetes Secret для использования секретов вместо их генерации чартом

Не задан

config.secret

Секрет приложения для шифрования сессий (должен быть идентичен на всех репликах). Если пустое, генерируется случайная строка

Не задан

config.clientID

OIDC Client ID для аутентификации в провайдере идентификации

dapp

config.clientSecret

OIDC Client Secret для аутентификации в провайдере идентификации

задан по умолчанию

config.clientRedirectURL

URL для перенаправления после OIDC-аутентификации, должен заканчиваться на /callback

https://loginapp.{{ include "ingress.domain" . }}/callback

config.issuerRootCA.secret

Имя Kubernetes Secret, содержащего корневой CA-сертификат OIDC-провайдера

ingress-tls

config.issuerRootCA.configMap

Имя ConfigMap, содержащего корневой CA-сертификат (альтернатива secret)

Не задан

config.issuerRootCA.key

Ключ в Secret или ConfigMap, по которому хранится CA-сертификат

tls.crt

config.issuerInsecureSkipVerify

Пропустить проверку TLS-сертификата OIDC-провайдера (не рекомендуется для production)

false

config.issuerURL

URL-адрес OIDC-провайдера (Issuer URL)

https://auth.{{ include "ingress.domain" . }}

config.refreshToken

Запрос refresh token для обновления токенов доступа без повторной аутентификации

false

config.tls.enabled

Включение TLS-терминацию на уровне приложения

true

config.tls.secretName

Имя Kubernetes Secret типа kubernetes.io/tls с TLS-сертификатом и ключом. Если пустое при tls.enabled: true, генерируются самоподписанные сертификаты

ingress-tls

config.tls.altnames

DNS-имена (Subject Alternative Names) для самоподписанного сертификата

[]

config.tls.altIPs

IP-адреса (Subject Alternative Names) для самоподписанного сертификата

[]

config.clusters

Список Kubernetes-кластеров для отображения в веб-интерфейсе и генерации kubeconfig-файлов

[]

config.configOverwrites

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

{}

config.templates

Переопределение HTML-шаблонов для страниц ошибок и отображения токенов

Не задан