Skip to content

Commit 8195f82

Browse files
committed
remove AggregatedDiscoveryEndpoint that was GAed in v1.30
1 parent bb79c29 commit 8195f82

File tree

10 files changed

+67
-142
lines changed

10 files changed

+67
-142
lines changed

pkg/controlplane/apiserver/config.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,7 @@ func BuildGenericConfig(
231231
return
232232
}
233233

234-
if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryEndpoint) {
235-
genericConfig.AggregatedDiscoveryGroupManager = aggregated.NewResourceManager("apis")
236-
}
234+
genericConfig.AggregatedDiscoveryGroupManager = aggregated.NewResourceManager("apis")
237235

238236
return
239237
}

pkg/features/versioned_kube_features.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
204204
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
205205
},
206206

207-
genericfeatures.AggregatedDiscoveryEndpoint: {
208-
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
209-
{Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta},
210-
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
211-
},
212-
213207
genericfeatures.AllowParsingUserUIDFromCertAuth: {
214208
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Beta},
215209
},

staging/src/k8s.io/apiserver/pkg/endpoints/discovery/aggregated/wrapper.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import (
2828
"k8s.io/apimachinery/pkg/runtime"
2929

3030
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
31-
genericfeatures "k8s.io/apiserver/pkg/features"
32-
utilfeature "k8s.io/apiserver/pkg/util/feature"
3331
)
3432

3533
type WrappedHandler struct {
@@ -39,13 +37,11 @@ type WrappedHandler struct {
3937
}
4038

4139
func (wrapped *WrappedHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
42-
if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryEndpoint) {
43-
mediaType, _ := negotiation.NegotiateMediaTypeOptions(req.Header.Get("Accept"), wrapped.s.SupportedMediaTypes(), DiscoveryEndpointRestrictions)
44-
// mediaType.Convert looks at the request accept headers and is used to control whether the discovery document will be aggregated.
45-
if IsAggregatedDiscoveryGVK(mediaType.Convert) {
46-
wrapped.aggHandler.ServeHTTP(resp, req)
47-
return
48-
}
40+
mediaType, _ := negotiation.NegotiateMediaTypeOptions(req.Header.Get("Accept"), wrapped.s.SupportedMediaTypes(), DiscoveryEndpointRestrictions)
41+
// mediaType.Convert looks at the request accept headers and is used to control whether the discovery document will be aggregated.
42+
if IsAggregatedDiscoveryGVK(mediaType.Convert) {
43+
wrapped.aggHandler.ServeHTTP(resp, req)
44+
return
4945
}
5046
wrapped.handler.ServeHTTP(resp, req)
5147
}

staging/src/k8s.io/apiserver/pkg/endpoints/discovery/aggregated/wrapper_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ import (
2424
"testing"
2525

2626
"github.com/stretchr/testify/assert"
27-
genericfeatures "k8s.io/apiserver/pkg/features"
28-
utilfeature "k8s.io/apiserver/pkg/util/feature"
29-
featuregatetesting "k8s.io/component-base/featuregate/testing"
3027
)
3128

3229
const discoveryPath = "/apis"
@@ -60,8 +57,6 @@ func (f fakeHTTPHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request)
6057
}
6158

6259
func TestAggregationEnabled(t *testing.T) {
63-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryEndpoint, true)
64-
6560
unaggregated := fakeHTTPHandler{data: "unaggregated"}
6661
aggregated := fakeHTTPHandler{data: "aggregated"}
6762
wrapped := WrapAggregatedDiscoveryToHandler(unaggregated, aggregated)

staging/src/k8s.io/apiserver/pkg/features/kube_features.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,6 @@ const (
4141
// Enables usage of MatchConditions fields to use CEL expressions for matching on admission webhooks
4242
AdmissionWebhookMatchConditions featuregate.Feature = "AdmissionWebhookMatchConditions"
4343

44-
// owner: @jefftree @alexzielenski
45-
// stable: v1.30
46-
//
47-
// Enables an single HTTP endpoint /discovery/<version> which supports native HTTP
48-
// caching with ETags containing all APIResources known to the apiserver.
49-
AggregatedDiscoveryEndpoint featuregate.Feature = "AggregatedDiscoveryEndpoint"
50-
5144
// owner: @modulitos
5245
//
5346
// Allow user.DefaultInfo.UID to be set from x509 cert during cert auth.
@@ -266,12 +259,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
266259
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
267260
},
268261

269-
AggregatedDiscoveryEndpoint: {
270-
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
271-
{Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta},
272-
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
273-
},
274-
275262
AllowParsingUserUIDFromCertAuth: {
276263
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Beta},
277264
},

staging/src/k8s.io/apiserver/pkg/server/config.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -845,14 +845,12 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G
845845
muxAndDiscoveryCompleteSignals: map[string]<-chan struct{}{},
846846
}
847847

848-
if c.FeatureGate.Enabled(genericfeatures.AggregatedDiscoveryEndpoint) {
849-
manager := c.AggregatedDiscoveryGroupManager
850-
if manager == nil {
851-
manager = discoveryendpoint.NewResourceManager("apis")
852-
}
853-
s.AggregatedDiscoveryGroupManager = manager
854-
s.AggregatedLegacyDiscoveryGroupManager = discoveryendpoint.NewResourceManager("api")
848+
manager := c.AggregatedDiscoveryGroupManager
849+
if manager == nil {
850+
manager = discoveryendpoint.NewResourceManager("apis")
855851
}
852+
s.AggregatedDiscoveryGroupManager = manager
853+
s.AggregatedLegacyDiscoveryGroupManager = discoveryendpoint.NewResourceManager("api")
856854
for {
857855
if c.JSONPatchMaxCopyBytes <= 0 {
858856
break
@@ -1111,12 +1109,8 @@ func installAPI(name string, s *GenericAPIServer, c *Config) {
11111109
routes.Version{Version: c.EffectiveVersion.BinaryVersion().Info()}.Install(s.Handler.GoRestfulContainer)
11121110

11131111
if c.EnableDiscovery {
1114-
if c.FeatureGate.Enabled(genericfeatures.AggregatedDiscoveryEndpoint) {
1115-
wrapped := discoveryendpoint.WrapAggregatedDiscoveryToHandler(s.DiscoveryGroupManager, s.AggregatedDiscoveryGroupManager)
1116-
s.Handler.GoRestfulContainer.Add(wrapped.GenerateWebService("/apis", metav1.APIGroupList{}))
1117-
} else {
1118-
s.Handler.GoRestfulContainer.Add(s.DiscoveryGroupManager.WebService())
1119-
}
1112+
wrapped := discoveryendpoint.WrapAggregatedDiscoveryToHandler(s.DiscoveryGroupManager, s.AggregatedDiscoveryGroupManager)
1113+
s.Handler.GoRestfulContainer.Add(wrapped.GenerateWebService("/apis", metav1.APIGroupList{}))
11201114
}
11211115
if c.FlowControl != nil {
11221116
c.FlowControl.Install(s.Handler.NonGoRestfulMux)

staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -785,28 +785,26 @@ func (s *GenericAPIServer) installAPIResources(apiPrefix string, apiGroupInfo *A
785785
}
786786
resourceInfos = append(resourceInfos, r...)
787787

788-
if s.FeatureGate.Enabled(features.AggregatedDiscoveryEndpoint) {
789-
// Aggregated discovery only aggregates resources under /apis
790-
if apiPrefix == APIGroupPrefix {
791-
s.AggregatedDiscoveryGroupManager.AddGroupVersion(
792-
groupVersion.Group,
793-
apidiscoveryv2.APIVersionDiscovery{
794-
Freshness: apidiscoveryv2.DiscoveryFreshnessCurrent,
795-
Version: groupVersion.Version,
796-
Resources: discoveryAPIResources,
797-
},
798-
)
799-
} else {
800-
// There is only one group version for legacy resources, priority can be defaulted to 0.
801-
s.AggregatedLegacyDiscoveryGroupManager.AddGroupVersion(
802-
groupVersion.Group,
803-
apidiscoveryv2.APIVersionDiscovery{
804-
Freshness: apidiscoveryv2.DiscoveryFreshnessCurrent,
805-
Version: groupVersion.Version,
806-
Resources: discoveryAPIResources,
807-
},
808-
)
809-
}
788+
// Aggregated discovery only aggregates resources under /apis
789+
if apiPrefix == APIGroupPrefix {
790+
s.AggregatedDiscoveryGroupManager.AddGroupVersion(
791+
groupVersion.Group,
792+
apidiscoveryv2.APIVersionDiscovery{
793+
Freshness: apidiscoveryv2.DiscoveryFreshnessCurrent,
794+
Version: groupVersion.Version,
795+
Resources: discoveryAPIResources,
796+
},
797+
)
798+
} else {
799+
// There is only one group version for legacy resources, priority can be defaulted to 0.
800+
s.AggregatedLegacyDiscoveryGroupManager.AddGroupVersion(
801+
groupVersion.Group,
802+
apidiscoveryv2.APIVersionDiscovery{
803+
Freshness: apidiscoveryv2.DiscoveryFreshnessCurrent,
804+
Version: groupVersion.Version,
805+
Resources: discoveryAPIResources,
806+
},
807+
)
810808
}
811809

812810
}
@@ -844,12 +842,8 @@ func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo
844842
// Install the version handler.
845843
// Add a handler at /<apiPrefix> to enumerate the supported api versions.
846844
legacyRootAPIHandler := discovery.NewLegacyRootAPIHandler(s.discoveryAddresses, s.Serializer, apiPrefix)
847-
if s.FeatureGate.Enabled(features.AggregatedDiscoveryEndpoint) {
848-
wrapped := discoveryendpoint.WrapAggregatedDiscoveryToHandler(legacyRootAPIHandler, s.AggregatedLegacyDiscoveryGroupManager)
849-
s.Handler.GoRestfulContainer.Add(wrapped.GenerateWebService("/api", metav1.APIVersions{}))
850-
} else {
851-
s.Handler.GoRestfulContainer.Add(legacyRootAPIHandler.WebService())
852-
}
845+
wrapped := discoveryendpoint.WrapAggregatedDiscoveryToHandler(legacyRootAPIHandler, s.AggregatedLegacyDiscoveryGroupManager)
846+
s.Handler.GoRestfulContainer.Add(wrapped.GenerateWebService("/api", metav1.APIVersions{}))
853847
s.registerStorageReadinessCheck("", apiGroupInfo)
854848

855849
return nil

staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,8 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
275275
discoveryGroup: discoveryGroup(enabledVersions),
276276
}
277277

278-
if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryEndpoint) {
279-
apisHandlerWithAggregationSupport := aggregated.WrapAggregatedDiscoveryToHandler(apisHandler, s.GenericAPIServer.AggregatedDiscoveryGroupManager)
280-
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandlerWithAggregationSupport)
281-
} else {
282-
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
283-
}
278+
apisHandlerWithAggregationSupport := aggregated.WrapAggregatedDiscoveryToHandler(apisHandler, s.GenericAPIServer.AggregatedDiscoveryGroupManager)
279+
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandlerWithAggregationSupport)
284280
s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
285281

286282
apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().V1().APIServices(), s)
@@ -365,41 +361,39 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
365361
return nil
366362
})
367363

