The stronghold module is switched from base Stronghold to Stronghold EE by specifying a license key in the spec.settings.license parameter of the stronghold ModuleConfig resource. You do not need to reinstall the module or migrate data: secrets, policies, secrets engines, and configured auth methods are preserved.
Stronghold EE is licensed separately and is available only in commercial DP editions. Switching to Stronghold EE is not possible in DP CE. For details, see Editions.
After the license key is applied, in the Automatic mode, the stronghold-* pods are recreated one by one on the Stronghold EE image, so service availability stays the same. In the Manual mode, recreate the pods manually. Nevertheless, perform the switch strictly during a maintenance window.
Before switching
Before switching, check the following:
Make sure the cluster uses a commercial DP edition:
d8 k -n d8-system get configmap d8-deckhouse-version-info -o jsonpath='{.data.data\.json}'The
jsonobject must contain an edition other thanCE. Example output:{ "channel":"Stable", "version":"v1.76.0", "edition":"EE" }You can also see the DP edition and version in the Deckhouse web interface on the main page of the cluster management console (
https://console.<CLUSTER_DOMAIN>).If you need to change the DP edition, follow the instructions for switching the DP edition.
Make sure the
strongholdmodule is enabled and working:d8 k get module stronghold d8 k get moduleconfig stronghold -o yamlCheck that:
EnabledandReadyareTruefor thestrongholdmodule;- the
strongholdModuleConfig object exists.
Save the unseal keys and the root token to a secure storage:
d8 k -n d8-stronghold get secret stronghold-keys -o yaml > stronghold-keys.yaml chmod 600 stronghold-keys.yamlCreate a storage snapshot. The example below applies only to the
Ingressinlet (it reads the host from thestrongholdIngress) and theAutomaticmode (OIDC login through Dex); for other inlets and modes, setSTRONGHOLD_ADDRyourself and log in with another method: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 # Or using the root token: ## d8 stronghold login -method=token d8 stronghold operator raft snapshot save stronghold-$(date +%F_%H-%M).snapYou can check the snapshot with the following command:
ls -lh ./stronghold-*.snapStore the resulting files outside the DP cluster.
Specifying the license key
To specify the license key, do the following:
Get a Stronghold EE license key from the product vendor. The
licenseparameter must be a string of at least 32 characters; otherwise, the configuration is rejected with theInvalid license formaterror.Add the key to the
spec.settings.licenseparameter of thestrongholdModuleConfig resource:d8 k patch moduleconfig stronghold --type merge --patch '{"spec":{"version":1,"settings":{"license":"<STRONGHOLD_EE_LICENSE_KEY>"}}}'You can get the same result by editing the ModuleConfig with
d8 k edit mc stronghold. Example of the resulting manifest: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: adminsThe license key is stored in ModuleConfig in plain text. If necessary, restrict access to the resource using the role model.
Wait for the Stronghold pods to be recreated:
d8 k -n d8-stronghold get po -w
Verifying the switch
After switching, check the result:
Make sure the key has been saved in the module configuration:
d8 k get moduleconfig stronghold -o jsonpath='{.spec.settings.license}'Check the
strongholdpods:d8 k -n d8-stronghold get poCheck that:
- there are no
ImagePullBackOff,ErrImagePull, orCrashLoopBackOffstates; - the
stronghold-*pods are in theRunningstate with2/2readiness.
- there are no
Check the edition in the startup banner lines:
d8 k -n d8-stronghold logs stronghold-0 | head -20The output must contain a version with the
eesuffix. For example:Version: Stronghold v1.19.0+eeMake sure the storage is unsealed (as above, the example applies to the
Ingressinlet):export STRONGHOLD_ADDR=https://$(d8 k -n d8-stronghold get ing stronghold -o json | jq -r '.spec.rules[0].host') d8 stronghold statusIn the output,
Sealedmust befalse.
After the switch, Stronghold EE features become available: the audit log, namespaces, replication between clusters, automated snapshots, Managed Keys, and management of roles and access policies via the web interface. For the full list of differences, see Editions.
Reverting to base Stronghold
You can return the module to base Stronghold by removing the license key.
After the license key is removed, Stronghold EE features stop working. Stop using them in advance; otherwise, the module may fail to start. In particular, set enableAuditLog: false, stop replication between clusters, and delete the namespaces you created.
Disable the audit log first: set
enableAuditLog: falsein thestrongholdModuleConfig. SettingenableAuditLog: truewithout a license is rejected, so do this before removing the license.Remove the
spec.settings.licenseparameter entirely:d8 k patch moduleconfig stronghold --type json --patch '[{"op":"remove","path":"/spec/settings/license"}]'Wait for the pods to be recreated and make sure the banner shows a version without the
eesuffix:d8 k -n d8-stronghold logs stronghold-0 | head -20