Skip to content

Commit cba5376

Browse files
Jefftreek8s-publishing-bot
authored andcommitted
Gate apidiscovery/v2beta1 serving with a feature gate
Kubernetes-commit: 95d3d4a22d705ef6bf2d494c065743d356914e8d
1 parent 544ce3d commit cba5376

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

pkg/endpoints/discovery/aggregated/handler.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/apimachinery/pkg/runtime/serializer"
3030
"k8s.io/apimachinery/pkg/version"
3131
apidiscoveryv2conversion "k8s.io/apiserver/pkg/apis/apidiscovery/v2"
32+
genericfeatures "k8s.io/apiserver/pkg/features"
3233

3334
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
3435

@@ -40,6 +41,7 @@ import (
4041
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4142
"k8s.io/apimachinery/pkg/runtime"
4243
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
44+
utilfeature "k8s.io/apiserver/pkg/util/feature"
4345
"k8s.io/klog/v2"
4446
)
4547

@@ -538,6 +540,14 @@ func (rdm *resourceDiscoveryManager) serveHTTP(resp http.ResponseWriter, req *ht
538540
resp.WriteHeader(http.StatusInternalServerError)
539541
return
540542
}
543+
544+
if mediaType.Convert.GroupVersion() == apidiscoveryv2beta1.SchemeGroupVersion &&
545+
utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryRemoveBetaType) {
546+
klog.Errorf("aggregated discovery version v2beta1 is removed. Please update to use v2")
547+
resp.WriteHeader(http.StatusNotFound)
548+
return
549+
}
550+
541551
targetGV = mediaType.Convert.GroupVersion()
542552

543553
if len(etag) > 0 {

pkg/endpoints/discovery/aggregated/handler_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ import (
4343
"k8s.io/apimachinery/pkg/version"
4444
apidiscoveryv2conversion "k8s.io/apiserver/pkg/apis/apidiscovery/v2"
4545
discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated"
46+
genericfeatures "k8s.io/apiserver/pkg/features"
47+
utilfeature "k8s.io/apiserver/pkg/util/feature"
48+
featuregatetesting "k8s.io/component-base/featuregate/testing"
4649
)
4750

4851
var scheme = runtime.NewScheme()
@@ -187,6 +190,7 @@ func TestBasicResponseProtobuf(t *testing.T) {
187190

188191
// V2Beta1 should still be served
189192
func TestV2Beta1SkewSupport(t *testing.T) {
193+
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryRemoveBetaType, false)
190194
manager := discoveryendpoint.NewResourceManager("apis")
191195

192196
apis := fuzzAPIGroups(1, 3, 10)

pkg/endpoints/discovery/aggregated/negotiation.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ package aggregated
1818

1919
import (
2020
"k8s.io/apimachinery/pkg/runtime/schema"
21+
22+
genericfeatures "k8s.io/apiserver/pkg/features"
23+
utilfeature "k8s.io/apiserver/pkg/util/feature"
2124
)
2225

2326
// Interface is from "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
@@ -37,6 +40,9 @@ func (discoveryEndpointRestrictions) AllowsStreamSchema(s string) bool { return
3740
// IsAggregatedDiscoveryGVK checks if a provided GVK is the GVK for serving aggregated discovery.
3841
func IsAggregatedDiscoveryGVK(gvk *schema.GroupVersionKind) bool {
3942
if gvk != nil {
43+
if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.AggregatedDiscoveryRemoveBetaType) {
44+
return gvk.Group == "apidiscovery.k8s.io" && gvk.Version == "v2" && gvk.Kind == "APIGroupDiscoveryList"
45+
}
4046
return gvk.Group == "apidiscovery.k8s.io" && (gvk.Version == "v2beta1" || gvk.Version == "v2") && gvk.Kind == "APIGroupDiscoveryList"
4147
}
4248
return false

pkg/endpoints/discovery/aggregated/wrapper_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ 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"
2730
)
2831

2932
const discoveryPath = "/apis"
@@ -103,6 +106,9 @@ func TestAggregationEnabled(t *testing.T) {
103106
}
104107

105108
for _, tc := range testCases {
109+
if tc.accept == aggregatedV2Beta1JSONAccept || tc.accept == aggregatedV2Beta1ProtoAccept {
110+
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.AggregatedDiscoveryRemoveBetaType, false)
111+
}
106112
body := fetchPath(wrapped, discoveryPath, tc.accept)
107113
assert.Equal(t, tc.expected, body)
108114
}

pkg/features/kube_features.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ const (
3434
// of code conflicts because changes are more likely to be scattered
3535
// across the file.
3636

37+
// owner: @jefftree
38+
//
39+
// Remove the v2beta1 apidiscovery.k8s.io/v2beta1 group version. Aggregated
40+
// discovery implements its own handlers and follows a different lifecycle than
41+
// traditional k8s resources.
42+
AggregatedDiscoveryRemoveBetaType featuregate.Feature = "AggregatedDiscoveryRemoveBetaType"
43+
3744
// owner: @modulitos
3845
//
3946
// Allow user.DefaultInfo.UID to be set from x509 cert during cert auth.
@@ -250,6 +257,11 @@ func init() {
250257
// Entries are alphabetized and separated from each other with blank lines to avoid sweeping gofmt changes
251258
// when adding or removing one entry.
252259
var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
260+
AggregatedDiscoveryRemoveBetaType: {
261+
{Version: version.MustParse("1.0"), Default: false, PreRelease: featuregate.GA},
262+
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Deprecated},
263+
},
264+
253265
AllowParsingUserUIDFromCertAuth: {
254266
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.Beta},
255267
},

0 commit comments

Comments
 (0)