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
05fbc220
Commit
05fbc220
authored
Jan 25, 2018
by
Yang Guo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Split ClientConfigFor()
parent
454276c2
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
69 additions
and
39 deletions
+69
-39
server.go
cmd/kube-apiserver/app/server.go
+23
-17
authentication.go
...ver/pkg/admission/plugin/webhook/config/authentication.go
+30
-16
authentication_test.go
...kg/admission/plugin/webhook/config/authentication_test.go
+1
-1
client.go
...o/apiserver/pkg/admission/plugin/webhook/config/client.go
+3
-3
admission_test.go
...r/pkg/admission/plugin/webhook/mutating/admission_test.go
+6
-1
admission_test.go
...pkg/admission/plugin/webhook/validating/admission_test.go
+6
-1
No files found.
cmd/kube-apiserver/app/server.go
View file @
05fbc220
...
@@ -459,29 +459,35 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
...
@@ -459,29 +459,35 @@ func BuildGenericConfig(s *options.ServerRunOptions, proxyTransport *http.Transp
genericConfig
.
DisabledPostStartHooks
.
Insert
(
rbacrest
.
PostStartHookName
)
genericConfig
.
DisabledPostStartHooks
.
Insert
(
rbacrest
.
PostStartHookName
)
}
}
webhookAuthResolver
:=
func
(
delegate
webhookconfig
.
AuthenticationInfoResolver
)
webhookconfig
.
AuthenticationInfoResolver
{
webhookAuthResolverWrapper
:=
func
(
delegate
webhookconfig
.
AuthenticationInfoResolver
)
webhookconfig
.
AuthenticationInfoResolver
{
return
webhookconfig
.
AuthenticationInfoResolverFunc
(
func
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
{
return
&
webhookconfig
.
AuthenticationInfoResolverDelegator
{
if
server
==
"kubernetes.default.svc"
{
ClientConfigForFunc
:
func
(
server
string
)
(
*
rest
.
Config
,
error
)
{
return
genericConfig
.
LoopbackClientConfig
,
nil
if
server
==
"kubernetes.default.svc"
{
}
return
genericConfig
.
LoopbackClientConfig
,
nil
ret
,
err
:=
delegate
.
ClientConfigFor
(
server
,
directRouting
)
}
if
err
!=
nil
{
return
delegate
.
ClientConfigFor
(
server
)
return
nil
,
err
},
}
ClientConfigForServiceFunc
:
func
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
{
if
!
directRouting
&&
proxyTransport
!=
nil
&&
proxyTransport
.
Dial
!=
nil
{
if
serviceName
==
"kubernetes"
&&
serviceNamespace
==
"default"
{
// Use the SSH tunnels iff the webhook server is not directly
return
genericConfig
.
LoopbackClientConfig
,
nil
// routable from apiserver's network environment.
}
ret
.
Dial
=
proxyTransport
.
Dial
ret
,
err
:=
delegate
.
ClientConfigForService
(
serviceName
,
serviceNamespace
)
}
if
err
!=
nil
{
return
ret
,
err
return
nil
,
err
})
}
if
proxyTransport
!=
nil
&&
proxyTransport
.
Dial
!=
nil
{
ret
.
Dial
=
proxyTransport
.
Dial
}
return
ret
,
err
},
}
}
}
pluginInitializers
,
err
:=
BuildAdmissionPluginInitializers
(
pluginInitializers
,
err
:=
BuildAdmissionPluginInitializers
(
s
,
s
,
client
,
client
,
sharedInformers
,
sharedInformers
,
serviceResolver
,
serviceResolver
,
webhookAuthResolver
,
webhookAuthResolver
Wrapper
,
)
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"failed to create admission plugin initializer: %v"
,
err
)
return
nil
,
nil
,
nil
,
nil
,
nil
,
fmt
.
Errorf
(
"failed to create admission plugin initializer: %v"
,
err
)
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/config/authentication.go
View file @
05fbc220
...
@@ -31,22 +31,28 @@ import (
...
@@ -31,22 +31,28 @@ import (
// rest.Config generated by the resolver.
// rest.Config generated by the resolver.
type
AuthenticationInfoResolverWrapper
func
(
AuthenticationInfoResolver
)
AuthenticationInfoResolver
type
AuthenticationInfoResolverWrapper
func
(
AuthenticationInfoResolver
)
AuthenticationInfoResolver
// AuthenticationInfoResolver builds rest.Config base on the server name and
// AuthenticationInfoResolver builds rest.Config base on the server or service
// the directRouting flag indicating whether the webhook server is routable
// name and service namespace.
// directly from apiserver's network environment.
//
// TODO(yguo0905): Remove the directRouting flag once the SSH tunnels that is
// used for the communication from master to nodes get removed.
type
AuthenticationInfoResolver
interface
{
type
AuthenticationInfoResolver
interface
{
ClientConfigFor
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
// ClientConfigFor builds rest.Config based on the server.
ClientConfigFor
(
server
string
)
(
*
rest
.
Config
,
error
)
// ClientConfigForService builds rest.Config based on the serviceName and
// serviceNamespace.
ClientConfigForService
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
}
}
// AuthenticationInfoResolverFunc implements AuthenticationInfoResolver.
// AuthenticationInfoResolverDelegator implements AuthenticationInfoResolver.
type
AuthenticationInfoResolverFunc
func
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
type
AuthenticationInfoResolverDelegator
struct
{
ClientConfigForFunc
func
(
server
string
)
(
*
rest
.
Config
,
error
)
ClientConfigForServiceFunc
func
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
}
func
(
a
*
AuthenticationInfoResolverDelegator
)
ClientConfigFor
(
server
string
)
(
*
rest
.
Config
,
error
)
{
return
a
.
ClientConfigForFunc
(
server
)
}
//ClientConfigFor implements AuthenticationInfoResolver.
func
(
a
*
AuthenticationInfoResolverDelegator
)
ClientConfigForService
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
{
func
(
a
AuthenticationInfoResolverFunc
)
ClientConfigFor
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
{
return
a
.
ClientConfigForServiceFunc
(
serviceName
,
serviceNamespace
)
return
a
(
server
,
directRouting
)
}
}
type
defaultAuthenticationInfoResolver
struct
{
type
defaultAuthenticationInfoResolver
struct
{
...
@@ -72,14 +78,22 @@ func NewDefaultAuthenticationInfoResolver(kubeconfigFile string) (Authentication
...
@@ -72,14 +78,22 @@ func NewDefaultAuthenticationInfoResolver(kubeconfigFile string) (Authentication
return
&
defaultAuthenticationInfoResolver
{
kubeconfig
:
clientConfig
},
nil
return
&
defaultAuthenticationInfoResolver
{
kubeconfig
:
clientConfig
},
nil
}
}
func
(
c
*
defaultAuthenticationInfoResolver
)
ClientConfigFor
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
{
func
(
c
*
defaultAuthenticationInfoResolver
)
ClientConfigFor
(
server
string
)
(
*
rest
.
Config
,
error
)
{
return
c
.
clientConfig
(
server
)
}
func
(
c
*
defaultAuthenticationInfoResolver
)
ClientConfigForService
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
{
return
c
.
clientConfig
(
serviceName
+
"."
+
serviceNamespace
+
".svc"
)
}
func
(
c
*
defaultAuthenticationInfoResolver
)
clientConfig
(
target
string
)
(
*
rest
.
Config
,
error
)
{
// exact match
// exact match
if
authConfig
,
ok
:=
c
.
kubeconfig
.
AuthInfos
[
server
];
ok
{
if
authConfig
,
ok
:=
c
.
kubeconfig
.
AuthInfos
[
target
];
ok
{
return
restConfigFromKubeconfig
(
authConfig
)
return
restConfigFromKubeconfig
(
authConfig
)
}
}
// star prefixed match
// star prefixed match
serverSteps
:=
strings
.
Split
(
server
,
"."
)
serverSteps
:=
strings
.
Split
(
target
,
"."
)
for
i
:=
1
;
i
<
len
(
serverSteps
);
i
++
{
for
i
:=
1
;
i
<
len
(
serverSteps
);
i
++
{
nickName
:=
"*."
+
strings
.
Join
(
serverSteps
[
i
:
],
"."
)
nickName
:=
"*."
+
strings
.
Join
(
serverSteps
[
i
:
],
"."
)
if
authConfig
,
ok
:=
c
.
kubeconfig
.
AuthInfos
[
nickName
];
ok
{
if
authConfig
,
ok
:=
c
.
kubeconfig
.
AuthInfos
[
nickName
];
ok
{
...
@@ -88,7 +102,7 @@ func (c *defaultAuthenticationInfoResolver) ClientConfigFor(server string, direc
...
@@ -88,7 +102,7 @@ func (c *defaultAuthenticationInfoResolver) ClientConfigFor(server string, direc
}
}
// if we're trying to hit the kube-apiserver and there wasn't an explicit config, use the in-cluster config
// if we're trying to hit the kube-apiserver and there wasn't an explicit config, use the in-cluster config
if
server
==
"kubernetes.default.svc"
{
if
target
==
"kubernetes.default.svc"
{
// if we can find an in-cluster-config use that. If we can't, fall through.
// if we can find an in-cluster-config use that. If we can't, fall through.
inClusterConfig
,
err
:=
rest
.
InClusterConfig
()
inClusterConfig
,
err
:=
rest
.
InClusterConfig
()
if
err
==
nil
{
if
err
==
nil
{
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/config/authentication_test.go
View file @
05fbc220
...
@@ -114,7 +114,7 @@ func TestAuthenticationDetection(t *testing.T) {
...
@@ -114,7 +114,7 @@ func TestAuthenticationDetection(t *testing.T) {
for
_
,
tc
:=
range
tests
{
for
_
,
tc
:=
range
tests
{
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
resolver
:=
defaultAuthenticationInfoResolver
{
kubeconfig
:
tc
.
kubeconfig
}
resolver
:=
defaultAuthenticationInfoResolver
{
kubeconfig
:
tc
.
kubeconfig
}
actual
,
err
:=
resolver
.
ClientConfigFor
(
tc
.
serverName
,
false
)
actual
,
err
:=
resolver
.
ClientConfigFor
(
tc
.
serverName
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/config/client.go
View file @
05fbc220
...
@@ -122,12 +122,12 @@ func (cm *ClientManager) HookClient(h *v1beta1.Webhook) (*rest.RESTClient, error
...
@@ -122,12 +122,12 @@ func (cm *ClientManager) HookClient(h *v1beta1.Webhook) (*rest.RESTClient, error
}
}
if
svc
:=
h
.
ClientConfig
.
Service
;
svc
!=
nil
{
if
svc
:=
h
.
ClientConfig
.
Service
;
svc
!=
nil
{
serverName
:=
svc
.
Name
+
"."
+
svc
.
Namespace
+
".svc"
restConfig
,
err
:=
cm
.
authInfoResolver
.
ClientConfigForService
(
svc
.
Name
,
svc
.
Namespace
)
restConfig
,
err
:=
cm
.
authInfoResolver
.
ClientConfigFor
(
serverName
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
cfg
:=
rest
.
CopyConfig
(
restConfig
)
cfg
:=
rest
.
CopyConfig
(
restConfig
)
serverName
:=
svc
.
Name
+
"."
+
svc
.
Namespace
+
".svc"
host
:=
serverName
+
":443"
host
:=
serverName
+
":443"
cfg
.
Host
=
"https://"
+
host
cfg
.
Host
=
"https://"
+
host
if
svc
.
Path
!=
nil
{
if
svc
.
Path
!=
nil
{
...
@@ -162,7 +162,7 @@ func (cm *ClientManager) HookClient(h *v1beta1.Webhook) (*rest.RESTClient, error
...
@@ -162,7 +162,7 @@ func (cm *ClientManager) HookClient(h *v1beta1.Webhook) (*rest.RESTClient, error
return
nil
,
&
webhookerrors
.
ErrCallingWebhook
{
WebhookName
:
h
.
Name
,
Reason
:
fmt
.
Errorf
(
"Unparsable URL: %v"
,
err
)}
return
nil
,
&
webhookerrors
.
ErrCallingWebhook
{
WebhookName
:
h
.
Name
,
Reason
:
fmt
.
Errorf
(
"Unparsable URL: %v"
,
err
)}
}
}
restConfig
,
err
:=
cm
.
authInfoResolver
.
ClientConfigFor
(
u
.
Host
,
true
)
restConfig
,
err
:=
cm
.
authInfoResolver
.
ClientConfigFor
(
u
.
Host
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/admission_test.go
View file @
05fbc220
...
@@ -631,7 +631,12 @@ type fakeAuthenticationInfoResolver struct {
...
@@ -631,7 +631,12 @@ type fakeAuthenticationInfoResolver struct {
cachedCount
*
int32
cachedCount
*
int32
}
}
func
(
c
*
fakeAuthenticationInfoResolver
)
ClientConfigFor
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
{
func
(
c
*
fakeAuthenticationInfoResolver
)
ClientConfigFor
(
server
string
)
(
*
rest
.
Config
,
error
)
{
atomic
.
AddInt32
(
c
.
cachedCount
,
1
)
return
c
.
restConfig
,
nil
}
func
(
c
*
fakeAuthenticationInfoResolver
)
ClientConfigForService
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
{
atomic
.
AddInt32
(
c
.
cachedCount
,
1
)
atomic
.
AddInt32
(
c
.
cachedCount
,
1
)
return
c
.
restConfig
,
nil
return
c
.
restConfig
,
nil
}
}
...
...
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/admission_test.go
View file @
05fbc220
...
@@ -656,7 +656,12 @@ type fakeAuthenticationInfoResolver struct {
...
@@ -656,7 +656,12 @@ type fakeAuthenticationInfoResolver struct {
cachedCount
*
int32
cachedCount
*
int32
}
}
func
(
c
*
fakeAuthenticationInfoResolver
)
ClientConfigFor
(
server
string
,
directRouting
bool
)
(
*
rest
.
Config
,
error
)
{
func
(
c
*
fakeAuthenticationInfoResolver
)
ClientConfigFor
(
server
string
)
(
*
rest
.
Config
,
error
)
{
atomic
.
AddInt32
(
c
.
cachedCount
,
1
)
return
c
.
restConfig
,
nil
}
func
(
c
*
fakeAuthenticationInfoResolver
)
ClientConfigForService
(
serviceName
,
serviceNamespace
string
)
(
*
rest
.
Config
,
error
)
{
atomic
.
AddInt32
(
c
.
cachedCount
,
1
)
atomic
.
AddInt32
(
c
.
cachedCount
,
1
)
return
c
.
restConfig
,
nil
return
c
.
restConfig
,
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