This PR introduces the shared v2 provider runtime for out-of-process providers and wires the Kubernetes provider through the full controller -> clientmanager -> gRPC -> adapter path.
The Kubernetes provider is the first fully exercised provider on this path. Other providers can build on the same runtime pieces later, but the implementation and verification in this PR are intentionally centered on Kubernetes.
Provider and ClusterProviderProvider and ClusterProviderruntime/clientmanager how to resolve, cache, and invalidate v2 provider clientsesv1.SecretsClientThe WIP follow-up work in this branch tightened the Kubernetes v2 path in a few places that were previously incomplete or ambiguous:
storeRef.kind from the controllers into the gRPC ProviderReferenceproviderRef.namespace and only fall back to sourceNamespaceIf you want to review this in the runtime order secrets flow through, this is the shortest path:
pkg/controllers/provider/controller.gopkg/controllers/clusterprovider/controller.gopkg/controllers/pushsecret/pushsecret_controller_v2.goruntime/clientmanager/manager.goproviders/v2/common/proto/provider/secretstore.protoproviders/v2/common/grpc/client.goproviders/v2/common/grpc/pool.goproviders/v2/common/grpc/tls.goproviders/v2/adapter/store/server.goproviders/v2/adapter/store/client.goproviders/v2/adapter/store/synthetic_store.goproviders/v2/kubernetes/main.goproviders/v2/kubernetes/config.goProvider auth always resolves against the manifest namespaceClusterProvider namespace conditions are enforced before client creationClusterProvider.authenticationScope=ProviderNamespace requires spec.config.providerRef.namespaceProviderReference and SourceNamespaceFocused Kubernetes v2 e2e coverage passed:
push-secretcluster-providernamespaced-providercapabilitiesmetricsFresh package verification passed:
runtime/clientmanagerproviders/v2/common/grpcproviders/v2/adapterproviders/v2/kubernetescmd/controllerpkg/controllers/providerpkg/controllers/clusterproviderpkg/controllers/pushsecret testsCapabilities() comment is still an architectural TODO, but it is not a correctness blocker for the current Kubernetes implementation