Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
ba09fade
Unverified
Commit
ba09fade
authored
Jan 16, 2018
by
Jordan Liggitt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Plumb versioned informers to authz config
parent
d3428a57
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
29 additions
and
15 deletions
+29
-15
server.go
cmd/kube-apiserver/app/server.go
+3
-3
BUILD
pkg/kubeapiserver/authorizer/BUILD
+1
-0
config.go
pkg/kubeapiserver/authorizer/config.go
+4
-1
BUILD
pkg/kubeapiserver/options/BUILD
+1
-0
authorization.go
pkg/kubeapiserver/options/authorization.go
+3
-1
BUILD
test/integration/auth/BUILD
+2
-0
node_test.go
test/integration/auth/node_test.go
+10
-7
rbac_test.go
test/integration/auth/rbac_test.go
+5
-3
No files found.
cmd/kube-apiserver/app/server.go
View file @
ba09fade
...
@@ -443,7 +443,7 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
...
@@ -443,7 +443,7 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"invalid authentication config: %v"
,
err
)
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"invalid authentication config: %v"
,
err
)
}
}
genericConfig
.
Authorizer
,
genericConfig
.
RuleResolver
,
err
=
BuildAuthorizer
(
s
,
sharedInformers
)
genericConfig
.
Authorizer
,
genericConfig
.
RuleResolver
,
err
=
BuildAuthorizer
(
s
,
sharedInformers
,
versionedInformers
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"invalid authorization config: %v"
,
err
)
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"invalid authorization config: %v"
,
err
)
}
}
...
@@ -546,8 +546,8 @@ func BuildAuthenticator(s *options.ServerRunOptions, storageFactory serverstorag
...
@@ -546,8 +546,8 @@ func BuildAuthenticator(s *options.ServerRunOptions, storageFactory serverstorag
}
}
// BuildAuthorizer constructs the authorizer
// BuildAuthorizer constructs the authorizer
func
BuildAuthorizer
(
s
*
options
.
ServerRunOptions
,
sharedInformers
informers
.
SharedInformerFactory
)
(
authorizer
.
Authorizer
,
authorizer
.
RuleResolver
,
error
)
{
func
BuildAuthorizer
(
s
*
options
.
ServerRunOptions
,
sharedInformers
informers
.
SharedInformerFactory
,
versionedInformers
clientgoinformers
.
SharedInformerFactory
)
(
authorizer
.
Authorizer
,
authorizer
.
RuleResolver
,
error
)
{
authorizationConfig
:=
s
.
Authorization
.
ToAuthorizationConfig
(
sharedInformers
)
authorizationConfig
:=
s
.
Authorization
.
ToAuthorizationConfig
(
sharedInformers
,
versionedInformers
)
return
authorizationConfig
.
New
()
return
authorizationConfig
.
New
()
}
}
...
...
pkg/kubeapiserver/authorizer/BUILD
View file @
ba09fade
...
@@ -33,6 +33,7 @@ go_library(
...
@@ -33,6 +33,7 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/authorization/authorizerfactory:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authorization/authorizerfactory:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authorization/union:go_default_library",
"//vendor/k8s.io/apiserver/pkg/authorization/union:go_default_library",
"//vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook:go_default_library",
"//vendor/k8s.io/apiserver/plugin/pkg/authorizer/webhook:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
],
],
)
)
...
...
pkg/kubeapiserver/authorizer/config.go
View file @
ba09fade
...
@@ -25,6 +25,7 @@ import (
...
@@ -25,6 +25,7 @@ import (
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
"k8s.io/apiserver/pkg/authorization/union"
"k8s.io/apiserver/pkg/authorization/union"
"k8s.io/apiserver/plugin/pkg/authorizer/webhook"
"k8s.io/apiserver/plugin/pkg/authorizer/webhook"
versionedinformers
"k8s.io/client-go/informers"
"k8s.io/kubernetes/pkg/auth/authorizer/abac"
"k8s.io/kubernetes/pkg/auth/authorizer/abac"
"k8s.io/kubernetes/pkg/auth/nodeidentifier"
"k8s.io/kubernetes/pkg/auth/nodeidentifier"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
...
@@ -51,7 +52,8 @@ type AuthorizationConfig struct {
...
@@ -51,7 +52,8 @@ type AuthorizationConfig struct {
// TTL for caching of unauthorized responses from the webhook server.
// TTL for caching of unauthorized responses from the webhook server.
WebhookCacheUnauthorizedTTL
time
.
Duration
WebhookCacheUnauthorizedTTL
time
.
Duration
InformerFactory
informers
.
SharedInformerFactory
InformerFactory
informers
.
SharedInformerFactory
VersionedInformerFactory
versionedinformers
.
SharedInformerFactory
}
}
// New returns the right sort of union of multiple authorizer.Authorizer objects
// New returns the right sort of union of multiple authorizer.Authorizer objects
...
@@ -71,6 +73,7 @@ func (config AuthorizationConfig) New() (authorizer.Authorizer, authorizer.RuleR
...
@@ -71,6 +73,7 @@ func (config AuthorizationConfig) New() (authorizer.Authorizer, authorizer.RuleR
if
authorizerMap
[
authorizationMode
]
{
if
authorizerMap
[
authorizationMode
]
{
return
nil
,
nil
,
fmt
.
Errorf
(
"Authorization mode %s specified more than once"
,
authorizationMode
)
return
nil
,
nil
,
fmt
.
Errorf
(
"Authorization mode %s specified more than once"
,
authorizationMode
)
}
}
// Keep cases in sync with constant list above.
// Keep cases in sync with constant list above.
switch
authorizationMode
{
switch
authorizationMode
{
case
modes
.
ModeNode
:
case
modes
.
ModeNode
:
...
...
pkg/kubeapiserver/options/BUILD
View file @
ba09fade
...
@@ -33,6 +33,7 @@ go_library(
...
@@ -33,6 +33,7 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/options:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/options:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
],
],
)
)
...
...
pkg/kubeapiserver/options/authorization.go
View file @
ba09fade
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
"github.com/spf13/pflag"
"github.com/spf13/pflag"
versionedinformers
"k8s.io/client-go/informers"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer"
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer"
authzmodes
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
authzmodes
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
...
@@ -83,7 +84,7 @@ func (s *BuiltInAuthorizationOptions) Modes() []string {
...
@@ -83,7 +84,7 @@ func (s *BuiltInAuthorizationOptions) Modes() []string {
return
modes
return
modes
}
}
func
(
s
*
BuiltInAuthorizationOptions
)
ToAuthorizationConfig
(
informerFactory
informers
.
SharedInformerFactory
)
authorizer
.
AuthorizationConfig
{
func
(
s
*
BuiltInAuthorizationOptions
)
ToAuthorizationConfig
(
informerFactory
informers
.
SharedInformerFactory
,
versionedInformerFactory
versionedinformers
.
SharedInformerFactory
)
authorizer
.
AuthorizationConfig
{
return
authorizer
.
AuthorizationConfig
{
return
authorizer
.
AuthorizationConfig
{
AuthorizationModes
:
s
.
Modes
(),
AuthorizationModes
:
s
.
Modes
(),
PolicyFile
:
s
.
PolicyFile
,
PolicyFile
:
s
.
PolicyFile
,
...
@@ -91,5 +92,6 @@ func (s *BuiltInAuthorizationOptions) ToAuthorizationConfig(informerFactory info
...
@@ -91,5 +92,6 @@ func (s *BuiltInAuthorizationOptions) ToAuthorizationConfig(informerFactory info
WebhookCacheAuthorizedTTL
:
s
.
WebhookCacheAuthorizedTTL
,
WebhookCacheAuthorizedTTL
:
s
.
WebhookCacheAuthorizedTTL
,
WebhookCacheUnauthorizedTTL
:
s
.
WebhookCacheUnauthorizedTTL
,
WebhookCacheUnauthorizedTTL
:
s
.
WebhookCacheUnauthorizedTTL
,
InformerFactory
:
informerFactory
,
InformerFactory
:
informerFactory
,
VersionedInformerFactory
:
versionedInformerFactory
,
}
}
}
}
test/integration/auth/BUILD
View file @
ba09fade
...
@@ -73,6 +73,8 @@ go_test(
...
@@ -73,6 +73,8 @@ go_test(
"//vendor/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/tokentest:go_default_library",
"//vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/tokentest:go_default_library",
"//vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook:go_default_library",
"//vendor/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
"//vendor/k8s.io/client-go/tools/clientcmd/api/v1:go_default_library",
"//vendor/k8s.io/client-go/tools/clientcmd/api/v1:go_default_library",
"//vendor/k8s.io/client-go/transport:go_default_library",
"//vendor/k8s.io/client-go/transport:go_default_library",
...
...
test/integration/auth/node_test.go
View file @
ba09fade
...
@@ -33,6 +33,7 @@ import (
...
@@ -33,6 +33,7 @@ import (
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/authentication/user"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
versionedinformers
"k8s.io/client-go/informers"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
...
@@ -71,13 +72,15 @@ func TestNodeAuthorizer(t *testing.T) {
...
@@ -71,13 +72,15 @@ func TestNodeAuthorizer(t *testing.T) {
// Build client config, clientset, and informers
// Build client config, clientset, and informers
clientConfig
:=
&
restclient
.
Config
{
Host
:
apiServer
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
legacyscheme
.
Codecs
}}
clientConfig
:=
&
restclient
.
Config
{
Host
:
apiServer
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
legacyscheme
.
Codecs
}}
superuserClient
:=
clientsetForToken
(
tokenMaster
,
clientConfig
)
superuserClient
,
superuserClientExternal
:=
clientsetForToken
(
tokenMaster
,
clientConfig
)
informerFactory
:=
informers
.
NewSharedInformerFactory
(
superuserClient
,
time
.
Minute
)
informerFactory
:=
informers
.
NewSharedInformerFactory
(
superuserClient
,
time
.
Minute
)
versionedInformerFactory
:=
versionedinformers
.
NewSharedInformerFactory
(
superuserClientExternal
,
time
.
Minute
)
// Set up Node+RBAC authorizer
// Set up Node+RBAC authorizer
authorizerConfig
:=
&
authorizer
.
AuthorizationConfig
{
authorizerConfig
:=
&
authorizer
.
AuthorizationConfig
{
AuthorizationModes
:
[]
string
{
"Node"
,
"RBAC"
},
AuthorizationModes
:
[]
string
{
"Node"
,
"RBAC"
},
InformerFactory
:
informerFactory
,
InformerFactory
:
informerFactory
,
VersionedInformerFactory
:
versionedInformerFactory
,
}
}
nodeRBACAuthorizer
,
_
,
err
:=
authorizerConfig
.
New
()
nodeRBACAuthorizer
,
_
,
err
:=
authorizerConfig
.
New
()
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -94,7 +97,6 @@ func TestNodeAuthorizer(t *testing.T) {
...
@@ -94,7 +97,6 @@ func TestNodeAuthorizer(t *testing.T) {
// Start the server
// Start the server
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
authenticator
masterConfig
.
GenericConfig
.
Authenticator
=
authenticator
masterConfig
.
GenericConfig
.
Authorizer
=
nodeRBACAuthorizer
masterConfig
.
GenericConfig
.
Authorizer
=
nodeRBACAuthorizer
masterConfig
.
GenericConfig
.
AdmissionControl
=
nodeRestrictionAdmission
masterConfig
.
GenericConfig
.
AdmissionControl
=
nodeRestrictionAdmission
_
,
_
,
closeFn
:=
framework
.
RunAMasterUsingServer
(
masterConfig
,
apiServer
,
h
)
_
,
_
,
closeFn
:=
framework
.
RunAMasterUsingServer
(
masterConfig
,
apiServer
,
h
)
...
@@ -104,6 +106,7 @@ func TestNodeAuthorizer(t *testing.T) {
...
@@ -104,6 +106,7 @@ func TestNodeAuthorizer(t *testing.T) {
stopCh
:=
make
(
chan
struct
{})
stopCh
:=
make
(
chan
struct
{})
defer
close
(
stopCh
)
defer
close
(
stopCh
)
informerFactory
.
Start
(
stopCh
)
informerFactory
.
Start
(
stopCh
)
versionedInformerFactory
.
Start
(
stopCh
)
// Wait for a healthy server
// Wait for a healthy server
for
{
for
{
...
@@ -303,9 +306,9 @@ func TestNodeAuthorizer(t *testing.T) {
...
@@ -303,9 +306,9 @@ func TestNodeAuthorizer(t *testing.T) {
}
}
}
}
nodeanonClient
:=
clientsetForToken
(
tokenNodeUnknown
,
clientConfig
)
nodeanonClient
,
_
:=
clientsetForToken
(
tokenNodeUnknown
,
clientConfig
)
node1Client
:=
clientsetForToken
(
tokenNode1
,
clientConfig
)
node1Client
,
_
:=
clientsetForToken
(
tokenNode1
,
clientConfig
)
node2Client
:=
clientsetForToken
(
tokenNode2
,
clientConfig
)
node2Client
,
_
:=
clientsetForToken
(
tokenNode2
,
clientConfig
)
// all node requests from node1 and unknown node fail
// all node requests from node1 and unknown node fail
expectForbidden
(
t
,
getSecret
(
nodeanonClient
))
expectForbidden
(
t
,
getSecret
(
nodeanonClient
))
...
...
test/integration/auth/rbac_test.go
View file @
ba09fade
...
@@ -36,6 +36,7 @@ import (
...
@@ -36,6 +36,7 @@ import (
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/registry/generic"
externalclientset
"k8s.io/client-go/kubernetes"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/transport"
"k8s.io/client-go/transport"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
...
@@ -65,10 +66,10 @@ func clientForToken(user string) *http.Client {
...
@@ -65,10 +66,10 @@ func clientForToken(user string) *http.Client {
}
}
}
}
func
clientsetForToken
(
user
string
,
config
*
restclient
.
Config
)
clientset
.
Interface
{
func
clientsetForToken
(
user
string
,
config
*
restclient
.
Config
)
(
clientset
.
Interface
,
externalclientset
.
Interface
)
{
configCopy
:=
*
config
configCopy
:=
*
config
configCopy
.
BearerToken
=
user
configCopy
.
BearerToken
=
user
return
clientset
.
NewForConfigOrDie
(
&
configCopy
)
return
clientset
.
NewForConfigOrDie
(
&
configCopy
)
,
externalclientset
.
NewForConfigOrDie
(
&
configCopy
)
}
}
type
testRESTOptionsGetter
struct
{
type
testRESTOptionsGetter
struct
{
...
@@ -431,7 +432,8 @@ func TestRBAC(t *testing.T) {
...
@@ -431,7 +432,8 @@ func TestRBAC(t *testing.T) {
clientConfig
:=
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
legacyscheme
.
Codecs
}}
clientConfig
:=
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
legacyscheme
.
Codecs
}}
// Bootstrap the API Server with the test case's initial roles.
// Bootstrap the API Server with the test case's initial roles.
if
err
:=
tc
.
bootstrapRoles
.
bootstrap
(
clientsetForToken
(
superUser
,
clientConfig
));
err
!=
nil
{
superuserClient
,
_
:=
clientsetForToken
(
superUser
,
clientConfig
)
if
err
:=
tc
.
bootstrapRoles
.
bootstrap
(
superuserClient
);
err
!=
nil
{
t
.
Errorf
(
"case %d: failed to apply initial roles: %v"
,
i
,
err
)
t
.
Errorf
(
"case %d: failed to apply initial roles: %v"
,
i
,
err
)
continue
continue
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment