Merge pull request #130347 from Jefftree/remove-v2beta1-agg-discovery
Add a deprecated feature gate to stop serving apidiscovery.k8s.io/v2beta1 Kubernetes-commit: 8906223b000d94ad3947c1582c5ba452c6766e6c
This commit is contained in:
		
						commit
						fa03ee3ea0
					
				
							
								
								
									
										2
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										2
									
								
								go.mod
								
								
								
								
							|  | @ -50,7 +50,7 @@ require ( | |||
| 	gopkg.in/natefinch/lumberjack.v2 v2.2.1 | ||||
| 	k8s.io/api v0.0.0-20250314173034-c4f583a4a0c0 | ||||
| 	k8s.io/apimachinery v0.0.0-20250316224947-6ce776c88d38 | ||||
| 	k8s.io/client-go v0.0.0-20250314173425-595b7ca245de | ||||
| 	k8s.io/client-go v0.0.0-20250317173544-97feb5b4e133 | ||||
| 	k8s.io/component-base v0.0.0-20250314013811-792166919ea6 | ||||
| 	k8s.io/klog/v2 v2.130.1 | ||||
| 	k8s.io/kms v0.0.0-20250308014716-89c23671c056 | ||||
|  |  | |||
							
								
								
									
										4
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										4
									
								
								go.sum
								
								
								
								
							|  | @ -371,8 +371,8 @@ k8s.io/api v0.0.0-20250314173034-c4f583a4a0c0 h1:lhmrz3g0hGKYb1C6kbotRXKcRCx/1x2 | |||
| k8s.io/api v0.0.0-20250314173034-c4f583a4a0c0/go.mod h1:KyMJKlD84N/kjcmc/m15SaydURaQRYKGRGRLsz83opo= | ||||
| k8s.io/apimachinery v0.0.0-20250316224947-6ce776c88d38 h1:FRtTvD6cz3EPDpIonDNShy6I5sB7LebdSb8/oEj5bkg= | ||||
| k8s.io/apimachinery v0.0.0-20250316224947-6ce776c88d38/go.mod h1:S2OIkExGqJOXYSYcAJwQ9zWcc6BkBUdTJUu4M7z0cvo= | ||||
| k8s.io/client-go v0.0.0-20250314173425-595b7ca245de h1:nG9eGALJuvdG1d4UqcFZm5V8FA/3hYUOL8W0cmQnYts= | ||||
| k8s.io/client-go v0.0.0-20250314173425-595b7ca245de/go.mod h1:TDbF5Wy/pnwUMVohjRaLfKAUWB05xIZT7mqiqsTONbE= | ||||
| k8s.io/client-go v0.0.0-20250317173544-97feb5b4e133 h1:yHpcNTxSamIcQi4lJUZDJh2wdVuR45yTPjgjpNA1SlQ= | ||||
| k8s.io/client-go v0.0.0-20250317173544-97feb5b4e133/go.mod h1:Crv1s2vYOOdElbz/0fFLNhEaLcK48ZXjuUHuwDLBaMo= | ||||
| k8s.io/component-base v0.0.0-20250314013811-792166919ea6 h1:e3uteoFmipq017BqvEGsZMd2NJ70BNG8q9tJqmoAIjw= | ||||
| k8s.io/component-base v0.0.0-20250314013811-792166919ea6/go.mod h1:fofD+M/PFvgSSrpoHM4YNpml4jKf8cMXogjsQgRnryA= | ||||
| k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ import ( | |||
| 	"k8s.io/apimachinery/pkg/runtime/serializer" | ||||
| 	"k8s.io/apimachinery/pkg/version" | ||||
| 	apidiscoveryv2conversion "k8s.io/apiserver/pkg/apis/apidiscovery/v2" | ||||
| 	genericfeatures "k8s.io/apiserver/pkg/features" | ||||
| 
 | ||||
| 	"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" | ||||
| 
 | ||||
|  | @ -40,6 +41,7 @@ import ( | |||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/runtime" | ||||
| 	utilruntime "k8s.io/apimachinery/pkg/util/runtime" | ||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||
| 	"k8s.io/klog/v2" | ||||
| ) | ||||
| 
 | ||||
|  | @ -538,6 +540,14 @@ func (rdm *resourceDiscoveryManager) serveHTTP(resp http.ResponseWriter, req *ht | |||
| 		resp.WriteHeader(http.StatusInternalServerError) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	if mediaType.Convert.GroupVersion() == apidiscoveryv2beta1.SchemeGroupVersion && | ||||
| 		utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryRemoveBetaType) { | ||||
| 		klog.Errorf("aggregated discovery version v2beta1 is removed. Please update to use v2") | ||||
| 		resp.WriteHeader(http.StatusNotFound) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	targetGV = mediaType.Convert.GroupVersion() | ||||
| 
 | ||||
| 	if len(etag) > 0 { | ||||
|  |  | |||
|  | @ -43,6 +43,9 @@ import ( | |||
| 	"k8s.io/apimachinery/pkg/version" | ||||
| 	apidiscoveryv2conversion "k8s.io/apiserver/pkg/apis/apidiscovery/v2" | ||||
| 	discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated" | ||||
| 	genericfeatures "k8s.io/apiserver/pkg/features" | ||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||
| 	featuregatetesting "k8s.io/component-base/featuregate/testing" | ||||
| ) | ||||
| 
 | ||||
| var scheme = runtime.NewScheme() | ||||
|  | @ -187,6 +190,7 @@ func TestBasicResponseProtobuf(t *testing.T) { | |||
| 
 | ||||
| // V2Beta1 should still be served
 | ||||
| func TestV2Beta1SkewSupport(t *testing.T) { | ||||
| 	featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryRemoveBetaType, false) | ||||
| 	manager := discoveryendpoint.NewResourceManager("apis") | ||||
| 
 | ||||
| 	apis := fuzzAPIGroups(1, 3, 10) | ||||
|  |  | |||
|  | @ -18,6 +18,9 @@ package aggregated | |||
| 
 | ||||
| import ( | ||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||
| 
 | ||||
| 	genericfeatures "k8s.io/apiserver/pkg/features" | ||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||
| ) | ||||
| 
 | ||||
| // Interface is from "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
 | ||||
|  | @ -37,6 +40,9 @@ func (discoveryEndpointRestrictions) AllowsStreamSchema(s string) bool { return | |||
| // IsAggregatedDiscoveryGVK checks if a provided GVK is the GVK for serving aggregated discovery.
 | ||||
| func IsAggregatedDiscoveryGVK(gvk *schema.GroupVersionKind) bool { | ||||
| 	if gvk != nil { | ||||
| 		if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryRemoveBetaType) { | ||||
| 			return gvk.Group == "apidiscovery.k8s.io" && gvk.Version == "v2" && gvk.Kind == "APIGroupDiscoveryList" | ||||
| 		} | ||||
| 		return gvk.Group == "apidiscovery.k8s.io" && (gvk.Version == "v2beta1" || gvk.Version == "v2") && gvk.Kind == "APIGroupDiscoveryList" | ||||
| 	} | ||||
| 	return false | ||||
|  |  | |||
|  | @ -24,6 +24,9 @@ import ( | |||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	genericfeatures "k8s.io/apiserver/pkg/features" | ||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||
| 	featuregatetesting "k8s.io/component-base/featuregate/testing" | ||||
| ) | ||||
| 
 | ||||
| const discoveryPath = "/apis" | ||||
|  | @ -103,6 +106,9 @@ func TestAggregationEnabled(t *testing.T) { | |||
| 	} | ||||
| 
 | ||||
| 	for _, tc := range testCases { | ||||
| 		if tc.accept == aggregatedV2Beta1JSONAccept || tc.accept == aggregatedV2Beta1ProtoAccept { | ||||
| 			featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryRemoveBetaType, false) | ||||
| 		} | ||||
| 		body := fetchPath(wrapped, discoveryPath, tc.accept) | ||||
| 		assert.Equal(t, tc.expected, body) | ||||
| 	} | ||||
|  |  | |||
|  | @ -34,6 +34,13 @@ const ( | |||
| 	// of code conflicts because changes are more likely to be scattered
 | ||||
| 	// across the file.
 | ||||
| 
 | ||||
| 	// owner: @jefftree
 | ||||
| 	//
 | ||||
| 	// Remove the v2beta1 apidiscovery.k8s.io/v2beta1 group version. Aggregated
 | ||||
| 	// discovery implements its own handlers and follows a different lifecycle than
 | ||||
| 	// traditional k8s resources.
 | ||||
| 	AggregatedDiscoveryRemoveBetaType featuregate.Feature = "AggregatedDiscoveryRemoveBetaType" | ||||
| 
 | ||||
| 	// owner: @modulitos
 | ||||
| 	//
 | ||||
| 	// Allow user.DefaultInfo.UID to be set from x509 cert during cert auth.
 | ||||
|  | @ -250,6 +257,11 @@ func init() { | |||
| // Entries are alphabetized and separated from each other with blank lines to avoid sweeping gofmt changes
 | ||||
| // when adding or removing one entry.
 | ||||
| var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{ | ||||
| 	AggregatedDiscoveryRemoveBetaType: { | ||||
| 		{Version: version.MustParse("1.0"), Default: false, PreRelease: featuregate.GA}, | ||||
| 		{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Deprecated}, | ||||
| 	}, | ||||
| 
 | ||||
| 	AllowParsingUserUIDFromCertAuth: { | ||||
| 		{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Beta}, | ||||
| 	}, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue