Модуль stronghold переключается с базового Stronghold на Stronghold EE указанием лицензионного ключа в параметре spec.settings.license ресурса ModuleConfig stronghold. Переустанавливать модуль и переносить данные не требуется: секреты, политики, механизмы секретов и настроенные методы аутентификации сохраняются.

Stronghold EE лицензируется отдельно и доступен для использования только в коммерческих редакциях Deckhouse Platform. В Deckhouse Platform Open переключение на Stronghold EE невозможно. Подробнее — в разделе «Редакции».

После применения лицензионного ключа в режиме Automatic поды stronghold-* пересоздаются на образе Stronghold EE по очереди, поэтому доступность сервиса остаётся прежней. В режиме Manual поды нужно пересоздать вручную. Тем не менее выполняйте переключение строго в окне обслуживания.

Перед переключением

Перед переключением проверьте следующее:

  1. Убедитесь, что в кластере используется коммерческая редакция Deckhouse Platform:

    d8 k -n d8-system get configmap d8-deckhouse-version-info -o jsonpath='{.data.data\.json}'

    В json объекте должна быть указана редакция, отличная от CE. Пример вывода:

    { "channel":"Stable", "version":"v1.76.0", "edition":"EE" }
    

    Также редакцию и версию Deckhouse Platform можно посмотреть в веб-интерфейсе Deckhouse на главной странице панели управления кластером (https://console.<CLUSTER_DOMAIN>).

    Если требуется сменить редакцию Deckhouse Platform, воспользуйтесь инструкцией по переключению редакции Deckhouse Platform.

  2. Убедитесь, что модуль stronghold включён и находится в рабочем состоянии:

    d8 k get module stronghold
    d8 k get moduleconfig stronghold -o yaml

    Проверьте, что:

    • для модуля stronghold значения Enabled и Ready равны True;
    • объект ModuleConfig stronghold существует.
  3. Сохраните ключи распечатывания и root-токен в защищённое хранилище:

    d8 k -n d8-stronghold get secret stronghold-keys -o yaml > stronghold-keys.yaml
    chmod 600 stronghold-keys.yaml
  4. Создайте снимок хранилища. Пример ниже подходит только для инлета Ingress (хост берётся из Ingress stronghold) и режима Automatic (вход через OIDC Dex); для других инлетов и режимов задайте STRONGHOLD_ADDR самостоятельно и используйте другой метод входа:

    export STRONGHOLD_ADDR=https://$(d8 k -n d8-stronghold get ing stronghold -o json | jq -r '.spec.rules[0].host')
    d8 stronghold login -method=oidc -path=oidc_deckhouse
    # Либо через root-токен:
    ## d8 stronghold login -method=token
    d8 stronghold operator raft snapshot save stronghold-$(date +%F_%H-%M).snap

    Проверить снимок можно с помощью команды:

    ls -lh ./stronghold-*.snap

    Полученные файлы храните за пределами кластера Deckhouse Platform.

Указание лицензионного ключа

Чтобы указать лицензионный ключ, выполните следующие действия:

  1. Получите лицензионный ключ Stronghold EE у поставщика продукта. Параметр license должен быть строкой не короче 32 символов, иначе конфигурация будет отклонена с ошибкой Invalid license format.

  2. Добавьте ключ в параметр spec.settings.license ресурса ModuleConfig stronghold:

    d8 k patch moduleconfig stronghold --type merge --patch '{"spec":{"version":1,"settings":{"license":"<STRONGHOLD_EE_LICENSE_KEY>"}}}'

    Тот же результат можно получить, отредактировав ModuleConfig командой d8 k edit mc stronghold. Пример итогового манифеста:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: stronghold
    spec:
      enabled: true
      version: 1
      settings:
        license: <STRONGHOLD_EE_LICENSE_KEY>
        management:
          mode: Automatic
          administrators:
          - type: Group
            name: admins

    Лицензионный ключ хранится в ModuleConfig в открытом виде. При необходимости ограничьте доступ к ресурсу средствами ролевой модели.

  3. Дождитесь пересоздания подов Stronghold:

    d8 k -n d8-stronghold get po -w

Проверка переключения

После переключения проверьте результат:

  1. Убедитесь, что ключ сохранился в конфигурации модуля:

    d8 k get moduleconfig stronghold -o jsonpath='{.spec.settings.license}'
  2. Проверьте поды stronghold:

    d8 k -n d8-stronghold get po

    Проверьте, что:

    • отсутствуют состояния ImagePullBackOff, ErrImagePull, CrashLoopBackOff;
    • поды stronghold-* находятся в состоянии Running и имеют готовность 2/2.
  3. Проверьте редакцию в стартовых строках баннера:

    d8 k -n d8-stronghold logs stronghold-0 | head -20

    В выводе должна быть указана версия с суффиксом ee. Например:

    Version: Stronghold v1.19.0+ee
    
  4. Убедитесь, что хранилище распечатано (как и выше, пример подходит для инлета Ingress):

    export STRONGHOLD_ADDR=https://$(d8 k -n d8-stronghold get ing stronghold -o json | jq -r '.spec.rules[0].host')
    d8 stronghold status

    В выводе значение Sealed должно быть равно false.

После переключения станут доступны возможности Stronghold EE: журнал аудита, неймспейсы, репликация между кластерами, автоматические снимки, Managed Keys, управление ролями и политиками доступа через веб-интерфейс. Полный перечень отличий — в разделе «Редакции».

Возврат к базовому Stronghold

Модуль можно вернуть к базовой редакции Stronghold, удалив лицензионный ключ.

После удаления лицензионного ключа возможности Stronghold EE перестанут работать. Заранее отключите их использование, иначе модуль может не запуститься. В частности, установите enableAuditLog: false, остановите репликацию между кластерами и удалите созданные неймспейсы.

  1. Сначала отключите журнал аудита: установите enableAuditLog: false в ModuleConfig stronghold. Значение enableAuditLog: true без лицензии отклоняется, поэтому сделайте это до удаления лицензии.

  2. Удалите параметр spec.settings.license целиком:

    d8 k patch moduleconfig stronghold --type json --patch '[{"op":"remove","path":"/spec/settings/license"}]'
  3. Дождитесь пересоздания подов и убедитесь, что в баннере указана версия без суффикса ee:

    d8 k -n d8-stronghold logs stronghold-0 | head -20

Дополнительные ресурсы