Changes by Kind
API Change
- Add per-workspace authentication feature (behind the disabled by default feature gate
WorkspaceAuthentication), allowing to configure additional authenticators (JWT/OIDC at the moment) for workspace types in order to admit external users into logical clusters. (#3481, @xrstf) - Added path to cachedresource so that CachedResourceEndpointSlice can reference a CachedResource in another workspace (#3726, @olamilekan000)
- Allow for custom cleanup logic of LogicalClusters through the terminating virtualworkspace (#3615, @SimonTheLeg)
- Changes in APIExport API: resource schema storage
virtual, added Virtual resources support (#3620, @gman0) - Implement the admission framework for virtual workspaces. The
VirtualWorkspaceinterface has been extended with two new interfaces (admission.Mutatorandadmission.Validator). Virtual workspace builders who are not using theDynamicVirtualWorkspacesframework have to modify their implementations to implement these two interfaces. Virtual workspace builders who are using theDynamicVirtualWorkspacesframework do not have to do anything if they don't want to use admission in their virtual workspaces (#3494, @xmudrii) - Implement label selectors (
matchLabelsandmatchExpressions) for PermissionClaims (#3494, @xmudrii) - Rebase to kubernetes v1.33.3. WatchList has been disabled upstream, following this Watchers will no longer receive the state of objects when starting a watch (#3511, @ntnn)
- Stop printing Ready column for
APIExportsas virtual workspace URLs are no longer populated by default (#3493, @embik) - The kcp CLI has been moved from
github.com/kcp-dev/kcp/clitogithub.com/kcp-dev/cli. The source code is maintained instaging/src/github.com/kcp-dev/cliin the main kcp repo (i.e.cliis a staged repository). This does not effect the existingclireleases. The CLI users will be required to change the import paths in their Go code andgo.modupon upgrading the CLI. (#3697, @xmudrii) - The kcp SDK has been moved from
github.com/kcp-dev/kcp/sdktogithub.com/kcp-dev/sdk. The source code is maintained instaging/src/github.com/kcp-dev/sdkin the main kcp repo (i.e.sdkis a staged repository). This does not effect the existingsdkreleases. The SDK users will be required to change the import paths in their Go code andgo.modupon upgrading the SDK. (#3694, @xmudrii) - Users from other workspaces can be authorized by granting permission to the
system:cluster:<clusterid>group. Authorization webhooks now get a payload with the target cluster in theauthorization.kcp.io/cluster-nameextra. Theauthorization.kubernetes.io/cluster-nameextra is deprecated and will be removed in a future release (#3530, @ntnn)
Feature
- Add --preserve-resources to apigen tool to enable resource preservation. Without this it always overrides resources on generation. (#3646, @mjudeikis)
- Add metrics for logical clusters count (#3496, @cnvergence)
- Add new
kcp_indexed_logicalclustersmetric that contains the number of known logicalclusters per shard (metric has ashardlabel). (#3482, @xrstf) - Added --i and --interactive flags to the workspace command for exploring and managing workspaces interactively. (#3611, @olamilekan000)
- Added
--create-contextflag tocreate-workspacecommand to automatically create a kubeconfig context for the new workspace. Use--create-context=<name>to create without switching, or combine with--enterto create and switch context in one step. (#3550, @vishalanarase) - Added workspace cluster id as part of information displayed when in interactive mode. (#3728, @olamilekan000)
- Adds resource version and UID to object's annotation before persisting to the cache server (#3648, @olamilekan000)
- Path mappings in the front-proxy are treated as standard Go ServerMux patterns and can make use of the
{cluster}placeholder to provide a cluster context to the WorkspaceAuthentication for virtual workspaces (e.g./services/myservice/clusters/{cluster}). (#3628, @xrstf) - The extra
authentication.kubernetes.io/cluster-namein the user info of Service Accounts has been renamed toauthentication.kcp.io/cluster-name(#3568, @ntnn)
Documentation
- Production deployment documentation (#3712, @mjudeikis)
- Fix cache replication issue where object were not updated post first create (#3626, @mjudeikis)
Bug or Regression
- Prevent goroutine leaks when deleting workspaces (#3491, @ntnn)
- Fix CRDs with kind
Clusterleading to errors. Fix URLs with multiple/cluster/...segments being silently ignored (#3537, @ntnn) - Fix APIBinding admission mishandling v1alpha1 API version. This fixes the bug where it was impossible to apply v1alpha1 APIBindings (#3543, @xmudrii)
- Fix TokenReviews when using WorkspaceAuthentication (#3624, @xrstf)
- Fix
create-workspaceon an existing workspace throwing a panic (#3518, @ntnn) - Fix
kubectl kcp bindcommand after verbs permission claims migration (#3523, @mjudeikis) - Fix permission claim controller hot loop when claiming events in an
APIExport(#3501, @mjudeikis) - Fixed a bug that prevents the deletion of a cachedresource that makes a reference to a resource that doesn't have GVR. (#3730, @olamilekan000)
- Fixed an issue where APIEndpointExportSlices are not recreated by APIExport when deleted (#3645, @olamilekan000)
- Fixed an issue where the kubectl ws command did not correctly handle kubeconfig flag (--kubeconfig ). (#3596, @olamilekan000)
- Fixed reconciliation logic to detect selector changes in APIBinding permission claims. (#3710, @olamilekan000)
- Make SDK
go installableafter monorepo migration. This is a temporary solution. (#3656, @mjudeikis) - The kcp kubectl plugin now supports kcp <0.28 again. In kcp 0.28+,
kubectl kcp claims get apibindingnow shows the permission claim verbs. (#3539, @xrstf) kubectl kcpreturns error instead of panic when converting CRD with service webhook reference (#3671, @m-szalik)- Consistently use the user-provided base URL as the default for ShardBaseURL and VirtualWorkspacesURL (#3636, @mjudeikis)
Other (Cleanup or Flake)
- Kcp is built with Go 1.24.8 (#3634, @embik)
- Kcp is built with Go 1.24.9 (#3651, @embik)
- Kuberentes 1.33.5 patch rebase (#3722, @SimonTheLeg)
Dependencies
Added
- github.com/containerd/errdefs/pkg: v0.3.0
- github.com/containerd/typeurl/v2: v2.2.2
- github.com/go-jose/go-jose/v3: v3.0.4
- github.com/golang-jwt/jwt/v5: v5.2.2
- github.com/ntnn/goleak: cbb740d
- github.com/opencontainers/cgroups: v0.0.1
- github.com/opencontainers/image-spec: v1.1.1
- github.com/xrstf/mockoidc: 711cc4e
- gopkg.in/go-jose/go-jose.v2: v2.6.3
- sigs.k8s.io/randfill: v1.0.0
Changed
- github.com/Microsoft/hnslib: v0.0.8 → v0.1.1
- github.com/containerd/containerd/api: v1.7.19 → v1.8.0
- github.com/containerd/errdefs: v0.1.0 → v1.0.0
- github.com/containerd/ttrpc: v1.2.5 → v1.2.6
- github.com/coredns/corefile-migration: v1.0.24 → v1.0.25
- github.com/coreos/go-oidc: v2.2.1+incompatible → v2.3.0+incompatible
- github.com/cyphar/filepath-securejoin: v0.3.4 → v0.4.1
- github.com/go-logfmt/logfmt: v0.5.1 → v0.4.0
- github.com/google/cadvisor: v0.51.0 → v0.52.1
- github.com/google/cel-go: v0.22.1 → v0.23.2
- github.com/google/gofuzz: v1.2.0 → v1.0.0
- github.com/google/pprof: 40e02aa → d1b30fe
- github.com/gorilla/websocket: v1.5.0 → e064f32
- github.com/grpc-ecosystem/grpc-gateway/v2: v2.25.1 → v2.24.0
- github.com/kcp-dev/embeddedetcd: 89d1631 → a4839a8
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/api: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/apiextensions-apiserver: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/apimachinery: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/apiserver: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/cli-runtime: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/client-go: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/cloud-provider: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/cluster-bootstrap: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/code-generator: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/component-base: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/component-helpers: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/controller-manager: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/cri-api: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/cri-client: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/csi-translation-lib: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/dynamic-resource-allocation: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/endpointslice: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/externaljwt: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kms: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-aggregator: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-controller-manager: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-proxy: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-scheduler: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kubectl: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/kubelet: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/metrics: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/mount-utils: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/pod-security-admission: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes/staging/src/k8s.io/sample-apiserver: ddbe171 → f038ec6
- github.com/kcp-dev/kubernetes: ddbe171 → f038ec6
- github.com/klauspost/compress: v1.17.11 → v1.18.0
- github.com/onsi/ginkgo/v2: v2.22.1 → v2.21.0
- github.com/onsi/gomega: v1.36.2 → v1.35.1
- github.com/prometheus/client_golang: v1.20.5 → v1.22.0
- github.com/prometheus/common: v0.61.0 → v0.62.0
- go.etcd.io/etcd/api/v3: v3.5.17 → v3.5.21
- go.etcd.io/etcd/client/pkg/v3: v3.5.17 → v3.5.21
- go.etcd.io/etcd/client/v2: v2.305.16 → v2.305.21
- go.etcd.io/etcd/client/v3: v3.5.17 → v3.5.21
- go.etcd.io/etcd/pkg/v3: v3.5.16 → v3.5.21
- go.etcd.io/etcd/raft/v3: v3.5.16 → v3.5.21
- go.etcd.io/etcd/server/v3: v3.5.16 → v3.5.21
- go.opentelemetry.io/proto/otlp: v1.5.0 → v1.4.0
- golang.org/x/crypto: v0.37.0 → v0.38.0
- golang.org/x/net: v0.39.0 → v0.40.0
- golang.org/x/sync: v0.13.0 → v0.14.0
- golang.org/x/sys: v0.32.0 → v0.33.0
- golang.org/x/term: v0.31.0 → v0.32.0
- golang.org/x/text: v0.24.0 → v0.25.0
- golang.org/x/tools: v0.32.0 → v0.33.0
- google.golang.org/genproto/googleapis/api: 5f5ef82 → e6fa225
- google.golang.org/genproto/googleapis/rpc: 5f5ef82 → e6fa225
- google.golang.org/protobuf: v1.36.2 → v1.36.5
- k8s.io/gengo/v2: 2b36238 → e3bc6f1
- k8s.io/kube-openapi: 2c72e55 → c8a335a
- k8s.io/utils: 24370be → 4c0f3b2
- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.31.1 → v0.31.2
- sigs.k8s.io/kustomize/api: v0.18.0 → v0.19.0
- sigs.k8s.io/kustomize/kustomize/v5: v5.5.0 → v5.6.0
- sigs.k8s.io/kustomize/kyaml: v0.18.1 → v0.19.0
- sigs.k8s.io/structured-merge-diff/v4: v4.5.0 → v4.6.0