Version 1.9.x#
This page shows the changelog for Nubus for Kubernetes 1.9.x:
Important
Bundled dependencies using Bitnami images (PostgreSQL, MinIO, Memcached)
require configuration changes, because Bitnami migrated their repositories
from docker.io/bitnami to docker.io/bitnamilegacy.
Deployments that use external dependencies aren’t affected.
For more information, see
Bitnami GitHub issue #35164.
If you deploy these dependencies with Nubus,
override the image repositories in your custom_values.yaml
as shown in the following listing.
postgresql:
  image:
    repository: bitnamilegacy/postgresql
  provisioning:
    image:
      repository: bitnamilegacy/postgresql
minio:
  image:
    repository: bitnamilegacy/minio
nubusUmcServer:
  memcached:
    image:
      repository: bitnamilegacy/memcached
Version 1.9.2 - 2025-05-14#
This is the tenth production release of Nubus for Kubernetes.
Upgrade path
For the upgrade to version 1.9.2, your deployment must run on version 1.8.0. For the general steps to upgrade an existing Nubus for Kubernetes deployment, see Upgrade in Univention Nubus for Kubernetes - Operation Manual [1].
Migration-steps#
This section lists necessary migration steps that may apply to you. You need to run them before the upgrade.
Follow and apply the migration steps outlined in v1.9.1 - Migration steps and in v1.9.0 - Migration steps.
Changes#
- Fix an issue for handling existing custom secrets from - nubusPortalConsumer.objectStorage.auth.accessKeyIdand- nubusPortalConsumer.objectStorage.auth.secretAccessKeyin the Portal Consumer. Affected installation specified those secrets in the custom values. Because of wrong keys, Nubus generated secrets itself instead of using the existing secret values.
- Fix icons in the Portal displaying icons of Management UI with question mark ( - ?) instead of the icon. The UMC Gateway has the icons for UMC in the correct location.
Version 1.9.1 - 2025-05-07#
This is the ninth production release of Nubus for Kubernetes.
Upgrade path
For the upgrade to version 1.9.1, your deployment must run on version 1.8.0. For the general steps to upgrade an existing Nubus for Kubernetes deployment, see Upgrade in Univention Nubus for Kubernetes - Operation Manual [1].
Migration steps#
This section lists necessary migration steps that may apply to you. You need to run them before the upgrade.
- If you defined custom values for security contexts - nubusGuardian.*.securityContext.enabledin the Guardian apply the renames listed in the v1.9.1 - Changes.
- Follow and apply the migration steps outlined in v1.9.0 - Migration steps. 
Changes#
- In the UMC Server of the Management UI, remove the Helm Chart value - nubusUmcServer.containerSecurityContextSssd.supplementalGroups.
- Fix warnings in the Portal Consumer and the UMC Server in the Management UI related to the generated Kubernetes manifests. 
- The Guardian Helm Chart contained unexpected keys, because of mistaking the container security context for the pod security context. - Add the following Helm Chart variables: - nubusGuardian.managementUi.*:- nubusGuardian.openPolicyAgent.*:
- Rename the following Helm Chart variables: - nubusGuardian.authorizationApi.*:- nubusGuardian.authorizationApi.securityContext.allowPrivilegeEscalationto- nubusGuardian.authorizationApi.containerSecurityContext.allowPrivilegeEscalation.
- nubusGuardian.authorizationApi.securityContext.capabilities.dropto- nubusGuardian.authorizationApi.containerSecurityContext.capabilities.drop.
- nubusGuardian.authorizationApi.securityContext.enabledto- nubusGuardian.authorizationApi.containerSecurityContext.enabled.
- nubusGuardian.authorizationApi.securityContext.privilegedto- nubusGuardian.authorizationApi.containerSecurityContext.privileged.
- nubusGuardian.authorizationApi.securityContext.readOnlyRootFilesystemto- nubusGuardian.authorizationApi.containerSecurityContext.readOnlyRootFilesystem.
- nubusGuardian.authorizationApi.securityContext.runAsGroupto- nubusGuardian.authorizationApi.containerSecurityContext.runAsGroup.
- nubusGuardian.authorizationApi.securityContext.runAsNonRootto- nubusGuardian.authorizationApi.containerSecurityContext.runAsNonRoot.
- nubusGuardian.authorizationApi.securityContext.runAsUserto- nubusGuardian.authorizationApi.containerSecurityContext.runAsUser.
- nubusGuardian.authorizationApi.securityContext.seccompProfile.typeto- nubusGuardian.authorizationApi.containerSecurityContext.seccompProfile.type.
 - nubusGuardian.managementApi.*:- nubusGuardian.managementApi.securityContext.allowPrivilegeEscalationto- nubusGuardian.managementApi.containerSecurityContext.allowPrivilegeEscalation.
- nubusGuardian.managementApi.securityContext.capabilities.dropto- nubusGuardian.managementApi.containerSecurityContext.capabilities.drop.
- nubusGuardian.managementApi.securityContext.enabledto- nubusGuardian.managementApi.containerSecurityContext.enabled.
- nubusGuardian.managementApi.securityContext.privilegedto- nubusGuardian.managementApi.containerSecurityContext.privileged.
- nubusGuardian.managementApi.securityContext.readOnlyRootFilesystemto- nubusGuardian.managementApi.containerSecurityContext.readOnlyRootFilesystem.
- nubusGuardian.managementApi.securityContext.runAsGroupto- nubusGuardian.managementApi.containerSecurityContext.runAsGroup.
- nubusGuardian.managementApi.securityContext.runAsNonRootto- nubusGuardian.managementApi.containerSecurityContext.runAsNonRoot.
- nubusGuardian.managementApi.securityContext.runAsUserto- nubusGuardian.managementApi.containerSecurityContext.runAsUser.
- nubusGuardian.managementApi.securityContext.seccompProfile.typeto- nubusGuardian.managementApi.containerSecurityContext.seccompProfile.type.
 - nubusGuardian.managementUi.*:- nubusGuardian.managementUi.securityContext.allowPrivilegeEscalationto- nubusGuardian.managementUi.containerSecurityContext.allowPrivilegeEscalation.
- nubusGuardian.managementUi.securityContext.capabilities.dropto- nubusGuardian.managementUi.containerSecurityContext.capabilities.drop.
- nubusGuardian.managementUi.securityContext.privilegedto- nubusGuardian.managementUi.containerSecurityContext.privileged.
- nubusGuardian.managementUi.securityContext.readOnlyRootFilesystemto- nubusGuardian.managementUi.containerSecurityContext.readOnlyRootFilesystem.
- nubusGuardian.managementUi.securityContext.runAsGroupto- nubusGuardian.managementUi.containerSecurityContext.runAsGroup.
- nubusGuardian.managementUi.securityContext.runAsNonRootto- nubusGuardian.managementUi.containerSecurityContext.runAsNonRoot.
- nubusGuardian.managementUi.securityContext.runAsUserto- nubusGuardian.managementUi.containerSecurityContext.runAsUser.
- nubusGuardian.managementUi.securityContext.seccompProfile.typeto- nubusGuardian.managementUi.containerSecurityContext.seccompProfile.type.
- nubusGuardian.managementUi.podSecurityContextto- nubusGuardian.managementUi.containerSecurityContext.enabled.
 - nubusGuardian.openPolicyAgent.*:- nubusGuardian.openPolicyAgent.securityContext.allowPrivilegeEscalationto- nubusGuardian.openPolicyAgent.containerSecurityContext.allowPrivilegeEscalation.
- nubusGuardian.openPolicyAgent.securityContext.capabilities.dropto- nubusGuardian.openPolicyAgent.containerSecurityContext.capabilities.drop.
- nubusGuardian.openPolicyAgent.securityContext.privilegedto- nubusGuardian.openPolicyAgent.containerSecurityContext.privileged.
- nubusGuardian.openPolicyAgent.securityContext.readOnlyRootFilesystemto- nubusGuardian.openPolicyAgent.containerSecurityContext.readOnlyRootFilesystem.
- nubusGuardian.openPolicyAgent.securityContext.runAsGroupto- nubusGuardian.openPolicyAgent.containerSecurityContext.runAsGroup.
- nubusGuardian.openPolicyAgent.securityContext.runAsNonRootto- nubusGuardian.openPolicyAgent.containerSecurityContext.runAsNonRoot.
- nubusGuardian.openPolicyAgent.securityContext.runAsUserto- nubusGuardian.openPolicyAgent.containerSecurityContext.runAsUser.
- nubusGuardian.openPolicyAgent.securityContext.seccompProfile.typeto- nubusGuardian.openPolicyAgent.containerSecurityContext.seccompProfile.type.
 - nubusGuardian.provisioning.*:- nubusGuardian.provisioning.securityContext.allowPrivilegeEscalationto- nubusGuardian.provisioning.containerSecurityContext.allowPrivilegeEscalation.
