-
Notifications
You must be signed in to change notification settings - Fork 16
Description
Feature Description
Over the last year(s) we have identified a number of shortcomings and design mistakes in the kcp-operator. This is to a large extent because we designed it when we (well, I) knew very little about kcp's architecture.
The Problems
Here's a non-exhaustive list of things that are sub optimal:
- Client CAs: The kcp-operator deploys separate CAs for the front-proxy and the shards. This makes kubeconfigs not re-usable, which is super mega annoying when you want to use your Kubeconfig to watch an EndpointSlice and then connect to the URLs in it. We did this because we thought "more CAs = more security", but maybe we went overboard here and should have just deployed one single client CA.
- Kubernetes naming scheme: The scheme (or kind of lack thereof) of how the operator names deployments, certificates etc. is inconsistent and can easily lead to naming conflicts. We should overhaul this and now, with the knowledge of what resources we actually use, clean it up.
- URL configuration: kcp has 3 different CLI flags for controlling the URLs on shards, and the kcp-operator currently does a (and this is directed at me) piss-poor job at abstracting this away from the enduser. Even when I look through the flags today, I am unsure how to use the kcp-operator to deploy my kcp. We should completely rethink how URLs are configured. One idea @ntnn and me had sketched out was that FPs, Shards and VWs all only have a single
spec.urlfield and nothing else. And the operator will figure out which value to use where.
Proposed Solution
The Goal
Fix all of these issues.
We must ensure that existing kcp setups can be migrated somehow to whatever our new operator will be. etcd is standalone, so the data should be fine, but we must also keep all PKIs alive so that we do not invalidate existing kubeconfigs. Telling folks to just start over is not an option anymore for this project.
The only real change I can currently see for our CRDs is the introduction of spec.url, so we settled for now on the plan of keeping v1alpha1, deprecating the old fields and introducing the new spec.url field. This way we prevent all the excessive work that is part of introducing your first 2nd API version.
Alternative Solutions
No response
Want to contribute?
- I would like to work on this issue.
Additional Context
No response