Skip to content

Commit 8f97ac7

Browse files
authored
Merge pull request kubernetes#130530 from pacoxu/v1.33-fg-cleanup
v1.33 feature gate cleanup
2 parents b7b8942 + f167454 commit 8f97ac7

File tree

10 files changed

+67
-208
lines changed

10 files changed

+67
-208
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 & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -210,18 +210,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
210210
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Alpha},
211211
},
212212

213-
genericfeatures.AdmissionWebhookMatchConditions: {
214-
{Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha},
215-
{Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Beta},
216-
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
217-
},
218-
219-
genericfeatures.AggregatedDiscoveryEndpoint: {
220-
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
221-
{Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta},
222-
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
223-
},
224-
225213
genericfeatures.AllowParsingUserUIDFromCertAuth: {
226214
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Beta},
227215
},
@@ -300,12 +288,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
300288
{Version: version.MustParse("1.24"), Default: true, PreRelease: featuregate.Beta},
301289
},
302290

303-
genericfeatures.RemainingItemCount: {
304-
{Version: version.MustParse("1.15"), Default: false, PreRelease: featuregate.Alpha},
305-
{Version: version.MustParse("1.16"), Default: true, PreRelease: featuregate.Beta},
306-
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
307-
},
308-
309291
genericfeatures.RemoteRequestHeaderUID: {
310292
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Alpha},
311293
},

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 & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,6 @@ const (
3434
// of code conflicts because changes are more likely to be scattered
3535
// across the file.
3636

37-
// owner: @ivelichkovich, @tallclair
38-
// stable: v1.30
39-
// kep: https://kep.k8s.io/3716
40-
//
41-
// Enables usage of MatchConditions fields to use CEL expressions for matching on admission webhooks
42-
AdmissionWebhookMatchConditions featuregate.Feature = "AdmissionWebhookMatchConditions"
43-
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-
5137
// owner: @modulitos
5238
//
5339
// Allow user.DefaultInfo.UID to be set from x509 cert during cert auth.
@@ -142,13 +128,6 @@ const (
142128
// in the spec returned from kube-apiserver.
143129
OpenAPIEnums featuregate.Feature = "OpenAPIEnums"
144130

145-
// owner: @caesarxuchao
146-
// stable: 1.29
147-
//
148-
// Allow apiservers to show a count of remaining items in the response
149-
// to a chunking list request.
150-
RemainingItemCount featuregate.Feature = "RemainingItemCount"
151-
152131
// owner: @stlaz
153132
//
154133
// Enable kube-apiserver to accept UIDs via request header authentication.
@@ -267,18 +246,6 @@ func init() {
267246
// Entries are alphabetized and separated from each other with blank lines to avoid sweeping gofmt changes
268247
// when adding or removing one entry.
269248
var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
270-
AdmissionWebhookMatchConditions: {
271-
{Version: version.MustParse("1.27"), Default: false, PreRelease: featuregate.Alpha},
272-
{Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Beta},
273-
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
274-
},
275-
276-
AggregatedDiscoveryEndpoint: {
277-
{Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha},
278-
{Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta},
279-
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
280-
},
281-
282249
AllowParsingUserUIDFromCertAuth: {
283250
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Beta},
284251
},
@@ -357,12 +324,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
357324
{Version: version.MustParse("1.24"), Default: true, PreRelease: featuregate.Beta},
358325
},
359326

360-
RemainingItemCount: {
361-
{Version: version.MustParse("1.15"), Default: false, PreRelease: featuregate.Alpha},
362-
{Version: version.MustParse("1.16"), Default: true, PreRelease: featuregate.Beta},
363-
{Version: version.MustParse("1.29"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
364-
},
365-
366327
RemoteRequestHeaderUID: {
367328
{Version: version.MustParse("1.32"), Default: false, PreRelease: featuregate.Alpha},
368329
},

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 & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,3 @@
1-
- name: AdmissionWebhookMatchConditions
2-
versionedSpecs:
3-
- default: false
4-
lockToDefault: false
5-
preRelease: Alpha
6-
version: "1.27"
7-
- default: true
8-
lockToDefault: false
9-
preRelease: Beta
10-
version: "1.28"
11-
- default: true
12-
lockToDefault: true
13-
preRelease: GA
14-
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"
291
- name: AllowDNSOnlyNodeCSR
302
versionedSpecs:
313
- default: true
@@ -1088,20 +1060,6 @@
10881060
lockToDefault: false
10891061
preRelease: Beta
10901062
version: "1.31"
1091-
- name: RemainingItemCount
1092-
versionedSpecs:
1093-
- default: false
1094-
lockToDefault: false
1095-
preRelease: Alpha
1096-
version: "1.15"
1097-
- default: true
1098-
lockToDefault: false
1099-
preRelease: Beta
1100-
version: "1.16"
1101-
- default: true
1102-
lockToDefault: true
1103-
preRelease: GA
1104-
version: "1.29"
11051063
- name: RemoteRequestHeaderUID
11061064
versionedSpecs:
11071065
- default: false

0 commit comments

Comments
 (0)