- nubusGuardian.provisioning.securityContext.enabledto- nubusGuardian.provisioning.containerSecurityContext.enabled.
- nubusGuardian.provisioning.securityContext.privilegedto- nubusGuardian.provisioning.containerSecurityContext.privileged.
- nubusGuardian.provisioning.securityContext.readOnlyRootFilesystemto- nubusGuardian.provisioning.containerSecurityContext.readOnlyRootFilesystem.
- nubusGuardian.provisioning.securityContext.runAsGroupto- nubusGuardian.provisioning.containerSecurityContext.runAsGroup.
- nubusGuardian.provisioning.securityContext.runAsNonRootto- nubusGuardian.provisioning.containerSecurityContext.runAsNonRoot.
- nubusGuardian.provisioning.securityContext.runAsUserto- nubusGuardian.provisioning.containerSecurityContext.runAsUser.
- nubusGuardian.provisioning.securityContext.seccompProfile.typeto- nubusGuardian.provisioning.containerSecurityContext.seccompProfile.type.
 
 
Version 1.9.0 - 2025-05-04#
This is the eighth production release of Nubus for Kubernetes.
Upgrade path
For the upgrade to version 1.9.0, your deployment must run on version 1.8.0. For the general steps to upgrade an existing Nubus for Kubernetes deployment, see Upgrade in Univention Nubus for Kubernetes - Operation Manual [1].
Release highlights#
Nubus for Kubernetes 1.9.0 provides the following highlights:
- Preview feature: News feed integration into the Portal Service supporting the Rich Site Summary (RSS) and Atom specification. 
- In the Management UI, the UMC Server container and its sidecar container with SSSD run as non-root. 
- Update Keycloak in the Identity Provider from version 25 to version 26. 
Important
With version 1.9.0, Nubus for Kubernetes enforces licenses. If operators already had a license installed, Nubus didn’t enforce the license before. For information about how to add a license to Nubus for Kubernetes, see Nubus license.
To validate if a license is already present, run the command in Listing 8.
$ export NAMESPACE_FOR_NUBUS="Set to your Kubernetes namespace"
$ kubectl exec \
    --namespace "$NAMESPACE_FOR_NUBUS" \
    -it \
    nubus-ldap-server-primary-0 \
    -- bash -c "slapcat | sed -nr '/dn:.*?,cn=license/,/^\s*$/p'"
The result looks similar to the output in Listing 9.
In case for a paid-support license,
the field univentionLicenseUsers has an integer number.
Nubus now enforces the given univentionLicenseUsers in the Management UI.
...
univentionLicenseBaseDN: UCS Core Edition
...
univentionLicenseUsers: unlimited
...
Migration steps#
This section lists necessary migration steps that may apply to you. You need to run them before the upgrade.
- You need to provide PostgreSQL at least in version 15 or later, because of Keycloak 26. 
- Operators that use their own secrets in the Portal Consumer, need to adjust to the - existingSecretsettings. For more information, see the documented Helm Chart variable renames in the Portal Consumer section.
- Operators that use their own secrets for the Guardian, need to adjust to the - existingSecretsettings. For more information, see the documented Helm Chart variable renames in the Guardian Helm chart section.
- Adjust your branding for the favicon. Nubus supports additional favicons with higher resolution to support, for example, browser preferences and shortcuts on home screens in Android and iOS mobile devices. - Besides - nubusPortalFrontend.portalFrontend.branding.favicon, add the Helm Chart values as outlined the changes for the Portal Frontend.
Changes#
- The UMC Server container and the sidecar container to UMC Server with SSSD run as a non-root user. - Add the Helm Chart value - nubusUmcServer.sssd.debugLevel.
- Packaged integrations continue to work, when Kubernetes restarts pods. Before, packaged integrations only worked when Kubernetes (re)created the pods. 
- Add license support to Nubus for Kubernetes. - An explicit Helm Chart enables operators to add a license for Nubus. Furthermore, Nubus for Kubernetes enforces license restrictions. - The change adds the following Helm Chart values: 
- nubusLicenseImport.ldap.auth.existingSecret.keyMapping.password
- nubusLicenseImport.ldap.auth.username
- nubusLicenseImport.ldap.baseDn
 
