@@ -43,10 +43,12 @@ 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"
@@ -57,7 +59,9 @@ import (
57
59
noderestriction "k8s.io/kubernetes/plugin/pkg/admission/noderestriction"
58
60
saadmit "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
59
61
storageclassdefaultadmission "k8s.io/kubernetes/plugin/pkg/admission/storageclass/setdefault"
62
+ "k8s.io/kubernetes/plugin/pkg/auth/authorizer/node"
60
63
rbacauthorizer "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac"
64
+ kbootstrappolicy "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy"
61
65
62
66
"github.com/openshift/origin/pkg/auth/authenticator/request/paramtoken"
63
67
authnregistry "github.com/openshift/origin/pkg/auth/oauth/registry"
@@ -228,6 +232,8 @@ func BuildMasterConfig(options configapi.MasterConfig, informers InformerAccess)
228
232
kubeAuthorizer ,
229
233
kubeSubjectLocator ,
230
234
informers .GetInternalKubeInformers ().Rbac ().InternalVersion ().ClusterRoles ().Lister (),
235
+ informers .GetInternalKubeInformers ().Core ().InternalVersion ().Pods (),
236
+ informers .GetInternalKubeInformers ().Core ().InternalVersion ().PersistentVolumes (),
231
237
options .ProjectConfig .ProjectRequestMessage ,
232
238
)
233
239
@@ -780,14 +786,27 @@ func buildKubeAuth(r rbacinformers.Interface) (kauthorizer.Authorizer, rbacregis
780
786
return kubeAuthorizer , ruleResolver , kubeSubjectLocator
781
787
}
782
788
783
- func newAuthorizer (kubeAuthorizer kauthorizer.Authorizer , kubeSubjectLocator rbacauthorizer.SubjectLocator , clusterRoleGetter rbaclisters.ClusterRoleLister , projectRequestDenyMessage string ) (kauthorizer.Authorizer , authorizer.SubjectLocator ) {
789
+ func newAuthorizer (
790
+ kubeAuthorizer kauthorizer.Authorizer ,
791
+ kubeSubjectLocator rbacauthorizer.SubjectLocator ,
792
+ clusterRoleGetter rbaclisters.ClusterRoleLister ,
793
+ podInformer coreinformers.PodInformer ,
794
+ pvInformer coreinformers.PersistentVolumeInformer ,
795
+ projectRequestDenyMessage string ,
796
+ ) (kauthorizer.Authorizer , authorizer.SubjectLocator ) {
784
797
messageMaker := authorizer .NewForbiddenMessageResolver (projectRequestDenyMessage )
785
798
roleBasedAuthorizer := authorizer .NewAuthorizer (kubeAuthorizer , messageMaker )
786
799
subjectLocator := authorizer .NewSubjectLocator (kubeSubjectLocator )
800
+
787
801
scopeLimitedAuthorizer := scope .NewAuthorizer (roleBasedAuthorizer , clusterRoleGetter , messageMaker )
788
802
803
+ graph := node .NewGraph ()
804
+ node .AddGraphEventHandlers (graph , podInformer , pvInformer )
805
+ nodeAuthorizer := node .NewAuthorizer (graph , nodeidentifier .NewDefaultNodeIdentifier (), kbootstrappolicy .NodeRules ())
806
+
789
807
authorizer := authorizerunion .New (
790
808
authorizerfactory .NewPrivilegedGroups (user .SystemPrivilegedGroup ), // authorizes system:masters to do anything, just like upstream
809
+ nodeAuthorizer ,
791
810
scopeLimitedAuthorizer )
792
811
793
812
return authorizer , subjectLocator
0 commit comments