368-
if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryEndpoint) {
369-
s.discoveryAggregationController = NewDiscoveryManager(
370-
// Use aggregator as the source name to avoid overwriting native/CRD
371-
// groups
372-
s.GenericAPIServer.AggregatedDiscoveryGroupManager.WithSource(aggregated.AggregatorSource),
373-
)
364+
s.discoveryAggregationController = NewDiscoveryManager(
365+
// Use aggregator as the source name to avoid overwriting native/CRD
366+
// groups
367+
s.GenericAPIServer.AggregatedDiscoveryGroupManager.WithSource(aggregated.AggregatorSource),
368+
)
374369

375-
// Setup discovery endpoint
376-
s.GenericAPIServer.AddPostStartHookOrDie("apiservice-discovery-controller", func(context genericapiserver.PostStartHookContext) error {
377-
// Discovery aggregation depends on the apiservice registration controller
378-
// having the full list of APIServices already synced
379-
select {
380-
case <-context.Done():
381-
return nil
382-
// Context cancelled, should abort/clean goroutines
383-
case <-apiServiceRegistrationControllerInitiated:
384-
}
370+
// Setup discovery endpoint
371+
s.GenericAPIServer.AddPostStartHookOrDie("apiservice-discovery-controller", func(context genericapiserver.PostStartHookContext) error {
372+
// Discovery aggregation depends on the apiservice registration controller
373+
// having the full list of APIServices already synced
374+
select {
375+
case <-context.Done():
376+
return nil
377+
// Context cancelled, should abort/clean goroutines
378+
case <-apiServiceRegistrationControllerInitiated:
379+
}
385380

386-
// Run discovery manager's worker to watch for new/removed/updated
387-
// APIServices to the discovery document can be updated at runtime
388-
// When discovery is ready, all APIServices will be present, with APIServices
389-
// that have not successfully synced discovery to be present but marked as Stale.
390-
discoverySyncedCh := make(chan struct{})
391-
go s.discoveryAggregationController.Run(context.Done(), discoverySyncedCh)
392-
393-
select {
394-
case <-context.Done():
395-
return nil
396-
// Context cancelled, should abort/clean goroutines
397-
case <-discoverySyncedCh:
398-
// API services successfully sync
399-
}
381+
// Run discovery manager's worker to watch for new/removed/updated
382+
// APIServices to the discovery document can be updated at runtime
383+
// When discovery is ready, all APIServices will be present, with APIServices
384+
// that have not successfully synced discovery to be present but marked as Stale.
385+
discoverySyncedCh := make(chan struct{})
386+
go s.discoveryAggregationController.Run(context.Done(), discoverySyncedCh)
387+
388+
select {
389+
case <-context.Done():
400390
return nil
401-
})
402-
}
391+
// Context cancelled, should abort/clean goroutines
392+
case <-discoverySyncedCh:
393+
// API services successfully sync
394+
}
395+
return nil
396+
})
403397

