Skip to content

Commit 59850b5

Browse files
committed
Promote ServiceAccountTokenNodeBinding to GA
1 parent 728a4d2 commit 59850b5

File tree

4 files changed

+11
-44
lines changed

4 files changed

+11
-44
lines changed

pkg/features/versioned_kube_features.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -700,24 +700,25 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
700700
ServiceAccountTokenJTI: {
701701
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
702702
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
703-
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.34
703+
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
704704
},
705705

706706
ServiceAccountTokenNodeBinding: {
707707
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
708708
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
709+
{Version: version.MustParse("1.33"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
709710
},
710711

711712
ServiceAccountTokenNodeBindingValidation: {
712713
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
713714
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
714-
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.34
715+
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
715716
},
716717

717718
ServiceAccountTokenPodNodeInfo: {
718719
{Version: version.MustParse("1.29"), Default: false, PreRelease: featuregate.Alpha},
719720
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.Beta},
720-
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.34
721+
{Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
721722
},
722723

723724
ServiceTrafficDistribution: {

pkg/serviceaccount/claims_test.go

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@ import (
2929
apierrors "k8s.io/apimachinery/pkg/api/errors"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3131
"k8s.io/apimachinery/pkg/runtime/schema"
32-
utilfeature "k8s.io/apiserver/pkg/util/feature"
33-
featuregatetesting "k8s.io/component-base/featuregate/testing"
3432
"k8s.io/kubernetes/pkg/apis/core"
35-
"k8s.io/kubernetes/pkg/features"
3633
)
3734

3835
func init() {
@@ -88,8 +85,6 @@ func TestClaims(t *testing.T) {
8885
// desired
8986
sc *jwt.Claims
9087
pc *privateClaims
91-
92-
featureNodeBinding bool
9388
}{
9489
{
9590
// pod and secret
@@ -196,22 +191,10 @@ func TestClaims(t *testing.T) {
196191
},
197192
},
198193
},
199-
{
200-
// node with feature gate disabled
201-
sa: sa,
202-
node: node,
203-
// really fast
204-
exp: 0,
205-
// nil audience
206-
aud: nil,
207-
err: "token bound to Node object requested, but \"ServiceAccountTokenNodeBinding\" feature gate is disabled",
208-
},
209194
{
210195
// node alone
211196
sa: sa,
212197
node: node,
213-
// enable node binding feature
214-
featureNodeBinding: true,
215198
// really fast
216199
exp: 0,
217200
// nil audience
@@ -263,8 +246,6 @@ func TestClaims(t *testing.T) {
263246
sa: sa,
264247
sec: sec,
265248
node: node,
266-
// enable embedding node info feature
267-
featureNodeBinding: true,
268249
// really fast
269250
exp: 0,
270251
// nil audience
@@ -293,18 +274,6 @@ func TestClaims(t *testing.T) {
293274
},
294275
},
295276
},
296-
{
297-
// ensure it fails if node binding gate is disabled
298-
sa: sa,
299-
node: node,
300-
featureNodeBinding: false,
301-
// really fast
302-
exp: 0,
303-
// nil audience
304-
aud: nil,
305-
306-
err: "token bound to Node object requested, but \"ServiceAccountTokenNodeBinding\" feature gate is disabled",
307-
},
308277
}
309278
for i, c := range cs {
310279
t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) {
@@ -319,9 +288,6 @@ func TestClaims(t *testing.T) {
319288
return string(b)
320289
}
321290

322-
// set feature flags for the duration of the test case
323-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceAccountTokenNodeBinding, c.featureNodeBinding)
324-
325291
sc, pc, err := Claims(c.sa, c.pod, c.sec, c.node, c.exp, c.warnafter, c.aud)
326292
if err != nil && err.Error() != c.err {
327293
t.Errorf("expected error %q but got: %v", c.err, err)

test/featuregates_linter/test_data/versioned_feature_list.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,10 @@
12061206
lockToDefault: false
12071207
preRelease: Beta
12081208
version: "1.31"
1209+
- default: true
1210+
lockToDefault: true
1211+
preRelease: GA
1212+
version: "1.33"
12091213
- name: ServiceAccountTokenNodeBindingValidation
12101214
versionedSpecs:
12111215
- default: false

test/integration/auth/svcaccttoken_test.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
v1 "k8s.io/api/core/v1"
4141
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4242
"k8s.io/apimachinery/pkg/types"
43+
"k8s.io/apimachinery/pkg/util/version"
4344
"k8s.io/apiserver/pkg/authentication/authenticator"
4445
apiserverserviceaccount "k8s.io/apiserver/pkg/authentication/serviceaccount"
4546
"k8s.io/apiserver/pkg/authentication/user"
@@ -136,12 +137,6 @@ func TestServiceAccountTokenCreate(t *testing.T) {
136137

137138
tCtx := ktesting.Init(t)
138139

139-
// Enable the node token improvements feature gates prior to starting the apiserver, as the node getter is
140-
// conditionally passed to the service account token generator based on feature enablement.
141-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceAccountTokenNodeBinding, true)
142-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceAccountTokenPodNodeInfo, true)
143-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceAccountTokenNodeBindingValidation, true)
144-
145140
// Start the server
146141
var serverAddress string
147142
kubeClient, kubeConfig, tearDownFn := framework.StartTestServer(tCtx, t, framework.TestServerSetup{
@@ -475,7 +470,8 @@ func TestServiceAccountTokenCreate(t *testing.T) {
475470
t.Run("bound to service account and a pod with an assigned nodeName", testPodWithAssignedNode(node))
476471

477472
t.Run("fails to bind to a Node if the feature gate is disabled", func(t *testing.T) {
478-
// Disable node binding
473+
// Disable node binding, emulating 1.32
474+
featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParseMajorMinor("1.32"))
479475
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceAccountTokenNodeBinding, false)
480476

481477
// Create ServiceAccount and Node objects

0 commit comments

Comments
 (0)