Disable RBAC post-start hook if not using the RBAC authorizer
This commit is contained in:
		@@ -32,12 +32,14 @@ go_library(
 | 
			
		||||
        "//pkg/kubeapiserver:go_default_library",
 | 
			
		||||
        "//pkg/kubeapiserver/admission:go_default_library",
 | 
			
		||||
        "//pkg/kubeapiserver/authenticator:go_default_library",
 | 
			
		||||
        "//pkg/kubeapiserver/authorizer/modes:go_default_library",
 | 
			
		||||
        "//pkg/kubeapiserver/options:go_default_library",
 | 
			
		||||
        "//pkg/kubeapiserver/server:go_default_library",
 | 
			
		||||
        "//pkg/master:go_default_library",
 | 
			
		||||
        "//pkg/master/thirdparty:go_default_library",
 | 
			
		||||
        "//pkg/master/tunneler:go_default_library",
 | 
			
		||||
        "//pkg/registry/cachesize:go_default_library",
 | 
			
		||||
        "//pkg/registry/rbac/rest:go_default_library",
 | 
			
		||||
        "//pkg/version:go_default_library",
 | 
			
		||||
        "//plugin/pkg/admission/admit:go_default_library",
 | 
			
		||||
        "//plugin/pkg/admission/alwayspullimages:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -66,11 +66,13 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubeapiserver"
 | 
			
		||||
	kubeadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
 | 
			
		||||
	kubeauthenticator "k8s.io/kubernetes/pkg/kubeapiserver/authenticator"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
 | 
			
		||||
	kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
 | 
			
		||||
	kubeserver "k8s.io/kubernetes/pkg/kubeapiserver/server"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/master"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/master/tunneler"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/registry/cachesize"
 | 
			
		||||
	rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version"
 | 
			
		||||
	"k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
@@ -353,6 +355,9 @@ func BuildGenericConfig(s *options.ServerRunOptions) (*genericapiserver.Config,
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, nil, nil, fmt.Errorf("invalid authorization config: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if !sets.NewString(s.Authorization.Modes()...).Has(modes.ModeRBAC) {
 | 
			
		||||
		genericConfig.DisabledPostStartHooks.Insert(rbacrest.PostStartHookName)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	genericConfig.AdmissionControl, err = BuildAdmission(s, client, sharedInformers, genericConfig.Authorizer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -36,10 +36,14 @@ function run_kube_apiserver() {
 | 
			
		||||
  # Admission Controllers to invoke prior to persisting objects in cluster
 | 
			
		||||
  ADMISSION_CONTROL="NamespaceLifecycle,LimitRanger,ResourceQuota"
 | 
			
		||||
 | 
			
		||||
  # Include RBAC (to exercise bootstrapping), and AlwaysAllow to allow all actions
 | 
			
		||||
  AUTHORIZATION_MODE="RBAC,AlwaysAllow"
 | 
			
		||||
 | 
			
		||||
  "${KUBE_OUTPUT_HOSTBIN}/kube-apiserver" \
 | 
			
		||||
    --address="127.0.0.1" \
 | 
			
		||||
    --public-address-override="127.0.0.1" \
 | 
			
		||||
    --port="${API_PORT}" \
 | 
			
		||||
    --authorization-mode="${AUTHORIZATION_MODE}" \
 | 
			
		||||
    --admission-control="${ADMISSION_CONTROL}" \
 | 
			
		||||
    --etcd-servers="http://${ETCD_HOST}:${ETCD_PORT}" \
 | 
			
		||||
    --public-address-override="127.0.0.1" \
 | 
			
		||||
 
 | 
			
		||||
@@ -75,14 +75,17 @@ func (s *BuiltInAuthorizationOptions) AddFlags(fs *pflag.FlagSet) {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *BuiltInAuthorizationOptions) ToAuthorizationConfig(informerFactory informers.SharedInformerFactory) authorizer.AuthorizationConfig {
 | 
			
		||||
func (s *BuiltInAuthorizationOptions) Modes() []string {
 | 
			
		||||
	modes := []string{}
 | 
			
		||||
	if len(s.Mode) > 0 {
 | 
			
		||||
		modes = strings.Split(s.Mode, ",")
 | 
			
		||||
	}
 | 
			
		||||
	return modes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *BuiltInAuthorizationOptions) ToAuthorizationConfig(informerFactory informers.SharedInformerFactory) authorizer.AuthorizationConfig {
 | 
			
		||||
	return authorizer.AuthorizationConfig{
 | 
			
		||||
		AuthorizationModes:          modes,
 | 
			
		||||
		AuthorizationModes:          s.Modes(),
 | 
			
		||||
		PolicyFile:                  s.PolicyFile,
 | 
			
		||||
		WebhookConfigFile:           s.WebhookConfigFile,
 | 
			
		||||
		WebhookCacheAuthorizedTTL:   s.WebhookCacheAuthorizedTTL,
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,8 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const PostStartHookName = "rbac/bootstrap-roles"
 | 
			
		||||
 | 
			
		||||
type RESTStorageProvider struct {
 | 
			
		||||
	Authorizer authorizer.Authorizer
 | 
			
		||||
}
 | 
			
		||||
@@ -123,7 +125,7 @@ func (p RESTStorageProvider) storage(version schema.GroupVersion, apiResourceCon
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p RESTStorageProvider) PostStartHook() (string, genericapiserver.PostStartHookFunc, error) {
 | 
			
		||||
	return "rbac/bootstrap-roles", PostStartHook, nil
 | 
			
		||||
	return PostStartHookName, PostStartHook, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PostStartHook(hookContext genericapiserver.PostStartHookContext) error {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user