404398
if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.StorageVersionAPI) &&
405399
utilfeature.DefaultFeatureGate.Enabled(genericfeatures.APIServerIdentity) {

test/featuregates_linter/test_data/versioned_feature_list.yaml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,6 @@
1212
lockToDefault: true
1313
preRelease: GA
1414
version: "1.30"
15-
- name: AggregatedDiscoveryEndpoint
16-
versionedSpecs:
17-
- default: false
18-
lockToDefault: false
19-
preRelease: Alpha
20-
version: "1.26"
21-
- default: true
22-
lockToDefault: false
23-
preRelease: Beta
24-
version: "1.27"
25-
- default: true
26-
lockToDefault: true
27-
preRelease: GA
28-
version: "1.30"
2915
- name: AllowDNSOnlyNodeCSR
3016
versionedSpecs:
3117
- default: true

test/integration/apiserver/discovery/discovery_test.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,10 @@ import (
3939
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
4040
"k8s.io/apimachinery/pkg/util/sets"
4141
discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated"
42-
genericfeatures "k8s.io/apiserver/pkg/features"
43-
utilfeature "k8s.io/apiserver/pkg/util/feature"
4442
"k8s.io/client-go/discovery"
4543
"k8s.io/client-go/dynamic"
4644
kubernetes "k8s.io/client-go/kubernetes"
4745
k8sscheme "k8s.io/client-go/kubernetes/scheme"
48-
featuregatetesting "k8s.io/component-base/featuregate/testing"
4946
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
5047
aggregator "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset"
5148
aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
@@ -185,8 +182,6 @@ func setup(t *testing.T) (context.Context, testClientSet, context.CancelFunc) {
185182
}
186183

187184
func TestReadinessAggregatedAPIServiceDiscovery(t *testing.T) {
188-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryEndpoint, true)
189-
190185
// Keep any goroutines spawned from running past the execution of this test
191186
ctx, client, cleanup := setup(t)
192187
defer cleanup()
@@ -284,8 +279,6 @@ func unregisterAPIService(ctx context.Context, client aggregator.Interface, gv m
284279
}
285280

286281
func TestAggregatedAPIServiceDiscovery(t *testing.T) {
287-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryEndpoint, true)
288-
289282
// Keep any goroutines spawned from running past the execution of this test
290283
ctx, client, cleanup := setup(t)
291284
defer cleanup()
@@ -386,8 +379,6 @@ func runTestCases(t *testing.T, cases []testCase) {
386379

387380
// Declarative tests targeting CRD integration
388381
func TestCRD(t *testing.T) {
389-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryEndpoint, true)
390-
391382
runTestCases(t, []testCase{
392383
{
393384
// Show that when a CRD is added it gets included on the discovery doc
@@ -626,8 +617,6 @@ func TestCRD(t *testing.T) {
626617
}
627618

628619
func TestFreshness(t *testing.T) {
629-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryEndpoint, true)
630-
631620
requireStaleGVs := func(gvs ...metav1.GroupVersion) inlineAction {
632621
return inlineAction(func(ctx context.Context, client testClient) error {
633622
document, err := FetchV2Discovery(ctx, client)
@@ -716,8 +705,6 @@ func TestFreshness(t *testing.T) {
716705
// Shows a group for which multiple APIServices specify a GroupPriorityMinimum,
717706
// it is sorted the same in both versions of discovery
718707
func TestGroupPriority(t *testing.T) {
719-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryEndpoint, true)
720-
721708
makeApiServiceSpec := func(gv metav1.GroupVersion, groupPriorityMin, versionPriority int) apiregistrationv1.APIServiceSpec {
722709
return apiregistrationv1.APIServiceSpec{
723710
Group: gv.Group,

0 commit comments

Comments
 (0)