Kubermatic 2.28
v2.28.0
GitHub release: v2.28.0
Before upgrading, make sure to read the general upgrade guidelines. Consider tweaking seedControllerManager.maximumParallelReconciles
to ensure user cluster reconciliations will not cause resource exhaustion on seed clusters. A full upgrade guide is available from the official documentation.
Breaking Changes
- The deprecated OAuth helm chart has been removed. Before proceeding with KKP upgrade, please follow the dex migration procedure to migrate from oauth/dex to the new upstream Dex chart (#14657)
deploy-default-app-catalog
option from kubermatic-installer has been deprecated and would have no affect going forward. The field .Spec.Applications.DefaultApplicationCatalog
can be used instead to manage default application catalog (#14697)- Support for multiple security groups has been dropped for OpenStack. If you are using multiple security groups for an OpenStack cluster, you need to manually adjust the
cluster.Spec.Cloud.Openstack.SecurityGroups
(#14269) - Node-exporter chart is now using the upstream helm chart. This means there are some adjustment required to the
values.yaml
. replace the nodeExporter
with node-exporter
(#14176) (#14670) - Alertmanager chart was replaced with upstream chart. This means, some of the old values might need migration. Please review documentation (#14175) (#14675)
- Blackbox-exporter chart is now using the upstream helm chart indirectly. So the customizations for blackbox-exporter via helm values.yaml should be moved under key
blackbox-exporter
instead of blackboxExporter
(#14170) (#14675) - Kube-state-metrics chart is now using the upstream helm chart with app version 2.15.0 (#14357) (#14675)
- New roles for the Kubevirt csi driver have been added and users must add these role to KubeVirt infra cluster kubeconfig service account (#14502)
ACTION REQUIRED
- Update cert-manager to v1.16.5. So the following updates should be done values.yaml (#14400):
- update
webhook.replicas
to webhook.replicaCount
- update
cainjector.replicas
to webhook.replicaCount
- remove
webhook.injectAPIServerCA
API Changes
- The KKP APIs have been moved into a Go module named
k8c.io/kubermatic/v2/sdk
(#14171)
Supported Kubernetes Versions
- Remove support for Kubernetes 1.29 (#14345)
- Add support for Kubernetes 1.33 (#14419)
- Add 1.32.4/1.32.3/1.31.8/1.31.7/1.30.12/1.30.11 to the list of supported Kubernetes releases (#14266) (#14385)
Supported Versions
- 1.30.11
- 1.30.12
- 1.31.7
- 1.31.8
- 1.32.3
- 1.32.4
- 1.33.0
Cloud Providers
KubeVirt
- Support KubeVirt Subnet CIDR in the Seed object (#14604)
- The field
enabledDedicatedCPUs
in kubevirt provider spec is now deprecated. A new field called useDomainCPU
is introduced which is for the same purpose. When set to true
cpu will be assigned by spec.domain.cpu
for a kubevirt virtual machine instead of using resource requests and limits (#14621) - Update KubeVirt CSI Driver Operator to v0.4.3 (#14178)
- A bug that caused network policies to not be removed from the kubevirt infra cluster has been fixed (#14429)
- Support
infra-csi-driver
as a volumeProvisioner
for the KubeVirt CSI Driver (#14199) - Add ability to disable automatic installation of default kubevirt instance types and preferences (#14426)
- A new field
spec.datacenters.<example-dc>.spec.kubevirt.enableDedicatedCpus
was added to seed crd to control whether kubevirt machine cpus are configured by spec.template.spec.domain.resources
with requests and limits or spec.template.spec.domain.cpu
. Later one is required to use kubevirt cpu allocation ratio feature (#14298) - A new field was introduced for kubevirt provider in namespacedmode in enterprise edition to configure a mode for the deployed network policy in kubevirt infrastructure clusters. Default mode is
allow
which allows by default all traffic except to other providernetwork subnets. The other option is deny
which denies all traffic except to the usercluster apiserver, configured nameservers and between worker nodes (#14390) - Support KubeVirt CCM Load Balancer Interface Disabling (#14521)
OpenStack
- Fix reconciliation loop for routers in Openstack provider by allowing updates to the
routerID
field (#14420) - User Clusters in Openstack can share a router, which is deleted only after all associated clusters are removed (#14468)
- Fix auto-deletion of non-created OpenStack security group during cluster cleanup (#14359)
- Fix router-subnet-link cleanup for OpenStack user clusters created with existing networks and subnets (#14153)
- Add support for configuring multiple named
LoadBalancerClasses
for OpenStack cloud.cfg. This allows users to define and utilize different load balancer configurations within their OpenStack environments managed by Kubermatic (#14362) - Add revision label support to OpenStack CSI controller deployment to trigger pod restarts when cloud-config-csi secret is updated (#14410)
New Features
- EE: LocalAI is added to the default applications catalog (#14700)
- The default apps from the enterprise catalog are now also part of the kubermatic-installer
mirror-images
command (#14683) - Add Kyverno images to
mirror-images
command (#14681) - Add
--insecure
flag to mirror-images command to bypass TLS verification (#14635) - Add support for configuring an Authorization Webhook for the User Clusters (#13930)
- Mla-secrets chart can now be safely redeployed, existing secrets take precedence over provided values (#14568)
- Gateway API CRDs are now automatically installed in the user clusters, when KubeLB integration is enabled (#14368)
- Add support for scheduling options (tolerations, affinity, nodeSelector) to the KKP operator Helm chart, allowing users to control pod placement in their clusters (#14574)
- Add nginx config to increase header size for Dashboard and Dex (#14579)
- EE: The default Policy Template Catalog can be deployed via
--deploy-default-policy-template-catalog
flag (#14472) - A new
--limit-apps
flag has been added to the Kubermatic Installer, allowing users to limit which AppDefinitions are installed during the setup process. This flag accepts a comma-separated list of AppDefinition names. If the flag is not provided or the list is empty, all available AppDefinitions will be installed—provided the default app catalog is enabled (#14569 - KubeLB: New field extraArgs has been introduced for KubeLB at the Seed and cluster level. This field can be used to configure extra arguments for the KubeLB CCM (#14564)
- KubeLB: The configuration in the Seed seed.spec.kubelb.enableForAllDatacenters can be used to allow KubeLB installation for all the datacenters belonging to the Seed (#14558)
- Install cluster-autoscaler by default as a system application via kubermatic-operator (#14509)
- Add support for tagging cluster backup objects in KKP for improved management and traceability. It can help to identify, categorise, and track backup resources more effectively across multiple clusters and tenants (#14373)
- Add
AuditLogging
configuration on seed level (#14464) - Add the ability to define the allowed IP Ranges for the API server for the user cluster on the Seed Level (#14462)
- Add environment variable support for audit logging sidecar (#14437)
- Add the ability to disable
UserSSHKey
feature in Kubermatic (#14425) - Add support for GlobalViewer role. Users marked with isGlobalViewer: true now gain read-only access to all projects without being explicitly added to them (#14433)
- Allow users to set
--quota-backend-bytes
for etcd (#14367) - Add support for configuring
backup-interval
and backup-count
at the seed, KubermaticConfiguration, and controller flag levels (#14361) - Prow jobs and E2E tests are added. There are prow jobs for each application from the default app catalog, and each job verifies that the ApplicationInstallation object has been installed successfully, its conditions are in a healthy state, a Helm release has been deployed, and the pods of the given application have been deployed successfully. Additionally, end-to-end (E2E) tests are added to verify that the pods for every application in the default application catalog are deployed successfully. These tests help ensure compatibility when updating the version of each application (#14312)
- Add support for using a Proxy Between KKP and the nodeport-proxy (#14159)
- Add a new field in KubermaticSettings to allow setting a default checksum algorithm for Velero through Dashboard (#14253)
- Introduce the
mirror-binaries
in kubermatic-installer
to mirror the kubernetes and container tools binaries for Offline setups (#14251) - Ensure
mirror-images
processes all images without blocking, logging failed images at the end for better visibility and debugging (#14262) - Include
cilium-envoy
image in the mirrored images (#14238) - Add a new field in
Cluster
to configure HTTP Proxy at User Cluster Level (#14209) - Support disabling default OperatingSystemProfiles in user clusters (#14515)
- Add a new optional field called
args
under KonnectivityProxySettings to allow users to specify a set of arguments for Konnectivity deployments (#14189)
Bugfixes
- Fix
kubermatic-installer local kind
command for EE setups to set correct image pull secrets in values.yaml
(#14707) - A bug was fixed where enforced annotation on application installation were not removed when enforcement for the related application definition was disabled (#14706)
- Add the ability to skip charts in the
kubermatic-installer deploy usercluster-mla
command (#14688) - Fix references for dex host(dex.ingress.hosts[0].host) in example manifests, (#14630)
- Remove redundant and undocumented/used
remove-oauth-release
flag for installer (#14630) - Add validation for checks in the installer for the new dex chart (#14624)
- Fix
--skip-seed-validation
flag on the KKP installer (#14585) - Correctly mounts the custom CA bundle ConfigMap to fix reconciliation failures in custom CA environments (#14575)
- Fix a bug where CSI Snapshot validating webhook was being deployed even if the CSI drivers are disabled for a cluster. When the csi driver is disabled after cluster creation the both mentioned resources will be cleaned up now (#14466)
- Remove old warnings for new dex chart (#14423)
- Fix the service account deletion process (#14371)
- Ensure that etcd backup images are pulled from the overwrite Registry in air-gapped environments (#14356)
- Fix a bug for KubeLB where disabling the ingress class for a user cluster was not working (#14396)
- Node-local-dns in user clusters will now use
IfNotPresent
pull policy instead of Always
(#14309) - Edge Provider: Fix a bug where clusters were stuck in
creating
phase due to wrongfully waiting for Machine Controller’s health status (#14257) - Fix an issue where the CBSL status was not updating due to the missing cluster-backup-storage-controller in the master controller manager (#14243)
- Fix mirroring the images of a single Kubernetes version (#14248)
- It is now possible to configure the sidecar configuration for a given cluster while the auditLogging field is enabled at the Seed level. Previously, if the auditLogging field was enabled at the Seed level, it would override the same field at the Cluster level, resulting in the removal of the sidecar configuration (#14145)
- Fix a Go panic when using git-source in Applications (#14219)
- Include the etcd backup restore and delete images in the kubermatic-installer mirror-images command (#14220)
- Add dex and gitops charts to the CI release pipeline for inclusion in the release tar (#14192)
- Fix a bug that prevents configuring
resources
in KNP deployments (#14205) - Apply override registry configuration to cilium-envoy images (#14164)
- The local kind command from the kubermatic-installer is now using helm values to deploy dex by the upstream helm chart. This was required due to removal of the old custom chart. (#14704)
- A bug where images with digest instead of a tag are not properly parsed was fixed. This affected mirroring images and all parsing with an overwrite registry configured (#14664)
- KubeLB: CCM will adjust the tenant kubeconfig to use API server endpoint and CA certificate from the management kubeconfig that is provided to KKP at the seed/datacenter level (#14522)
Updates
- Update go-jose to 3.0.4 (CVE-2025-27144) (#14622)
- Update the default Kubernetes version to 1.32.4 (#14634)
- Update the Helm values example files supplied with the release package to match the new Dex chart (#14628)
- Update aikit application to v0.18.0 (#14403)
- Update argocd application to v2.14.11 and v3.0.0 (#14403)
- Update cert-manager application to v1.17.2 (#14403)
- Update cluster-autoscaler application chart version to 9.46.6 (#14403)
- Update falco application chart version to 4.21.2 (#14403)
- Update flux2 application to 2.5.1 (#14403)
- Update gpu-operator application to v25.3.0 (#14403)
- Update ingress-nginx application to 4.12.2 (#14403)
- Update k8sgpt-operator application chart version to 0.2.17 (#14403)
- Update trivy application to 0.62.1 (#14403)
- Update trivy-operator application to 0.26.0 (#14403)
- Update fluent-bit container version to v4.0.0 (#14427)
- Update etcd to 3.5.21 for all supported Kubernetes releases (#14417)
- Update k8s-dns-node-cache to 1.25.0 (#14409)
- Update oauth2-proxy to v7.8.2 (#14388)
- Update the default ipv6 services range to
fd02::/108
(#14369) - Update the default application’s nginx ingress controller to use the save and patched version of v1.12.1 (#14341)
- Update operating-system-manager to v1.7.0 (#14709)
- Update machine-controller to v1.62.0 (#14711)
- Update etcd to 3.5.17 for all supported Kubernetes releases (#14315)
- Update to Go 1.24.2 (#14317)
- Update to controller-runtime 0.20.4 / Kubernetes 1.32 (#14311)
- Update nginx-ingress-controller to 1.12.1 (#14273)
- KubeLB: update CCM image to v1.1.5 (#14609)
- The default CA bundle (provided by Mozilla) was updated from 2022-04-26 to 2025-02-25 (#14439)
- Security: Update Cilium to 1.15.16 / 1.16.9 because the previous versions are affected by CVE-2025-32793 (#14434)
- Add Cert-manager version v1.16.5 in the default applications catalog (#14418)
- Support MatchSubnetAndStorageLocation and Subnets Regions and Zones (#14414)
- Kube-state-metrics chart is now using the upstream helm chart with app version 2.15.0 (#14174)
Cleanups
- Cluster-autoscaler has been removed from the default accessible addons list (#14689)
- Deprecate Equinix Metal provider (#14448)
Deprecations
deploy-default-app-catalog
for kubermatic-installer has been deprecated and would have no affect going forward. The field .Spec.Applications.DefaultApplicationCatalog
can be used instead to manage default application catalog (#14697)- Default Application Catalog can now be managed via KubermaticConfiguration through the field
.Spec.Applications.DefaultApplicationCatalog
(#14697)
Miscellaneous
- The deprecated k8sgpt application has been removed and was replaced by the k8sgpt-operator app instead (#14403)
- Disable cilium-envoy daemonset, if it was not specified in the chart values (#14173)
Dashboard and API
Breaking Changes
- The
usePodResourcesCPU
feature will replace enableDedicatedCPUs
flag. In the time of deprecation both are taking effect but the new value will have more priority. When enableDedicatedCPUs
is set to false
which is also the default value, you need to set usePodResourcesCPU
to true
to keep the same behaviour as before for new created machines. If enableDedicatedCPUs
was set to true
nothing needs to be changed (#7413)
Cloud Providers
KubeVirt
- Add the ability to disable the automatic installation of default kubevirt instance types and preferences (#7304)
- Display KubeVirt Subnet CIDRs in UI (#7369)
- The kkp api is now aware on how to configure cpus for kubevirt virtual machines based on a new introduced field in kkp seed crd called
spec.datacenters.<example-dc>.spec.kubevirt.enableDedicatedCpus
(#7252)
Openstack
- List all OpenStack networks in the UI wizard during cluster creation (#7437)
- Pass ConfigDrive value to JSON patch during machine updates for OpenStack (#7299)
VSphere
- Use infra management user credentials (if configured) to fetch data for vSphere (#7397)
New Features
- Allow manual installation of system applications except with type
cni
(#7424) - Add Kyverno as the native Kubernetes policy solution in the dashboard (#7323)
- Display source of cluster backups (#7348)
- Cluster backups created by KKP controllers now include spec.labels to distinguish controller-initiated backups from those manually uploaded via the UI (#7345)
- Support for enabling KubeLB at a seed level for all datacenters (#7350)
- Add functionality to upload backups to cluster backup storage location (#7335)
- New page in the admin panel to manage the Global Viewer role (#7337)
- Add functionality to configure checksum algorithm for backup storage location (#7346)
- Add new feature gate to disable User SSH key (#7324)
- Users marked with globalViewer: true now receive read-only access to all projects and clusters via dynamic groups and roles injection. No need to create UserProjectBindings for them (#7318)
- Allow setting a default checksum algorithm for Velero (#7231)
- Add new API endpoints for Kyverno integration (#7106)
- Dashboard has been upgraded to use Angular 19 (#7183)
- Support infra storage classes and provider network subnets location compatibilities (#7301)
Bugfixes
- Unset backup sync period if value is empty (#7444)
- Fix clickable documentation links in hints for disabled checkboxes (#7434)
- Shows custom disk fields when a custom disk is configured in the Machine Deployment edit dialog (#7415)
- Cluster backup schedules created by KKP controllers now include backupSpec.labels to distinguish controller-initiated backups from those manually uploaded via the UI (#7396)
- Display system applications in cluster creation wizard and fix application type label for system applications (#7388)
- Make the Subnets field required when a VPC is selected, in both Wizard and Machine Deployment modes (#7305)
- Disable the Cluster Autoscaler option when the cluster autoscaler application is not defined in applications catalog (#7283)
- Add special characters restriction on Inputs and escape values to avoid rendering as HTML (#7273)
- Add role prioritization: Update logic to return the highest-priority role for members with multiple roles (#7272)
- Fix KKP login issue when the ID token is too large to be saved in a cookie, by splitting the token into multiple cookies (#7206)
Updates
- Update web-terminal image to v0.10.0 (#7254)
- Update to Go 1.24.2 (#7253)
- Update Dashboard API to use correct OSP which is selected while creating a cluster (#7217)
Deprecations
- Deprecate Equinix Metal provider (#7376)