From ad2b4368e2113157b3d88cabc86c89c6d07e313c Mon Sep 17 00:00:00 2001 From: Alexander Zielenski Date: Mon, 26 Jun 2023 13:04:59 -0700 Subject: [PATCH] expose apiregistration.k8s.io into OpenAPIV3 --- .../pkg/apiserver/apiserver.go | 2 ++ .../openapiv3/aggregator/aggregator.go | 23 ++++++++++++++++++- .../openapiv3/aggregator/aggregator_test.go | 6 ++--- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index cf83c3a6fe5..bc4da3a8946 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -440,6 +440,8 @@ func (s *APIAggregator) PrepareRun() (preparedAPIAggregator, error) { openAPIV3Aggregator, err := openapiv3aggregator.BuildAndRegisterAggregator( specDownloaderV3, s.GenericAPIServer.NextDelegate(), + s.GenericAPIServer.Handler.GoRestfulContainer, + s.openAPIConfig, s.GenericAPIServer.Handler.NonGoRestfulMux) if err != nil { return preparedAPIAggregator{}, err diff --git a/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator.go b/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator.go index 2d79554f756..f0774cc5f53 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator.go @@ -25,9 +25,13 @@ import ( "sync" "time" + "github.com/emicklei/go-restful/v3" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apiserver/pkg/endpoints/metrics" "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/mux" + "k8s.io/apiserver/pkg/server/routes" "k8s.io/klog/v2" v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-openapi/pkg/common" @@ -73,12 +77,29 @@ func (s *specProxier) GetAPIServiceNames() []string { } // BuildAndRegisterAggregator registered OpenAPI aggregator handler. This function is not thread safe as it only being called on startup. -func BuildAndRegisterAggregator(downloader Downloader, delegationTarget server.DelegationTarget, pathHandler common.PathHandlerByGroupVersion) (SpecProxier, error) { +func BuildAndRegisterAggregator(downloader Downloader, delegationTarget server.DelegationTarget, aggregatorService *restful.Container, openAPIConfig *common.Config, pathHandler common.PathHandlerByGroupVersion) (SpecProxier, error) { s := &specProxier{ apiServiceInfo: map[string]*openAPIV3APIServiceInfo{}, downloader: downloader, } + if aggregatorService != nil && openAPIConfig != nil { + // Make native types exposed by aggregator available to the aggregated + // OpenAPI (normal handle is disabled by skipOpenAPIInstallation option) + aggregatorLocalServiceName := "k8s_internal_local_kube_aggregator_types" + v3Mux := mux.NewPathRecorderMux(aggregatorLocalServiceName) + _ = routes.OpenAPI{ + Config: openAPIConfig, + }.InstallV3(aggregatorService, v3Mux) + + s.AddUpdateAPIService(v3Mux, &v1.APIService{ + ObjectMeta: metav1.ObjectMeta{ + Name: aggregatorLocalServiceName, + }, + }) + s.UpdateAPIServiceSpec(aggregatorLocalServiceName) + } + i := 1 for delegate := delegationTarget; delegate != nil; delegate = delegate.NextDelegate() { handler := delegate.UnprotectedHandler() diff --git a/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator_test.go b/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator_test.go index 69b3caf392f..de809d5bead 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator_test.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapiv3/aggregator/aggregator_test.go @@ -89,7 +89,7 @@ func TestV2APIService(t *testing.T) { downloader := Downloader{} pathHandler := mux.NewPathRecorderMux("aggregator_test") var serveHandler http.Handler = pathHandler - specProxier, err := BuildAndRegisterAggregator(downloader, genericapiserver.NewEmptyDelegate(), pathHandler) + specProxier, err := BuildAndRegisterAggregator(downloader, genericapiserver.NewEmptyDelegate(), nil, nil, pathHandler) if err != nil { t.Error(err) } @@ -133,7 +133,7 @@ func TestV3APIService(t *testing.T) { pathHandler := mux.NewPathRecorderMux("aggregator_test") var serveHandler http.Handler = pathHandler - specProxier, err := BuildAndRegisterAggregator(downloader, genericapiserver.NewEmptyDelegate(), pathHandler) + specProxier, err := BuildAndRegisterAggregator(downloader, genericapiserver.NewEmptyDelegate(), nil, nil, pathHandler) if err != nil { t.Error(err) } @@ -178,7 +178,7 @@ func TestOpenAPIRequestMetrics(t *testing.T) { pathHandler := mux.NewPathRecorderMux("aggregator_metrics_test") var serveHandler http.Handler = pathHandler - specProxier, err := BuildAndRegisterAggregator(downloader, genericapiserver.NewEmptyDelegate(), pathHandler) + specProxier, err := BuildAndRegisterAggregator(downloader, genericapiserver.NewEmptyDelegate(), nil, nil, pathHandler) if err != nil { t.Error(err) }