@@ -34,14 +34,13 @@ import (
34
34
"k8s.io/apiserver/pkg/admission"
35
35
genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer"
36
36
"k8s.io/apiserver/pkg/storage/names"
37
- utilfeature "k8s.io/apiserver/pkg/util/feature"
38
37
"k8s.io/client-go/informers"
39
38
"k8s.io/client-go/kubernetes"
40
39
corev1listers "k8s.io/client-go/listers/core/v1"
41
40
"k8s.io/component-base/featuregate"
42
41
podutil "k8s.io/kubernetes/pkg/api/pod"
43
42
api "k8s.io/kubernetes/pkg/apis/core"
44
- kubefeatures "k8s.io/kubernetes/pkg/features"
43
+ "k8s.io/kubernetes/pkg/features"
45
44
"k8s.io/kubernetes/pkg/serviceaccount"
46
45
)
47
46
@@ -92,11 +91,12 @@ type Plugin struct {
92
91
93
92
generateName func (string ) string
94
93
95
- featureGate featuregate. FeatureGate
94
+ boundServiceAccountTokenVolume bool
96
95
}
97
96
98
97
var _ admission.MutationInterface = & Plugin {}
99
98
var _ admission.ValidationInterface = & Plugin {}
99
+ var _ genericadmissioninitializer.WantsFeatures = & Plugin {}
100
100
var _ = genericadmissioninitializer .WantsExternalKubeClientSet (& Plugin {})
101
101
var _ = genericadmissioninitializer .WantsExternalKubeInformerFactory (& Plugin {})
102
102
@@ -117,11 +117,14 @@ func NewServiceAccount() *Plugin {
117
117
RequireAPIToken : true ,
118
118
119
119
generateName : names .SimpleNameGenerator .GenerateName ,
120
-
121
- featureGate : utilfeature .DefaultFeatureGate ,
122
120
}
123
121
}
124
122
123
+ // InspectFeatureGates allows setting bools without taking a dep on a global variable
124
+ func (s * Plugin ) InspectFeatureGates (featureGates featuregate.FeatureGate ) {
125
+ s .boundServiceAccountTokenVolume = featureGates .Enabled (features .BoundServiceAccountTokenVolume )
126
+ }
127
+
125
128
// SetExternalKubeClientSet sets the client for the plugin
126
129
func (s * Plugin ) SetExternalKubeClientSet (cl kubernetes.Interface ) {
127
130
s .client = cl
@@ -443,8 +446,8 @@ func (s *Plugin) mountServiceAccountToken(serviceAccount *corev1.ServiceAccount,
443
446
allVolumeNames := sets .NewString ()
444
447
for _ , volume := range pod .Spec .Volumes {
445
448
allVolumeNames .Insert (volume .Name )
446
- if (! s .featureGate . Enabled ( kubefeatures . BoundServiceAccountTokenVolume ) && volume .Secret != nil && volume .Secret .SecretName == serviceAccountToken ) ||
447
- (s .featureGate . Enabled ( kubefeatures . BoundServiceAccountTokenVolume ) && strings .HasPrefix (volume .Name , ServiceAccountVolumeName + "-" )) {
449
+ if (! s .boundServiceAccountTokenVolume && volume .Secret != nil && volume .Secret .SecretName == serviceAccountToken ) ||
450
+ (s .boundServiceAccountTokenVolume && strings .HasPrefix (volume .Name , ServiceAccountVolumeName + "-" )) {
448
451
tokenVolumeName = volume .Name
449
452
hasTokenVolume = true
450
453
break
@@ -453,7 +456,7 @@ func (s *Plugin) mountServiceAccountToken(serviceAccount *corev1.ServiceAccount,
453
456
454
457
// Determine a volume name for the ServiceAccountTokenSecret in case we need it
455
458
if len (tokenVolumeName ) == 0 {
456
- if s .featureGate . Enabled ( kubefeatures . BoundServiceAccountTokenVolume ) {
459
+ if s .boundServiceAccountTokenVolume {
457
460
tokenVolumeName = s .generateName (ServiceAccountVolumeName + "-" )
458
461
} else {
459
462
// Try naming the volume the same as the serviceAccountToken, and uniquify if needed
@@ -510,7 +513,7 @@ func (s *Plugin) mountServiceAccountToken(serviceAccount *corev1.ServiceAccount,
510
513
}
511
514
512
515
func (s * Plugin ) createVolume (tokenVolumeName , secretName string ) api.Volume {
513
- if s .featureGate . Enabled ( kubefeatures . BoundServiceAccountTokenVolume ) {
516
+ if s .boundServiceAccountTokenVolume {
514
517
return api.Volume {
515
518
Name : tokenVolumeName ,
516
519
VolumeSource : api.VolumeSource {
0 commit comments