Skip to content

feature: kcp-operator overhaul #164

@xrstf

Description

@xrstf

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.url field 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/featureCategorizes issue or PR as related to a new feature.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions