mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
add BoundServiceAccountTokenVolume feature
* require TokenRequest to be enabled and configured * bind ca.crt publisher to this feature rather than to TokenRequest
This commit is contained in:
parent
2dcdad297e
commit
f4ff26679f
@ -125,7 +125,7 @@ func startCSRCleanerController(ctx ControllerContext) (http.Handler, bool, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func startRootCACertPublisher(ctx ControllerContext) (http.Handler, bool, error) {
|
func startRootCACertPublisher(ctx ControllerContext) (http.Handler, bool, error) {
|
||||||
if !utilfeature.DefaultFeatureGate.Enabled(features.TokenRequest) {
|
if !utilfeature.DefaultFeatureGate.Enabled(features.BoundServiceAccountTokenVolume) {
|
||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,6 +269,14 @@ const (
|
|||||||
// Enable ServiceAccountTokenVolumeProjection support in ProjectedVolumes.
|
// Enable ServiceAccountTokenVolumeProjection support in ProjectedVolumes.
|
||||||
TokenRequestProjection utilfeature.Feature = "TokenRequestProjection"
|
TokenRequestProjection utilfeature.Feature = "TokenRequestProjection"
|
||||||
|
|
||||||
|
// owner: @mikedanese
|
||||||
|
// alpha: v1.13
|
||||||
|
//
|
||||||
|
// Migrate ServiceAccount volumes to use a projected volume consisting of a
|
||||||
|
// ServiceAccountTokenVolumeProjection. This feature adds new required flags
|
||||||
|
// to the API server.
|
||||||
|
BoundServiceAccountTokenVolume utilfeature.Feature = "BoundServiceAccountTokenVolume"
|
||||||
|
|
||||||
// owner: @Random-Liu
|
// owner: @Random-Liu
|
||||||
// beta: v1.11
|
// beta: v1.11
|
||||||
//
|
//
|
||||||
@ -428,6 +436,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
|
|||||||
ScheduleDaemonSetPods: {Default: true, PreRelease: utilfeature.Beta},
|
ScheduleDaemonSetPods: {Default: true, PreRelease: utilfeature.Beta},
|
||||||
TokenRequest: {Default: true, PreRelease: utilfeature.Beta},
|
TokenRequest: {Default: true, PreRelease: utilfeature.Beta},
|
||||||
TokenRequestProjection: {Default: true, PreRelease: utilfeature.Beta},
|
TokenRequestProjection: {Default: true, PreRelease: utilfeature.Beta},
|
||||||
|
BoundServiceAccountTokenVolume: {Default: false, PreRelease: utilfeature.Alpha},
|
||||||
CRIContainerLogRotation: {Default: true, PreRelease: utilfeature.Beta},
|
CRIContainerLogRotation: {Default: true, PreRelease: utilfeature.Beta},
|
||||||
GCERegionalPersistentDisk: {Default: true, PreRelease: utilfeature.GA},
|
GCERegionalPersistentDisk: {Default: true, PreRelease: utilfeature.GA},
|
||||||
RunAsGroup: {Default: false, PreRelease: utilfeature.Alpha},
|
RunAsGroup: {Default: false, PreRelease: utilfeature.Alpha},
|
||||||
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package options
|
package options
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
@ -29,7 +30,9 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/authentication/authenticator"
|
"k8s.io/apiserver/pkg/authentication/authenticator"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
genericoptions "k8s.io/apiserver/pkg/server/options"
|
genericoptions "k8s.io/apiserver/pkg/server/options"
|
||||||
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/apiserver/pkg/util/flag"
|
"k8s.io/apiserver/pkg/util/flag"
|
||||||
|
"k8s.io/kubernetes/pkg/features"
|
||||||
kubeauthenticator "k8s.io/kubernetes/pkg/kubeapiserver/authenticator"
|
kubeauthenticator "k8s.io/kubernetes/pkg/kubeapiserver/authenticator"
|
||||||
authzmodes "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
|
authzmodes "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
|
||||||
)
|
)
|
||||||
@ -170,6 +173,18 @@ func (s *BuiltInAuthenticationOptions) Validate() []error {
|
|||||||
allErrors = append(allErrors, fmt.Errorf("service-account-issuer contained a ':' but was not a valid URL: %v", err))
|
allErrors = append(allErrors, fmt.Errorf("service-account-issuer contained a ':' but was not a valid URL: %v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if s.ServiceAccounts != nil && utilfeature.DefaultFeatureGate.Enabled(features.BoundServiceAccountTokenVolume) {
|
||||||
|
if !utilfeature.DefaultFeatureGate.Enabled(features.TokenRequest) || !utilfeature.DefaultFeatureGate.Enabled(features.TokenRequestProjection) {
|
||||||
|
allErrors = append(allErrors, errors.New("If the BoundServiceAccountTokenVolume feature is enabled,"+
|
||||||
|
" the TokenRequest and TokenRequestProjection features must also be enabled"))
|
||||||
|
}
|
||||||
|
if len(s.ServiceAccounts.Issuer) == 0 {
|
||||||
|
allErrors = append(allErrors, errors.New("service-account-issuer is a required flag when BoundServiceAccountTokenVolume is enabled"))
|
||||||
|
}
|
||||||
|
if len(s.ServiceAccounts.KeyFiles) == 0 {
|
||||||
|
allErrors = append(allErrors, errors.New("service-account-key-file is a required flag when BoundServiceAccountTokenVolume is enabled"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return allErrors
|
return allErrors
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user