diff --git a/services/apiserver.go b/services/apiserver.go index fa282ec63584012db64b37706545022a3df55c57..9d5f85ef4b8c7e319a5b8080e41b008192143c8f 100644 --- a/services/apiserver.go +++ b/services/apiserver.go @@ -8,6 +8,7 @@ import ( "os" "time" + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" extensions "k8s.io/apiextensions-apiserver/pkg/apiserver" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -344,13 +345,29 @@ var kubeApiserver = &Unit{ apiConfig.GenericConfig.RESTOptionsGetter = &RestOptionsFactory{StorageFactory: storageFactory} openapiFactory := openapi.GetOpenAPIDefinitionsWithoutDisabledFeatures(generatedopenapi.GetOpenAPIDefinitions) apiConfig.GenericConfig.OpenAPIConfig = server.DefaultOpenAPIConfig(openapiFactory, openapinamer.NewDefinitionNamer(legacyscheme.Scheme, extensions.Scheme)) - apiConfig.GenericConfig.OpenAPIConfig = server.DefaultOpenAPIConfig(openapiFactory, openapinamer.NewDefinitionNamer(legacyscheme.Scheme, extensions.Scheme)) + apiConfig.GenericConfig.OpenAPIV3Config = server.DefaultOpenAPIV3Config(openapiFactory, openapinamer.NewDefinitionNamer(legacyscheme.Scheme, extensions.Scheme)) apiConfig.ExtraConfig.ClusterAuthenticationInfo.ClientCA = config.SecureServing.ClientCA apiServer, err := apiConfig.Complete().New(extensionServer.GenericAPIServer) if err != nil { return fmt.Errorf("could not initialize generic apiserver: %w", err) } + // Explicitely register api extensions group for discovery, otherwise it will never be exposed + // anywhere. Currently the aggregator (which hepto does not instantiate) has a hardcoded list of + // all apigroups for setting up discovery properly through delegates, this situation has been going + // on since kubernetes 1.7 and requires massive refactoring. + // TODO: this still does not explain how CRD apigroups are discovered, might require some more + // investigation + extensionsVersion := meta.GroupVersionForDiscovery{ + GroupVersion: "apiextensions.k8s.io/v1", + Version: "v1", + } + apiServer.GenericAPIServer.DiscoveryGroupManager.AddGroup(meta.APIGroup{ + Name: apiextensions.GroupName, + Versions: []meta.GroupVersionForDiscovery{extensionsVersion}, + PreferredVersion: extensionsVersion, + }) + // Finally start the apiserver server := apiServer.GenericAPIServer.PrepareRun() go clients.Start(ctx)