- Add Helm Chart values to configure error messages and their translations for Keycloak. - German: 
- English: 
 
- Introduce semantic versioning for the Univention Keycloak container image. The container image version numbering deliberately restarts at 0.0.1, to avoid confusion with the version of Keycloak inside the container, as the image contains more artifacts than just Keycloak. 
- Update all components in Nubus for Kubernetes to use the UCS 5.2-1 base image and include bug fixes up to the errata update UCS 5.2 erratum 73. For UCS errata updates, see Security and bugfix errata for UCS 5.2. Reference date is 24. April 2025. 
- Replace references to the Helm Chart registry - docker.iowith- charts.bitnami.comfor bundled dependencies to avoid rate limits and because Helm doesn’t have a pull proxy option for Helm Charts.
- Add support to customize the LDAP indexes in the Directory Service during upgrades. The Directory Service identifies the changed indexes at startup time and automatically runs slapindex for all required attributes. - The index customization increases the startup time of the Directory Service for once, at the next start. As a rough estimation, the index creation takes about 2 minutes per attribute per 100,000 users. - Add the - univentionObjectIdentifierLDAP attribute to the default index in the UCR configuration through the- global.configUcr.ldap.index.eqand- global.configUcr.ldap.index.presHelm Chart values.- Add the following Helm Chart values: 
- Add the following Helm Chart values related to security: - nubusUmcServer.containerSecurityContextSssd.supplementalGroups
 
