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
e8f77b36
Commit
e8f77b36
authored
Sep 17, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #14067 from deads2k/add-sa-token-resolver
Auto commit by PR queue bot
parents
81d3bd9a
32a495ac
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
35 deletions
+57
-35
tokens_controller.go
pkg/controller/serviceaccount/tokens_controller.go
+10
-22
util.go
pkg/controller/serviceaccount/util.go
+43
-0
admission.go
plugin/pkg/admission/serviceaccount/admission.go
+4
-13
No files found.
pkg/controller/serviceaccount/tokens_controller.go
View file @
e8f77b36
...
...
@@ -417,7 +417,7 @@ func (e *TokensController) removeSecretReferenceIfNeeded(serviceAccount *api.Ser
// getServiceAccount returns the ServiceAccount referenced by the given secret. If the secret is not
// of type ServiceAccountToken, or if the referenced ServiceAccount does not exist, nil is returned
func
(
e
*
TokensController
)
getServiceAccount
(
secret
*
api
.
Secret
,
fetchOnCacheMiss
bool
)
(
*
api
.
ServiceAccount
,
error
)
{
name
,
uid
:=
serviceAccountNameAndUID
(
secret
)
name
,
_
:=
serviceAccountNameAndUID
(
secret
)
if
len
(
name
)
==
0
{
return
nil
,
nil
}
...
...
@@ -430,15 +430,10 @@ func (e *TokensController) getServiceAccount(secret *api.Secret, fetchOnCacheMis
for
_
,
obj
:=
range
namespaceAccounts
{
serviceAccount
:=
obj
.
(
*
api
.
ServiceAccount
)
if
name
!=
serviceAccount
.
Name
{
// Name must match
continue
}
if
len
(
uid
)
>
0
&&
uid
!=
string
(
serviceAccount
.
UID
)
{
// If UID is specified, it must match
continue
if
IsServiceAccountToken
(
secret
,
serviceAccount
)
{
return
serviceAccount
,
nil
}
return
serviceAccount
,
nil
}
if
fetchOnCacheMiss
{
...
...
@@ -449,11 +444,10 @@ func (e *TokensController) getServiceAccount(secret *api.Secret, fetchOnCacheMis
if
err
!=
nil
{
return
nil
,
err
}
if
len
(
uid
)
>
0
&&
uid
!=
string
(
serviceAccount
.
UID
)
{
// If UID is specified, it must match
return
nil
,
nil
if
IsServiceAccountToken
(
secret
,
serviceAccount
)
{
return
serviceAccount
,
nil
}
return
serviceAccount
,
nil
}
return
nil
,
nil
...
...
@@ -471,16 +465,10 @@ func (e *TokensController) listTokenSecrets(serviceAccount *api.ServiceAccount)
items
:=
[]
*
api
.
Secret
{}
for
_
,
obj
:=
range
namespaceSecrets
{
secret
:=
obj
.
(
*
api
.
Secret
)
name
,
uid
:=
serviceAccountNameAndUID
(
secret
)
if
name
!=
serviceAccount
.
Name
{
// Name must match
continue
}
if
len
(
uid
)
>
0
&&
uid
!=
string
(
serviceAccount
.
UID
)
{
// If UID is specified, it must match
continue
if
IsServiceAccountToken
(
secret
,
serviceAccount
)
{
items
=
append
(
items
,
secret
)
}
items
=
append
(
items
,
secret
)
}
return
items
,
nil
}
...
...
pkg/controller/serviceaccount/util.go
View file @
e8f77b36
...
...
@@ -20,8 +20,12 @@ import (
"fmt"
"strings"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/validation"
"k8s.io/kubernetes/pkg/auth/user"
client
"k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/labels"
)
const
(
...
...
@@ -81,3 +85,42 @@ func UserInfo(namespace, name, uid string) user.Info {
Groups
:
MakeGroupNames
(
namespace
,
name
),
}
}
// GetServiceAccountTokens returns all ServiceAccountToken secrets for the given ServiceAccount
func
GetServiceAccountTokens
(
secretsNamespacer
client
.
SecretsNamespacer
,
sa
*
api
.
ServiceAccount
)
([]
*
api
.
Secret
,
error
)
{
tokenSelector
:=
fields
.
SelectorFromSet
(
map
[
string
]
string
{
client
.
SecretType
:
string
(
api
.
SecretTypeServiceAccountToken
)})
secrets
,
err
:=
secretsNamespacer
.
Secrets
(
sa
.
Namespace
)
.
List
(
labels
.
Everything
(),
tokenSelector
)
if
err
!=
nil
{
return
nil
,
err
}
tokenSecrets
:=
[]
*
api
.
Secret
{}
for
i
:=
range
secrets
.
Items
{
secret
:=
&
secrets
.
Items
[
i
]
if
IsServiceAccountToken
(
secret
,
sa
)
{
tokenSecrets
=
append
(
tokenSecrets
,
secret
)
}
}
return
tokenSecrets
,
nil
}
// IsServiceAccountToken returns true if the secret is a valid api token for the service account
func
IsServiceAccountToken
(
secret
*
api
.
Secret
,
sa
*
api
.
ServiceAccount
)
bool
{
if
secret
.
Type
!=
api
.
SecretTypeServiceAccountToken
{
return
false
}
name
:=
secret
.
Annotations
[
api
.
ServiceAccountNameKey
]
uid
:=
secret
.
Annotations
[
api
.
ServiceAccountUIDKey
]
if
name
!=
sa
.
Name
{
// Name must match
return
false
}
if
len
(
uid
)
>
0
&&
uid
!=
string
(
sa
.
UID
)
{
// If UID is specified, it must match
return
false
}
return
true
}
plugin/pkg/admission/serviceaccount/admission.go
View file @
e8f77b36
...
...
@@ -27,6 +27,7 @@ import (
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/client/cache"
client
"k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/controller/serviceaccount"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/kubelet"
"k8s.io/kubernetes/pkg/labels"
...
...
@@ -273,20 +274,10 @@ func (s *serviceAccount) getServiceAccountTokens(serviceAccount *api.ServiceAcco
tokens
:=
[]
*
api
.
Secret
{}
for
_
,
obj
:=
range
index
{
token
:=
obj
.
(
*
api
.
Secret
)
if
token
.
Type
!=
api
.
SecretTypeServiceAccountToken
{
continue
}
name
:=
token
.
Annotations
[
api
.
ServiceAccountNameKey
]
uid
:=
token
.
Annotations
[
api
.
ServiceAccountUIDKey
]
if
name
!=
serviceAccount
.
Name
{
// Name must match
continue
}
if
len
(
uid
)
>
0
&&
uid
!=
string
(
serviceAccount
.
UID
)
{
// If UID is set, it must match
continue
if
serviceaccount
.
IsServiceAccountToken
(
token
,
serviceAccount
)
{
tokens
=
append
(
tokens
,
token
)
}
tokens
=
append
(
tokens
,
token
)
}
return
tokens
,
nil
}
...
...
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