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 loginapp#

Параметр

Описание

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

replicas

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

1

image - определить контейнерный образ loginapp#

Параметр

Описание

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

image

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

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-loginapp/loginapp:v3.2.3'

imagePullPolicy - определить политику загрузки контейнерного образа#

Параметр

Описание

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

imagePullPolicy

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

IfNotPresent

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

Параметр

Описание

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

imagePullSecrets

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

[]

nameOverride - определить сокращенное переопределение имени ресурсов#

Параметр

Описание

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

nameOverride

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

""

fullnameOverride - определить полное переопределение имени ресурсов#

Параметр

Описание

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

fullnameOverride

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

""

serviceAccount - определить настройки ServiceAccount для loginapp#

Параметр

Описание

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

serviceAccount.create

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

true

serviceAccount.annotations

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

{}

serviceAccount.name

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

Не задан

podSecurityContext - определить pod-level securityContext для loginapp#

Параметр

Описание

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

podSecurityContext.runAsNonRoot

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

true

securityContext - определить container-level securityContext для loginapp#

Параметр

Описание

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

securityContext.capabilities.drop

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

[ALL]

securityContext.readOnlyRootFilesystem

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

true

securityContext.runAsNonRoot

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

true

securityContext.runAsUser

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

1001

service - определить настройки Service для loginapp#

Параметр

Описание

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

service.type

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

ClusterIP

service.port

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

5555

service.nodePort

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

Не задан

service.loadBalancerIP

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

Не задан

Параметр

Описание

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

consoleLink.enabled

Включает отображение ссылки на loginapp в интерфейсе консоли

true

ingress - определить настройки Ingress для loginapp#

Параметр

Описание

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

ingress.enabled

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

true

ingress.className

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

"nginx"

ingress.annotations.nginx.ingress.kubernetes.io/backend-protocol

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

"HTTPS"

ingress.hosts

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

- host: „loginapp.“
paths:
- path: /
pathType: Prefix

ingress.tls

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

- secretName: ingress-tls
hosts:
- „loginapp.“

resources - определить requests и limits для контейнера loginapp#

Параметр

Описание

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

resources.limits.cpu

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

200m

resources.limits.memory

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

256Mi

resources.requests.cpu

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

100m

resources.requests.memory

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

128Mi

nodeSelector - определить правила выбора узлов для pod’ов loginapp#

Параметр

Описание

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

nodeSelector

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

{}

tolerations - определить tolerations для pod’ов loginapp#

Параметр

Описание

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

tolerations

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

[]

affinity - определить affinity-правила для pod’ов loginapp#

Параметр

Описание

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

affinity

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

{}

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

Параметр

Описание

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

env

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

{}

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

Параметр

Описание

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

args

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

[]

config - определить основную конфигурацию loginapp и OIDC-подключения#

Параметр

Описание

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

config.name

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

Не задан

config.existingSecret

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

Не задан

config.secret

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

Не задан

config.clientID

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

"dapp"

config.clientSecret

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

"ZGFwcC1zZWNyZXQtZm9yLW9pZGMtYXV0aGVudGljYXRpb24="

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-файлов

[]

configOverwrites - определить произвольные переопределения итоговой конфигурации loginapp#

Параметр

Описание

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

configOverwrites

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

{}

templates - определить переопределения HTML-шаблонов страниц loginapp#

Параметр

Описание

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

templates

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

{}