Portal Consumer#
Refactor the Portal Consumer Helm Chart
to follow the strategy for using Kubernetes secrets in Nubus for Kubernetes.
The Portal Consumer allows using existingSecret Helm Chart values for the following items:
- LDAP authentication credentials 
- S3-compatible object storage authentication credentials 
- Provisioning API authentication credentials 
Add the following Helm Chart values:
- nubusPortalConsumer.ldap.auth.existingSecret.keyMapping.password
- nubusPortalConsumer.provisioningApi.connection.baseUrl
- nubusPortalConsumer.provisioningApi.auth.existingSecret.keyMapping.password
- nubusPortalConsumer.provisioningApi.auth.existingSecret.name
Rename the following Helm Chart values:
- nubusPortalConsumer.objectStorage.auth.accessKeyto- nubusPortalConsumer.objectStorage.auth.existingSecret.keyMapping.accessKey.
- nubusPortalConsumer.objectStorage.auth.secretKeyto- nubusPortalConsumer.objectStorage.auth.existingSecret.keyMapping.secretKey.
- nubusPortalConsumer.containerSecurityContextNonRoot.readOnlyRootFilesystemto- nubusPortalConsumer.containerSecurityContext.readOnlyRootFilesystem.
- nubusPortalConsumer.containerSecurityContextNonRoot.runAsGroupto- nubusPortalConsumer.containerSecurityContext.runAsGroup.
- nubusPortalConsumer.containerSecurityContextNonRoot.runAsNonRootto- nubusPortalConsumer.containerSecurityContext.runAsNonRoot.
- nubusPortalConsumer.containerSecurityContextNonRoot.runAsUserto- nubusPortalConsumer.containerSecurityContext.runAsUser.
- nubusPortalConsumer.provisioningApi.auth.credentialSecret.nameto- nubusPortalConsumer.provisioningApi.auth.existingSecret.name.
- nubusPortalConsumer.provisioningApi.auth.credentialSecret.keyto- nubusPortalConsumer.provisioningApi.auth.existingSecret.keyMapping.password.
Remove the following Helm Chart values:
- nubusPortalConsumer.objectStorage.bucketName
- nubusPortalConsumer.portalConsumer.objectStorageAccessKeyId
- nubusPortalConsumer.portalConsumer.objectStorageCredentialSecret.accessKeyKey
- nubusPortalConsumer.portalConsumer.objectStorageCredentialSecret.name
- nubusPortalConsumer.portalConsumer.objectStorageCredentialSecret.secretKeyKey
- nubusPortalConsumer.portalConsumer.objectStorageSecretAccessKey
- nubusPortalConsumer.provisioningApi.auth.existingSecret.name
Guardian Helm chart#
Refactor the Guardian Helm Chart to follow the strategy for using Kubernetes secrets in Nubus for Kubernetes. Fix issues with the security context in the Guardian Helm Chart.
Add the following Helm Chart values:
- nubusGuardian.authorizationApi.*:
- nubusGuardian.managementApi.*:
- nubusGuardian.managementApi.oauth.auth.existingSecret.keyMapping.clientSecret
- nubusGuardian.managementApi.securityContext.enabled`
 
- nubusGuardian.provisioning.*:
- nubusGuardian.provisioning.securityContext.enabled
 
Rename the following Helm Chart values:
- nubusGuardian.provisioning.config.keycloak.realmto- nubusGuardian.provisioning.keycloak.realm.
- nubusGuardian.provisioning.config.keycloak.usernameto- nubusGuardian.provisioning.keycloak.auth.username.
- nubusGuardian.provisioning.config.keycloak.passwordto- nubusGuardian.provisioning.keycloak.auth.password.
- nubusGuardian.provisioning.config.keycloak.credentialSecret.nameto- nubusGuardian.provisioning.keycloak.auth.existingSecret.name.
- nubusGuardian.provisioning.config.keycloak.credentialSecret.keyto- nubusGuardian.provisioning.keycloak.auth.existingSecret.keyMapping.password.
- nubusGuardian.provisioning.config.keycloak.connection.hostto- nubusGuardian.provisioning.keycloak.connection.host.
- nubusGuardian.provisioning.config.keycloak.connection.portto- nubusGuardian.provisioning.keycloak.connection.port.
- nubusGuardian.postgresql.credentialSecret.nameto- nubusGuardian.postgresql.auth.existingSecret.name.
- nubusGuardian.postgresql.credentialSecret.keyto- nubusGuardian.postgresql.auth.existingSecret.keyMapping.password.
Remove the following Helm Chart values:
- nubusGuardian.authorizationApi.config.udmDataAdapterUsername
- nubusGuardian.authorizationApi.config.udmDataAdapterPassword
- nubusGuardian.authorizationApi.config.secretRef- Reason for removal: Changed to the - existingSecretstrategy in Nubus for Kubernetes.
- Alternative configuration: See Added helm values 
 
- nubusGuardian.managementApi.config.oauthAdapterM2mSecret
- nubusGuardian.managementApi.config.secretRef- Reason for removal: Changed to the - existingSecretstrategy in Nubus for Kubernetes.
- Alternative configuration: See Added helm values 
 
- nubusGuardian.provisioning.config.managementApi.clientSecret
- nubusGuardian.provisioning.config.managementApi.credentialSecret.key- Reason for removal: Not used anymore, used the values from - nubusGuardian.managementApi.oauth.auth
- Alternative configuration: See Added helm values 
 
- nubusGuardian.postgresql.nameOverride
- nubusGuardian.postgresql.bundled:- Reason for removal: The bundled psql deployment is no longer supported 
- Alternative configuration: Configure the connection to your psql database using the values of the chart. 
 
Portal Frontend#
Add the following features and fixes to the Portal Frontend:
- Fix for handling of translated strings in Portal entries and Portal announcements. The Portal Service now checks for available localization first in the user’s language, then in English, and finally any available language, to avoid empty text in Portal entries and Portal announcements. 
- Experimental feature to display a news feed from either an RSS or Atom source, such as a XWiki instance or a Wordpress blog. To activate the feature, set - nubusPortalServer.portalServer.featureToggles.newsfeedto- true. The default value is- falseand deactivates the feature.- To configure the news feed, you need to set the Helm Chart values in - nubusPortalServer.portalServer.newsfeed.*:
- nubusPortalServer.portalServer.newsfeed.feedtype
 
- Add support for additional resolutions and formats of the favicon. - Add the following Helm Chart values for the favicon. All values must be a Base64 encoded string of images in PNG format, except the - faviconSvgwhich must be in SVG format.
- In the quick links, avoid to display a question mark, when a quick link doesn’t have an image configured.