Выбор схемы развертывания
Описание
Перед Helm-чартаустановкой
Helm-чартBlitz нужно blitz-idpустанавливаетвыбрать, как именно будет поставляться конфигурация приложения. В чарте поддерживаются две рабочие схемы, и от этого выбора зависят состав ресурсов в кластеркластере, наборспособ приложенийобновления и вспомогательныхпорядок ресурсов,сопровождения.
Две длясхемы, работыкоторые Blitzподдерживает Identityчарт
Схема 1. Конфигурация внутри образов
В зависимостиэтой от конфигурации и включённых модулей чарт может создавать:
DeploymentиStatefulSetдля модулей BlitzServiceдля внутреннего и внешнего доступаIngressдля публикации HTTP-маршрутовSecretиConfigMapдля статической конфигурацииPersistentVolumeClaimдля общей динамической конфигурацииJobначальной загрузки конфигурацииPodDisruptionBudgetNetworkPolicyServiceMonitorиPodMonitorресурсы Vault Secrets Operator, если включена интеграция с Vault
Версия чарта требует Kubernetes не ниже 1.26.
Основные модули Blitz
Чарт поддерживает следующие модули:
idp— основной модуль аутентификации и выдачи identity-сервисовconsole— административная консоль Blitzreg— модуль регистрацииrecovery— модуль восстановления доступаpanel— дополнительный пользовательский веб-модульldapMfa— сервис LDAP MFA
По умолчанию в чарте включены idp, console, reg, recovery. Модули panel и ldapMfa включаются отдельно через конфигурацию чарта.
Схема конфигурации
В чартесхеме используется двухуровневая модель конфигурации:
статическая конфигурациядинамическая конфигурация
Статическая конфигурация
Статическая конфигурация рендерится Helm и попадает в Secret, ConfigMap или, при использовании Vault, в VaultStaticSecret.
Типовые статические файлы:
boot.confoverlay.confplay.conflogback.xmlblitz-keystore.bksconsole.conf
Для модулей Blitz эти файлы по умолчанию монтируются в каталог:режим:
/usr/share/identityblitz/blitz-configconfig:
readOnly: Динамическая конфигурация
Динамическая конфигурация используется в сценариях, где конфиги поставляются не только внутри образа, но и из внешнего источника.
По умолчанию она размещается по пути:
/usr/share/identityblitz/idp-configtrue
ЕслиЗдесь выбран режим config.readOnly=false, чарт использует общий PersistentVolumeClaim и публикует туда конфигурацию через специальный Job.
Два режима поставки конфигурации
Режим image-only
Режим config.readOnly=true подходит для случаев, когдафайловая конфигурация уже встроена в Docker-образобразы модулей Blitz, а чарт отвечает только за запуск подов и еёподключение ненеобходимых нужно инициализировать из Git или локального каталога.Kubernetes-ресурсов.
Особенности режима:Преимущества:
нетсамаяобщегопростая эксплуатация- меньше зависимостей во время установки
- не нужен
PersistentVolumeClaim - не
запускаетсянуженinit-confJob эксплуатацияменьшепрощерисков,исвязанныхбезопаснеес начальной публикацией файлов
Ограничения:
- изменения конфигурации
вносятсяобычночерезтребуютпересборкуобновления образов - сложнее отделить жизненный цикл приложения от жизненного цикла конфигурации
Эта схема подходит, если:
- конфигурация редко меняется
- есть контролируемый процесс сборки образов
- важнее предсказуемость и простота запуска
РежимСхема Git/Local2. ->Динамическая PVCконфигурация из Git или локального источника
РежимВ этой схеме используется режим:
config:
readOnly: false
В этом случае конфигурация публикуется в общий каталог через PersistentVolumeClaim, а источником служит:
- Git-репозиторий
- локальный каталог на узле
Пример настройки для Git:
config:
readOnly: false
source:
type: git
git:
repo: https://git.company.loc/blitz/blitz-config.git
ref: main
depth: 1
auth:
existingSecret: blitz-config-git-creds
usernameKey: username
passwordKey: password
Преимущества:
- конфигурация отделена от образов
- удобнее сопровождать дерево конфигурации как отдельный артефакт
- можно использовать единый Git-репозиторий как источник правды
Ограничения:
- появляется зависимость от
PersistentVolumeClaim - установка становится сложнее
- нужно контролировать начальную загрузку конфигурации
- обновления требуют более аккуратной проверки
Эта схема подходит, если:
- конфигурация Blitz живёт в отдельном репозитории
- есть требования к сопровождению конфигов вне процесса сборки образов
- нужно публиковать динамические каталоги в runtime
Роль init-conf
При config.readOnly=false нужен,чарт когдаможет запускать Job, который публикует конфигурацию требуется публиковать в общийобщее каталог во время установки.хранилище.
Особенностиinit-conf режима:делает следующее:
используетсякопирует исходные файлы во временную staging-зону- не изменяет исходный Git-репозиторий или локальный каталог
- переносит
blitz.confвroot/blitz.conf - публикует только разрешённые каталоги верхнего уровня
- при наличии публикует конфигурацию
panel - при доступности секрета инициализирует
credentials
Чарт публикует в PersistentVolumeClaim только следующие верхнеуровневые пути:
appsassetscaptchascustom_messagesdynamicflowsmethodsrootsamltoken_exchangemisc
Если в дереве конфигурации присутствует panel, он обрабатывается отдельно:
panel/app.confпубликуется в{{ .Values.dataPath }}/blitz-panel/app.confpanel/icons/*публикуются в{{ .Values.dataPath }}/blitz-panel/static/*
Признак готовности конфигурации для рабочих pod
Когда для релиза ожидается первичная публикация конфигурации, чарт может добавить в рабочие модули initContainer, который ожидает готовности общей конфигурации.
Это нужно, чтобы:
idpconsolerecoveryregpanel
не стартовали раньше времени и не столкнулись с пустым каталогом конфигурации.
Практический выбор схемы
Выбирайте config.readOnly=true, если
- хотите самый простой запуск
- готовы обновлять конфигурацию через Docker-образы
- не хотите использовать общий
PersistentVolumeClaim источникне планируете выносить конфиги в отдельный Git-процесс
Выбирайте config.readOnly=false, если
- конфигурация Blitz уже ведётся в Git
- нужен общий runtime-каталог с конфигами
- есть требования к публикации
flows,assets,custom_messagesи других директорий без пересборки образов - команда эксплуатации готова сопровождать
PersistentVolumeClaim,Jobи порядок обновлений
Важные последствия выбора
Для обновлений
При динамической конфигурациисхеме задаётсяотдельно черезконтролируйте параметр:
config:
source:
git:
reseedOnUpgrade: false
Если включить , чарт будет повторно публиковать конфигурацию при обновлении релиза. Это полезно не всегда и должно использоваться осознанно.config.source.typereseedOnUpgrade
Для безопасности
Даже в режиме readOnly=false статическая и динамическая конфигурация остаются разделёнными. Это сделано специально, чтобы:
- не смешивать runtime-секреты и публикуемые файлы
создаётсяуменьшить риск неконтролируемых изменений- сохранить предсказуемый жизненный цикл конфигурации
Для эксплуатации
Режим с требует более внимательного сопровождения:init-confPersistentVolumeClaim
- проверять состояние
Job рабочиеконтролироватьподыдоступностьмогутхранилища- понимать,
готовностикогдаконфигурацииконфигурациячерезбылаопубликована повторноinitContainer
Kubernetes-ресурсы
Ingress
Ingress публикует HTTP-эндпоинты Blitz наружу. Чарт поддерживает настройку класса ingress-контроллера, аннотаций и TLS-секрета.
PersistentVolumeClaim
PersistentVolumeClaim нужен только в сценарии с динамической конфигурацией. Он хранит конфигурацию и вспомогательные ресурсы, доступные модулям Blitz IDP.
Vault и VSO
Если используется vault.enabled=true, чарт может забирать секреты из HashiCorp Vault через Vault Secrets Operator. В этом случае вместо прямого создания некоторых Secret в кластере используются ресурсы:
VaultConnectionVaultAuthVaultStaticSecret
PodDisruptionBudget
PodDisruptionBudget защищает модули от добровольных прерываний, например при kubectl drain или плановом обслуживании узлов.
NetworkPolicy
NetworkPolicy ограничивает сетевой доступ к подам Blitz. В чарте есть как более мягкий режим, так и строгий режим с явными правилами.