@@ -43,20 +43,25 @@ import (
43
43
restclient "k8s.io/client-go/rest"
44
44
"k8s.io/client-go/tools/cache"
45
45
kapi "k8s.io/kubernetes/pkg/api"
46
+ "k8s.io/kubernetes/pkg/auth/nodeidentifier"
46
47
kclientsetexternal "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
47
48
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
48
49
kinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions"
49
50
kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
51
+ coreinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/core/internalversion"
50
52
rbacinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/rbac/internalversion"
51
53
rbaclisters "k8s.io/kubernetes/pkg/client/listers/rbac/internalversion"
52
54
sacontroller "k8s.io/kubernetes/pkg/controller/serviceaccount"
53
55
kadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
54
56
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
55
57
rbacregistryvalidation "k8s.io/kubernetes/pkg/registry/rbac/validation"
56
58
"k8s.io/kubernetes/pkg/serviceaccount"
59
+ noderestriction "k8s.io/kubernetes/plugin/pkg/admission/noderestriction"
57
60
saadmit "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
58
61
storageclassdefaultadmission "k8s.io/kubernetes/plugin/pkg/admission/storageclass/setdefault"
62
+ "k8s.io/kubernetes/plugin/pkg/auth/authorizer/node"
59
63
rbacauthorizer "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac"
64
+ kbootstrappolicy "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy"
60
65
61
66
"github.com/openshift/origin/pkg/auth/authenticator/request/paramtoken"
62
67
authnregistry "github.com/openshift/origin/pkg/auth/oauth/registry"
@@ -233,6 +238,8 @@ func BuildMasterConfig(options configapi.MasterConfig, informers InformerAccess)
233
238
kubeAuthorizer ,
234
239
kubeSubjectLocator ,
235
240
informers .GetInternalKubeInformers ().Rbac ().InternalVersion ().ClusterRoles ().Lister (),
241
+ informers .GetInternalKubeInformers ().Core ().InternalVersion ().Pods (),
242
+ informers .GetInternalKubeInformers ().Core ().InternalVersion ().PersistentVolumes (),
236
243
options .ProjectConfig .ProjectRequestMessage ,
237
244
)
238
245
@@ -404,6 +411,7 @@ var (
404
411
"PodPreset" ,
405
412
"LimitRanger" ,
406
413
"ServiceAccount" ,
414
+ noderestriction .PluginName ,
407
415
"SecurityContextConstraint" ,
408
416
storageclassdefaultadmission .PluginName ,
409
417
"AlwaysPullImages" ,
@@ -415,7 +423,6 @@ var (
415
423
"DefaultTolerationSeconds" ,
416
424
"Initializers" ,
417
425
"GenericAdmissionWebhook" ,
418
- "NodeRestriction" ,
419
426
"PodTolerationRestriction" ,
420
427
// NOTE: ResourceQuota and ClusterResourceQuota must be the last 2 plugins.
421
428
// DO NOT ADD ANY PLUGINS AFTER THIS LINE!
@@ -448,6 +455,7 @@ var (
448
455
"PodPreset" ,
449
456
"LimitRanger" ,
450
457
"ServiceAccount" ,
458
+ noderestriction .PluginName ,
451
459
"SecurityContextConstraint" ,
452
460
storageclassdefaultadmission .PluginName ,
453
461
"AlwaysPullImages" ,
@@ -459,7 +467,6 @@ var (
459
467
"DefaultTolerationSeconds" ,
460
468
"Initializers" ,
461
469
"GenericAdmissionWebhook" ,
462
- "NodeRestriction" ,
463
470
"PodTolerationRestriction" ,
464
471
// NOTE: ResourceQuota and ClusterResourceQuota must be the last 2 plugins.
465
472
// DO NOT ADD ANY PLUGINS AFTER THIS LINE!
@@ -786,14 +793,27 @@ func buildKubeAuth(r rbacinformers.Interface) (kauthorizer.Authorizer, rbacregis
786
793
return kubeAuthorizer , ruleResolver , kubeSubjectLocator
787
794
}
788
795
789
- func newAuthorizer (kubeAuthorizer kauthorizer.Authorizer , kubeSubjectLocator rbacauthorizer.SubjectLocator , clusterRoleGetter rbaclisters.ClusterRoleLister , projectRequestDenyMessage string ) (kauthorizer.Authorizer , authorizer.SubjectLocator ) {
796
+ func newAuthorizer (
797
+ kubeAuthorizer kauthorizer.Authorizer ,
798
+ kubeSubjectLocator rbacauthorizer.SubjectLocator ,
799
+ clusterRoleGetter rbaclisters.ClusterRoleLister ,
800
+ podInformer coreinformers.PodInformer ,
801
+ pvInformer coreinformers.PersistentVolumeInformer ,
802
+ projectRequestDenyMessage string ,
803
+ ) (kauthorizer.Authorizer , authorizer.SubjectLocator ) {
790
804
messageMaker := authorizer .NewForbiddenMessageResolver (projectRequestDenyMessage )
791
805
roleBasedAuthorizer := authorizer .NewAuthorizer (kubeAuthorizer , messageMaker )
792
806
subjectLocator := authorizer .NewSubjectLocator (kubeSubjectLocator )
807
+
793
808
scopeLimitedAuthorizer := scope .NewAuthorizer (roleBasedAuthorizer , clusterRoleGetter , messageMaker )
794
809
810
+ graph := node .NewGraph ()
811
+ node .AddGraphEventHandlers (graph , podInformer , pvInformer )
812
+ nodeAuthorizer := node .NewAuthorizer (graph , nodeidentifier .NewDefaultNodeIdentifier (), kbootstrappolicy .NodeRules ())
813
+
795
814
authorizer := authorizerunion .New (
796
815
authorizerfactory .NewPrivilegedGroups (user .SystemPrivilegedGroup ), // authorizes system:masters to do anything, just like upstream
816
+ nodeAuthorizer ,
797
817
scopeLimitedAuthorizer )
798
818
799
819
return authorizer , subjectLocator
0 commit comments