Version 1.9.x#
This page shows the changelog for Nubus for Kubernetes 1.9.x:
Version 1.9.2 - 2025-05-14#
This is the ninth 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.accessKeyId
andnubusPortalConsumer.objectStorage.auth.secretAccessKey
in 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 eight 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.enabled
in 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.allowPrivilegeEscalation
tonubusGuardian.authorizationApi.containerSecurityContext.allowPrivilegeEscalation
.nubusGuardian.authorizationApi.securityContext.capabilities.drop
tonubusGuardian.authorizationApi.containerSecurityContext.capabilities.drop
.nubusGuardian.authorizationApi.securityContext.enabled
tonubusGuardian.authorizationApi.containerSecurityContext.enabled
.nubusGuardian.authorizationApi.securityContext.privileged
tonubusGuardian.authorizationApi.containerSecurityContext.privileged
.nubusGuardian.authorizationApi.securityContext.readOnlyRootFilesystem
tonubusGuardian.authorizationApi.containerSecurityContext.readOnlyRootFilesystem
.nubusGuardian.authorizationApi.securityContext.runAsGroup
tonubusGuardian.authorizationApi.containerSecurityContext.runAsGroup
.nubusGuardian.authorizationApi.securityContext.runAsNonRoot
tonubusGuardian.authorizationApi.containerSecurityContext.runAsNonRoot
.nubusGuardian.authorizationApi.securityContext.runAsUser
tonubusGuardian.authorizationApi.containerSecurityContext.runAsUser
.nubusGuardian.authorizationApi.securityContext.seccompProfile.type
tonubusGuardian.authorizationApi.containerSecurityContext.seccompProfile.type
.
nubusGuardian.managementApi.*
:nubusGuardian.managementApi.securityContext.allowPrivilegeEscalation
tonubusGuardian.managementApi.containerSecurityContext.allowPrivilegeEscalation
.nubusGuardian.managementApi.securityContext.capabilities.drop
tonubusGuardian.managementApi.containerSecurityContext.capabilities.drop
.nubusGuardian.managementApi.securityContext.enabled
tonubusGuardian.managementApi.containerSecurityContext.enabled
.nubusGuardian.managementApi.securityContext.privileged
tonubusGuardian.managementApi.containerSecurityContext.privileged
.nubusGuardian.managementApi.securityContext.readOnlyRootFilesystem
tonubusGuardian.managementApi.containerSecurityContext.readOnlyRootFilesystem
.nubusGuardian.managementApi.securityContext.runAsGroup
tonubusGuardian.managementApi.containerSecurityContext.runAsGroup
.nubusGuardian.managementApi.securityContext.runAsNonRoot
tonubusGuardian.managementApi.containerSecurityContext.runAsNonRoot
.nubusGuardian.managementApi.securityContext.runAsUser
tonubusGuardian.managementApi.containerSecurityContext.runAsUser
.nubusGuardian.managementApi.securityContext.seccompProfile.type
tonubusGuardian.managementApi.containerSecurityContext.seccompProfile.type
.
nubusGuardian.managementUi.*
:nubusGuardian.managementUi.securityContext.allowPrivilegeEscalation
tonubusGuardian.managementUi.containerSecurityContext.allowPrivilegeEscalation
.nubusGuardian.managementUi.securityContext.capabilities.drop
tonubusGuardian.managementUi.containerSecurityContext.capabilities.drop
.nubusGuardian.managementUi.securityContext.privileged
tonubusGuardian.managementUi.containerSecurityContext.privileged
.nubusGuardian.managementUi.securityContext.readOnlyRootFilesystem
tonubusGuardian.managementUi.containerSecurityContext.readOnlyRootFilesystem
.nubusGuardian.managementUi.securityContext.runAsGroup
tonubusGuardian.managementUi.containerSecurityContext.runAsGroup
.nubusGuardian.managementUi.securityContext.runAsNonRoot
tonubusGuardian.managementUi.containerSecurityContext.runAsNonRoot
.nubusGuardian.managementUi.securityContext.runAsUser
tonubusGuardian.managementUi.containerSecurityContext.runAsUser
.nubusGuardian.managementUi.securityContext.seccompProfile.type
tonubusGuardian.managementUi.containerSecurityContext.seccompProfile.type
.nubusGuardian.managementUi.podSecurityContext
tonubusGuardian.managementUi.containerSecurityContext.enabled
.
nubusGuardian.openPolicyAgent.*
:nubusGuardian.openPolicyAgent.securityContext.allowPrivilegeEscalation
tonubusGuardian.openPolicyAgent.containerSecurityContext.allowPrivilegeEscalation
.nubusGuardian.openPolicyAgent.securityContext.capabilities.drop
tonubusGuardian.openPolicyAgent.containerSecurityContext.capabilities.drop
.nubusGuardian.openPolicyAgent.securityContext.privileged
tonubusGuardian.openPolicyAgent.containerSecurityContext.privileged
.nubusGuardian.openPolicyAgent.securityContext.readOnlyRootFilesystem
tonubusGuardian.openPolicyAgent.containerSecurityContext.readOnlyRootFilesystem
.nubusGuardian.openPolicyAgent.securityContext.runAsGroup
tonubusGuardian.openPolicyAgent.containerSecurityContext.runAsGroup
.nubusGuardian.openPolicyAgent.securityContext.runAsNonRoot
tonubusGuardian.openPolicyAgent.containerSecurityContext.runAsNonRoot
.nubusGuardian.openPolicyAgent.securityContext.runAsUser
tonubusGuardian.openPolicyAgent.containerSecurityContext.runAsUser
.nubusGuardian.openPolicyAgent.securityContext.seccompProfile.type
tonubusGuardian.openPolicyAgent.containerSecurityContext.seccompProfile.type
.
nubusGuardian.provisioning.*
:nubusGuardian.provisioning.securityContext.allowPrivilegeEscalation
tonubusGuardian.provisioning.containerSecurityContext.allowPrivilegeEscalation
.nubusGuardian.provisioning.securityContext.enabled
tonubusGuardian.provisioning.containerSecurityContext.enabled
.nubusGuardian.provisioning.securityContext.privileged
tonubusGuardian.provisioning.containerSecurityContext.privileged
.nubusGuardian.provisioning.securityContext.readOnlyRootFilesystem
tonubusGuardian.provisioning.containerSecurityContext.readOnlyRootFilesystem
.nubusGuardian.provisioning.securityContext.runAsGroup
tonubusGuardian.provisioning.containerSecurityContext.runAsGroup
.nubusGuardian.provisioning.securityContext.runAsNonRoot
tonubusGuardian.provisioning.containerSecurityContext.runAsNonRoot
.nubusGuardian.provisioning.securityContext.runAsUser
tonubusGuardian.provisioning.containerSecurityContext.runAsUser
.nubusGuardian.provisioning.securityContext.seccompProfile.type
tonubusGuardian.provisioning.containerSecurityContext.seccompProfile.type
.
Version 1.9.0 - 2025-05-04#
This is the seventh 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 4.
$ 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 5.
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
existingSecret
settings. 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
existingSecret
settings. 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.io
withcharts.bitnami.com
for 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
univentionObjectIdentifier
LDAP attribute to the default index in the UCR configuration through theglobal.configUcr.ldap.index.eq
andglobal.configUcr.ldap.index.pres
Helm 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.accessKey
tonubusPortalConsumer.objectStorage.auth.existingSecret.keyMapping.accessKey
.nubusPortalConsumer.objectStorage.auth.secretKey
tonubusPortalConsumer.objectStorage.auth.existingSecret.keyMapping.secretKey
.nubusPortalConsumer.containerSecurityContextNonRoot.readOnlyRootFilesystem
tonubusPortalConsumer.containerSecurityContext.readOnlyRootFilesystem
.nubusPortalConsumer.containerSecurityContextNonRoot.runAsGroup
tonubusPortalConsumer.containerSecurityContext.runAsGroup
.nubusPortalConsumer.containerSecurityContextNonRoot.runAsNonRoot
tonubusPortalConsumer.containerSecurityContext.runAsNonRoot
.nubusPortalConsumer.containerSecurityContextNonRoot.runAsUser
tonubusPortalConsumer.containerSecurityContext.runAsUser
.
nubusPortalConsumer.provisioningApi.auth.credentialSecret.name
tonubusPortalConsumer.provisioningApi.auth.existingSecret.name
.nubusPortalConsumer.provisioningApi.auth.credentialSecret.key
tonubusPortalConsumer.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.realm
tonubusGuardian.provisioning.keycloak.realm
.nubusGuardian.provisioning.config.keycloak.username
tonubusGuardian.provisioning.keycloak.auth.username
.nubusGuardian.provisioning.config.keycloak.password
tonubusGuardian.provisioning.keycloak.auth.password
.nubusGuardian.provisioning.config.keycloak.credentialSecret.name
tonubusGuardian.provisioning.keycloak.auth.existingSecret.name
.nubusGuardian.provisioning.config.keycloak.credentialSecret.key
tonubusGuardian.provisioning.keycloak.auth.existingSecret.keyMapping.password
.nubusGuardian.provisioning.config.keycloak.connection.host
tonubusGuardian.provisioning.keycloak.connection.host
.nubusGuardian.provisioning.config.keycloak.connection.port
tonubusGuardian.provisioning.keycloak.connection.port
.nubusGuardian.postgresql.credentialSecret.name
tonubusGuardian.postgresql.auth.existingSecret.name
.nubusGuardian.postgresql.credentialSecret.key
tonubusGuardian.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
existingSecret
strategy in Nubus for Kubernetes.Alternative configuration: See Added helm values
nubusGuardian.managementApi.config.oauthAdapterM2mSecret
nubusGuardian.managementApi.config.secretRef
Reason for removal: Changed to the
existingSecret
strategy 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.newsfeed
totrue
. The default value isfalse
and 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
faviconSvg
which 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.