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
9f906618
Commit
9f906618
authored
Apr 04, 2018
by
Dr. Stefan Schimanski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
apiserver: enforce shared RequestContextMapper in delegation chain
parent
90d3b5a8
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
65 additions
and
81 deletions
+65
-81
server.go
cmd/kube-apiserver/app/server.go
+3
-3
insecure_handler.go
pkg/kubeapiserver/server/insecure_handler.go
+9
-9
master_openapi_test.go
pkg/master/master_openapi_test.go
+1
-1
master_test.go
pkg/master/master_test.go
+1
-2
apiserver.go
...k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go
+1
-1
start.go
...rc/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go
+1
-1
start.go
...extensions-apiserver/test/integration/testserver/start.go
+1
-1
config.go
staging/src/k8s.io/apiserver/pkg/server/config.go
+19
-24
config_test.go
staging/src/k8s.io/apiserver/pkg/server/config_test.go
+1
-4
genericapiserver.go
staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go
+11
-13
genericapiserver_test.go
.../src/k8s.io/apiserver/pkg/server/genericapiserver_test.go
+10
-12
BUILD
staging/src/k8s.io/apiserver/pkg/server/options/BUILD
+0
-1
serving_test.go
...g/src/k8s.io/apiserver/pkg/server/options/serving_test.go
+1
-3
apiserver.go
...ing/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go
+1
-1
start.go
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
+1
-1
apiserver.go
...ng/src/k8s.io/sample-apiserver/pkg/apiserver/apiserver.go
+1
-1
etcd_storage_path_test.go
test/integration/etcd/etcd_storage_path_test.go
+1
-1
apiserver_test.go
test/integration/examples/apiserver_test.go
+1
-1
master_utils.go
test/integration/framework/master_utils.go
+1
-1
No files found.
cmd/kube-apiserver/app/server.go
View file @
9f906618
...
...
@@ -166,7 +166,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan
if
err
!=
nil
{
return
nil
,
err
}
apiExtensionsServer
,
err
:=
createAPIExtensionsServer
(
apiExtensionsConfig
,
genericapiserver
.
EmptyDelegate
)
apiExtensionsServer
,
err
:=
createAPIExtensionsServer
(
apiExtensionsConfig
,
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -180,7 +180,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan
// just start the API server as is because clients don't get built correctly when you do this
if
len
(
os
.
Getenv
(
"KUBE_API_VERSIONS"
))
>
0
{
if
insecureServingOptions
!=
nil
{
insecureHandlerChain
:=
kubeserver
.
BuildInsecureHandlerChain
(
kubeAPIServer
.
GenericAPIServer
.
UnprotectedHandler
(),
kubeAPIServerConfig
.
GenericConfig
)
insecureHandlerChain
:=
kubeserver
.
BuildInsecureHandlerChain
(
kubeAPIServer
.
GenericAPIServer
.
UnprotectedHandler
(),
kubeAPIServerConfig
.
GenericConfig
,
kubeAPIServer
.
GenericAPIServer
.
RequestContextMapper
()
)
if
err
:=
kubeserver
.
NonBlockingRun
(
insecureServingOptions
,
insecureHandlerChain
,
kubeAPIServerConfig
.
GenericConfig
.
RequestTimeout
,
stopCh
);
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -208,7 +208,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan
}
if
insecureServingOptions
!=
nil
{
insecureHandlerChain
:=
kubeserver
.
BuildInsecureHandlerChain
(
aggregatorServer
.
GenericAPIServer
.
UnprotectedHandler
(),
kubeAPIServerConfig
.
GenericConfig
)
insecureHandlerChain
:=
kubeserver
.
BuildInsecureHandlerChain
(
aggregatorServer
.
GenericAPIServer
.
UnprotectedHandler
(),
kubeAPIServerConfig
.
GenericConfig
,
aggregatorServer
.
GenericAPIServer
.
RequestContextMapper
()
)
if
err
:=
kubeserver
.
NonBlockingRun
(
insecureServingOptions
,
insecureHandlerChain
,
kubeAPIServerConfig
.
GenericConfig
.
RequestTimeout
,
stopCh
);
err
!=
nil
{
return
nil
,
err
}
...
...
pkg/kubeapiserver/server/insecure_handler.go
View file @
9f906618
...
...
@@ -38,20 +38,20 @@ import (
// You shouldn't be using this. It makes sig-auth sad.
// InsecureServingInfo *ServingInfo
func
BuildInsecureHandlerChain
(
apiHandler
http
.
Handler
,
c
*
server
.
Config
)
http
.
Handler
{
func
BuildInsecureHandlerChain
(
apiHandler
http
.
Handler
,
c
*
server
.
Config
,
contextMapper
apirequest
.
RequestContextMapper
)
http
.
Handler
{
handler
:=
apiHandler
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
AdvancedAuditing
)
{
handler
=
genericapifilters
.
WithAudit
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
AuditBackend
,
c
.
AuditPolicyChecker
,
c
.
LongRunningFunc
)
handler
=
genericapifilters
.
WithAudit
(
handler
,
contextMapper
,
c
.
AuditBackend
,
c
.
AuditPolicyChecker
,
c
.
LongRunningFunc
)
}
else
{
handler
=
genericapifilters
.
WithLegacyAudit
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
LegacyAuditWriter
)
handler
=
genericapifilters
.
WithLegacyAudit
(
handler
,
contextMapper
,
c
.
LegacyAuditWriter
)
}
handler
=
genericapifilters
.
WithAuthentication
(
handler
,
c
.
RequestC
ontextMapper
,
insecureSuperuser
{},
nil
)
handler
=
genericapifilters
.
WithAuthentication
(
handler
,
contextMapper
,
insecureSuperuser
{},
nil
)
handler
=
genericfilters
.
WithCORS
(
handler
,
c
.
CorsAllowedOriginList
,
nil
,
nil
,
nil
,
"true"
)
handler
=
genericfilters
.
WithTimeoutForNonLongRunningRequests
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
,
c
.
RequestTimeout
)
handler
=
genericfilters
.
WithMaxInFlightLimit
(
handler
,
c
.
MaxRequestsInFlight
,
c
.
MaxMutatingRequestsInFlight
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
)
handler
=
genericfilters
.
WithWaitGroup
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
,
c
.
HandlerChainWaitGroup
)
handler
=
genericapifilters
.
WithRequestInfo
(
handler
,
server
.
NewRequestInfoResolver
(
c
),
c
.
RequestC
ontextMapper
)
handler
=
apirequest
.
WithRequestContext
(
handler
,
c
.
RequestC
ontextMapper
)
handler
=
genericfilters
.
WithTimeoutForNonLongRunningRequests
(
handler
,
contextMapper
,
c
.
LongRunningFunc
,
c
.
RequestTimeout
)
handler
=
genericfilters
.
WithMaxInFlightLimit
(
handler
,
c
.
MaxRequestsInFlight
,
c
.
MaxMutatingRequestsInFlight
,
contextMapper
,
c
.
LongRunningFunc
)
handler
=
genericfilters
.
WithWaitGroup
(
handler
,
contextMapper
,
c
.
LongRunningFunc
,
c
.
HandlerChainWaitGroup
)
handler
=
genericapifilters
.
WithRequestInfo
(
handler
,
server
.
NewRequestInfoResolver
(
c
),
contextMapper
)
handler
=
apirequest
.
WithRequestContext
(
handler
,
contextMapper
)
handler
=
genericfilters
.
WithPanicRecovery
(
handler
)
return
handler
...
...
pkg/master/master_openapi_test.go
View file @
9f906618
...
...
@@ -54,7 +54,7 @@ func TestValidOpenAPISpec(t *testing.T) {
}
config
.
GenericConfig
.
SwaggerConfig
=
genericapiserver
.
DefaultSwaggerConfig
()
master
,
err
:=
config
.
Complete
(
sharedInformers
)
.
New
(
genericapiserver
.
EmptyDelegate
)
master
,
err
:=
config
.
Complete
(
sharedInformers
)
.
New
(
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the master: %v"
,
err
)
}
...
...
pkg/master/master_test.go
View file @
9f906618
...
...
@@ -106,7 +106,6 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, informers.SharedI
config
.
GenericConfig
.
LoopbackClientConfig
=
&
restclient
.
Config
{
APIPath
:
"/api"
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
legacyscheme
.
Codecs
}}
config
.
GenericConfig
.
PublicAddress
=
net
.
ParseIP
(
"192.168.10.4"
)
config
.
GenericConfig
.
LegacyAPIGroupPrefixes
=
sets
.
NewString
(
"/api"
)
config
.
GenericConfig
.
RequestContextMapper
=
genericapirequest
.
NewRequestContextMapper
()
config
.
GenericConfig
.
LoopbackClientConfig
=
&
restclient
.
Config
{
APIPath
:
"/api"
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
legacyscheme
.
Codecs
}}
config
.
ExtraConfig
.
KubeletClientConfig
=
kubeletclient
.
KubeletClientConfig
{
Port
:
10250
}
config
.
ExtraConfig
.
ProxyTransport
=
utilnet
.
SetTransportDefaults
(
&
http
.
Transport
{
...
...
@@ -185,7 +184,7 @@ func TestCertificatesRestStorageStrategies(t *testing.T) {
func
newMaster
(
t
*
testing
.
T
)
(
*
Master
,
*
etcdtesting
.
EtcdTestServer
,
Config
,
*
assert
.
Assertions
)
{
etcdserver
,
config
,
sharedInformers
,
assert
:=
setUp
(
t
)
master
,
err
:=
config
.
Complete
(
sharedInformers
)
.
New
(
genericapiserver
.
EmptyDelegate
)
master
,
err
:=
config
.
Complete
(
sharedInformers
)
.
New
(
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the master: %v"
,
err
)
}
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go
View file @
9f906618
...
...
@@ -197,7 +197,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
return
s
,
nil
}
crdController
:=
NewDiscoveryController
(
s
.
Informers
.
Apiextensions
()
.
InternalVersion
()
.
CustomResourceDefinitions
(),
versionDiscoveryHandler
,
groupDiscoveryHandler
,
c
.
GenericConfig
.
RequestContextMapper
)
crdController
:=
NewDiscoveryController
(
s
.
Informers
.
Apiextensions
()
.
InternalVersion
()
.
CustomResourceDefinitions
(),
versionDiscoveryHandler
,
groupDiscoveryHandler
,
delegationTarget
.
RequestContextMapper
()
)
namingController
:=
status
.
NewNamingConditionController
(
s
.
Informers
.
Apiextensions
()
.
InternalVersion
()
.
CustomResourceDefinitions
(),
crdClient
.
Apiextensions
())
finalizingController
:=
finalizer
.
NewCRDFinalizer
(
s
.
Informers
.
Apiextensions
()
.
InternalVersion
()
.
CustomResourceDefinitions
(),
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go
View file @
9f906618
...
...
@@ -137,7 +137,7 @@ func (o CustomResourceDefinitionsServerOptions) RunCustomResourceDefinitionsServ
return
err
}
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
return
err
}
...
...
staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go
View file @
9f906618
...
...
@@ -90,7 +90,7 @@ func DefaultServerConfig() (*extensionsapiserver.Config, error) {
func
StartServer
(
config
*
extensionsapiserver
.
Config
)
(
chan
struct
{},
*
rest
.
Config
,
error
)
{
stopCh
:=
make
(
chan
struct
{})
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
...
...
staging/src/k8s.io/apiserver/pkg/server/config.go
View file @
9f906618
...
...
@@ -127,7 +127,7 @@ type Config struct {
//===========================================================================
// BuildHandlerChainFunc allows you to build custom handler chains by decorating the apiHandler.
BuildHandlerChainFunc
func
(
apiHandler
http
.
Handler
,
c
*
Config
)
(
secure
http
.
Handler
)
BuildHandlerChainFunc
func
(
apiHandler
http
.
Handler
,
c
*
Config
,
contextMapper
apirequest
.
RequestContextMapper
)
(
secure
http
.
Handler
)
// HandlerChainWaitGroup allows you to wait for all chain handlers exit after the server shutdown.
HandlerChainWaitGroup
*
utilwaitgroup
.
SafeWaitGroup
// DiscoveryAddresses is used to build the IPs pass to discovery. If nil, the ExternalAddress is
...
...
@@ -138,9 +138,6 @@ type Config struct {
// LegacyAPIGroupPrefixes is used to set up URL parsing for authorization and for validating requests
// to InstallLegacyAPIGroup. New API servers don't generally have legacy groups at all.
LegacyAPIGroupPrefixes
sets
.
String
// RequestContextMapper maps requests to contexts. Exported so downstream consumers can provider their own mappers
// TODO confirm that anyone downstream actually uses this and doesn't just need an accessor
RequestContextMapper
apirequest
.
RequestContextMapper
// RequestInfoResolver is used to assign attributes (used by admission and authorization) based on a request URL.
// Use-cases that are like kubelets may need to customize this.
RequestInfoResolver
apirequest
.
RequestInfoResolver
...
...
@@ -253,7 +250,6 @@ func NewConfig(codecs serializer.CodecFactory) *Config {
return
&
Config
{
Serializer
:
codecs
,
ReadWritePort
:
443
,
RequestContextMapper
:
apirequest
.
NewRequestContextMapper
(),
BuildHandlerChainFunc
:
DefaultBuildHandlerChain
,
HandlerChainWaitGroup
:
new
(
utilwaitgroup
.
SafeWaitGroup
),
LegacyAPIGroupPrefixes
:
sets
.
NewString
(
DefaultLegacyAPIPrefix
),
...
...
@@ -447,9 +443,8 @@ func (c *RecommendedConfig) Complete() CompletedConfig {
// New creates a new server which logically combines the handling chain with the passed server.
// name is used to differentiate for logging. The handler chain in particular can be difficult as it starts delgating.
// delegationTarget may not be nil.
func
(
c
completedConfig
)
New
(
name
string
,
delegationTarget
DelegationTarget
)
(
*
GenericAPIServer
,
error
)
{
// The delegationTarget and the config must agree on the RequestContextMapper
if
c
.
Serializer
==
nil
{
return
nil
,
fmt
.
Errorf
(
"Genericapiserver.New() called with config.Serializer == nil"
)
}
...
...
@@ -457,17 +452,17 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G
return
nil
,
fmt
.
Errorf
(
"Genericapiserver.New() called with config.LoopbackClientConfig == nil"
)
}
contextMapper
:=
delegationTarget
.
RequestContextMapper
()
handlerChainBuilder
:=
func
(
handler
http
.
Handler
)
http
.
Handler
{
return
c
.
BuildHandlerChainFunc
(
handler
,
c
.
Config
)
return
c
.
BuildHandlerChainFunc
(
handler
,
c
.
Config
,
contextMapper
)
}
apiServerHandler
:=
NewAPIServerHandler
(
name
,
c
.
RequestC
ontextMapper
,
c
.
Serializer
,
handlerChainBuilder
,
delegationTarget
.
UnprotectedHandler
())
apiServerHandler
:=
NewAPIServerHandler
(
name
,
contextMapper
,
c
.
Serializer
,
handlerChainBuilder
,
delegationTarget
.
UnprotectedHandler
())
s
:=
&
GenericAPIServer
{
discoveryAddresses
:
c
.
DiscoveryAddresses
,
LoopbackClientConfig
:
c
.
LoopbackClientConfig
,
legacyAPIGroupPrefixes
:
c
.
LegacyAPIGroupPrefixes
,
admissionControl
:
c
.
AdmissionControl
,
requestContextMapper
:
c
.
RequestContextMapper
,
Serializer
:
c
.
Serializer
,
AuditBackend
:
c
.
AuditBackend
,
delegationTarget
:
delegationTarget
,
...
...
@@ -492,7 +487,7 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G
healthzChecks
:
c
.
HealthzChecks
,
DiscoveryGroupManager
:
discovery
.
NewRootAPIsHandler
(
c
.
DiscoveryAddresses
,
c
.
Serializer
,
c
.
RequestC
ontextMapper
),
DiscoveryGroupManager
:
discovery
.
NewRootAPIsHandler
(
c
.
DiscoveryAddresses
,
c
.
Serializer
,
contextMapper
),
enableAPIResponseCompression
:
c
.
EnableAPIResponseCompression
,
}
...
...
@@ -547,25 +542,25 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G
return
s
,
nil
}
func
DefaultBuildHandlerChain
(
apiHandler
http
.
Handler
,
c
*
Config
)
http
.
Handler
{
handler
:=
genericapifilters
.
WithAuthorization
(
apiHandler
,
c
.
RequestC
ontextMapper
,
c
.
Authorization
.
Authorizer
,
c
.
Serializer
)
handler
=
genericfilters
.
WithMaxInFlightLimit
(
handler
,
c
.
MaxRequestsInFlight
,
c
.
MaxMutatingRequestsInFlight
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
)
handler
=
genericapifilters
.
WithImpersonation
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
Authorization
.
Authorizer
,
c
.
Serializer
)
func
DefaultBuildHandlerChain
(
apiHandler
http
.
Handler
,
c
*
Config
,
contextMapper
apirequest
.
RequestContextMapper
)
http
.
Handler
{
handler
:=
genericapifilters
.
WithAuthorization
(
apiHandler
,
contextMapper
,
c
.
Authorization
.
Authorizer
,
c
.
Serializer
)
handler
=
genericfilters
.
WithMaxInFlightLimit
(
handler
,
c
.
MaxRequestsInFlight
,
c
.
MaxMutatingRequestsInFlight
,
contextMapper
,
c
.
LongRunningFunc
)
handler
=
genericapifilters
.
WithImpersonation
(
handler
,
contextMapper
,
c
.
Authorization
.
Authorizer
,
c
.
Serializer
)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
AdvancedAuditing
)
{
handler
=
genericapifilters
.
WithAudit
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
AuditBackend
,
c
.
AuditPolicyChecker
,
c
.
LongRunningFunc
)
handler
=
genericapifilters
.
WithAudit
(
handler
,
contextMapper
,
c
.
AuditBackend
,
c
.
AuditPolicyChecker
,
c
.
LongRunningFunc
)
}
else
{
handler
=
genericapifilters
.
WithLegacyAudit
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
LegacyAuditWriter
)
handler
=
genericapifilters
.
WithLegacyAudit
(
handler
,
contextMapper
,
c
.
LegacyAuditWriter
)
}
failedHandler
:=
genericapifilters
.
Unauthorized
(
c
.
RequestC
ontextMapper
,
c
.
Serializer
,
c
.
Authentication
.
SupportsBasicAuth
)
failedHandler
:=
genericapifilters
.
Unauthorized
(
contextMapper
,
c
.
Serializer
,
c
.
Authentication
.
SupportsBasicAuth
)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
AdvancedAuditing
)
{
failedHandler
=
genericapifilters
.
WithFailedAuthenticationAudit
(
failedHandler
,
c
.
RequestC
ontextMapper
,
c
.
AuditBackend
,
c
.
AuditPolicyChecker
)
failedHandler
=
genericapifilters
.
WithFailedAuthenticationAudit
(
failedHandler
,
contextMapper
,
c
.
AuditBackend
,
c
.
AuditPolicyChecker
)
}
handler
=
genericapifilters
.
WithAuthentication
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
Authentication
.
Authenticator
,
failedHandler
)
handler
=
genericapifilters
.
WithAuthentication
(
handler
,
contextMapper
,
c
.
Authentication
.
Authenticator
,
failedHandler
)
handler
=
genericfilters
.
WithCORS
(
handler
,
c
.
CorsAllowedOriginList
,
nil
,
nil
,
nil
,
"true"
)
handler
=
genericfilters
.
WithTimeoutForNonLongRunningRequests
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
,
c
.
RequestTimeout
)
handler
=
genericfilters
.
WithWaitGroup
(
handler
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
,
c
.
HandlerChainWaitGroup
)
handler
=
genericapifilters
.
WithRequestInfo
(
handler
,
c
.
RequestInfoResolver
,
c
.
RequestC
ontextMapper
)
handler
=
apirequest
.
WithRequestContext
(
handler
,
c
.
RequestC
ontextMapper
)
handler
=
genericfilters
.
WithTimeoutForNonLongRunningRequests
(
handler
,
contextMapper
,
c
.
LongRunningFunc
,
c
.
RequestTimeout
)
handler
=
genericfilters
.
WithWaitGroup
(
handler
,
contextMapper
,
c
.
LongRunningFunc
,
c
.
HandlerChainWaitGroup
)
handler
=
genericapifilters
.
WithRequestInfo
(
handler
,
c
.
RequestInfoResolver
,
contextMapper
)
handler
=
apirequest
.
WithRequestContext
(
handler
,
contextMapper
)
handler
=
genericfilters
.
WithPanicRecovery
(
handler
)
return
handler
}
...
...
staging/src/k8s.io/apiserver/pkg/server/config_test.go
View file @
9f906618
...
...
@@ -26,7 +26,6 @@ import (
"testing"
"k8s.io/apimachinery/pkg/util/sets"
genericapirequest
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/server/healthz"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
...
...
@@ -36,7 +35,6 @@ import (
func
TestNewWithDelegate
(
t
*
testing
.
T
)
{
delegateConfig
:=
NewConfig
(
codecs
)
delegateConfig
.
PublicAddress
=
net
.
ParseIP
(
"192.168.10.4"
)
delegateConfig
.
RequestContextMapper
=
genericapirequest
.
NewRequestContextMapper
()
delegateConfig
.
LegacyAPIGroupPrefixes
=
sets
.
NewString
(
"/api"
)
delegateConfig
.
LoopbackClientConfig
=
&
rest
.
Config
{}
delegateConfig
.
SwaggerConfig
=
DefaultSwaggerConfig
()
...
...
@@ -50,7 +48,7 @@ func TestNewWithDelegate(t *testing.T) {
}))
sharedInformers
:=
informers
.
NewSharedInformerFactory
(
clientset
,
delegateConfig
.
LoopbackClientConfig
.
Timeout
)
delegateServer
,
err
:=
delegateConfig
.
Complete
(
sharedInformers
)
.
New
(
"test"
,
EmptyDelegate
)
delegateServer
,
err
:=
delegateConfig
.
Complete
(
sharedInformers
)
.
New
(
"test"
,
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
@@ -67,7 +65,6 @@ func TestNewWithDelegate(t *testing.T) {
wrappingConfig
:=
NewConfig
(
codecs
)
wrappingConfig
.
PublicAddress
=
net
.
ParseIP
(
"192.168.10.4"
)
wrappingConfig
.
RequestContextMapper
=
genericapirequest
.
NewRequestContextMapper
()
wrappingConfig
.
LegacyAPIGroupPrefixes
=
sets
.
NewString
(
"/api"
)
wrappingConfig
.
LoopbackClientConfig
=
&
rest
.
Config
{}
wrappingConfig
.
SwaggerConfig
=
DefaultSwaggerConfig
()
...
...
staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go
View file @
9f906618
...
...
@@ -95,9 +95,7 @@ type GenericAPIServer struct {
// admissionControl is used to build the RESTStorage that backs an API Group.
admissionControl
admission
.
Interface
// requestContextMapper provides a way to get the context for a request. It may be nil.
requestContextMapper
apirequest
.
RequestContextMapper
// SecureServingInfo holds configuration of the TLS server.
SecureServingInfo
*
SecureServingInfo
// ExternalAddress is the address (hostname or IP and port) that should be used in
...
...
@@ -146,7 +144,7 @@ type GenericAPIServer struct {
// if the client requests it via Accept-Encoding
enableAPIResponseCompression
bool
// delegationTarget is the next delegate in the chain
or nil
// delegationTarget is the next delegate in the chain
. This is never nil.
delegationTarget
DelegationTarget
// HandlerChainWaitGroup allows you to wait for all chain handlers finish after the server shutdown.
...
...
@@ -200,14 +198,16 @@ func (s *GenericAPIServer) NextDelegate() DelegationTarget {
return
s
.
delegationTarget
}
var
EmptyDelegate
=
emptyDelegate
{
requestContextMapper
:
apirequest
.
NewRequestContextMapper
(),
}
type
emptyDelegate
struct
{
requestContextMapper
apirequest
.
RequestContextMapper
}
func
NewEmptyDelegate
()
DelegationTarget
{
return
emptyDelegate
{
requestContextMapper
:
apirequest
.
NewRequestContextMapper
(),
}
}
func
(
s
emptyDelegate
)
UnprotectedHandler
()
http
.
Handler
{
return
nil
}
...
...
@@ -230,10 +230,8 @@ func (s emptyDelegate) NextDelegate() DelegationTarget {
return
nil
}
// RequestContextMapper is exposed so that third party resource storage can be build in a different location.
// TODO refactor third party resource storage
func
(
s
*
GenericAPIServer
)
RequestContextMapper
()
apirequest
.
RequestContextMapper
{
return
s
.
requestContextMapper
return
s
.
delegationTarget
.
RequestContextMapper
()
}
// preparedGenericAPIServer is a private wrapper that enforces a call of PrepareRun() before Run can be invoked.
...
...
@@ -366,7 +364,7 @@ func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo
}
// Install the version handler.
// Add a handler at /<apiPrefix> to enumerate the supported api versions.
s
.
Handler
.
GoRestfulContainer
.
Add
(
discovery
.
NewLegacyRootAPIHandler
(
s
.
discoveryAddresses
,
s
.
Serializer
,
apiPrefix
,
apiVersions
,
s
.
requestContextMapper
)
.
WebService
())
s
.
Handler
.
GoRestfulContainer
.
Add
(
discovery
.
NewLegacyRootAPIHandler
(
s
.
discoveryAddresses
,
s
.
Serializer
,
apiPrefix
,
apiVersions
,
s
.
delegationTarget
.
RequestContextMapper
()
)
.
WebService
())
return
nil
}
...
...
@@ -411,7 +409,7 @@ func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error {
}
s
.
DiscoveryGroupManager
.
AddGroup
(
apiGroup
)
s
.
Handler
.
GoRestfulContainer
.
Add
(
discovery
.
NewAPIGroupHandler
(
s
.
Serializer
,
apiGroup
,
s
.
requestContextMapper
)
.
WebService
())
s
.
Handler
.
GoRestfulContainer
.
Add
(
discovery
.
NewAPIGroupHandler
(
s
.
Serializer
,
apiGroup
,
s
.
delegationTarget
.
RequestContextMapper
()
)
.
WebService
())
return
nil
}
...
...
staging/src/k8s.io/apiserver/pkg/server/genericapiserver_test.go
View file @
9f906618
...
...
@@ -84,7 +84,6 @@ func init() {
func
setUp
(
t
*
testing
.
T
)
(
Config
,
*
assert
.
Assertions
)
{
config
:=
NewConfig
(
codecs
)
config
.
PublicAddress
=
net
.
ParseIP
(
"192.168.10.4"
)
config
.
RequestContextMapper
=
apirequest
.
NewRequestContextMapper
()
config
.
LegacyAPIGroupPrefixes
=
sets
.
NewString
(
"/api"
)
config
.
LoopbackClientConfig
=
&
restclient
.
Config
{}
...
...
@@ -111,7 +110,7 @@ func setUp(t *testing.T) (Config, *assert.Assertions) {
func
newMaster
(
t
*
testing
.
T
)
(
*
GenericAPIServer
,
Config
,
*
assert
.
Assertions
)
{
config
,
assert
:=
setUp
(
t
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
EmptyDelegate
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the server: %v"
,
err
)
}
...
...
@@ -126,7 +125,6 @@ func TestNew(t *testing.T) {
// Verify many of the variables match their config counterparts
assert
.
Equal
(
s
.
legacyAPIGroupPrefixes
,
config
.
LegacyAPIGroupPrefixes
)
assert
.
Equal
(
s
.
admissionControl
,
config
.
AdmissionControl
)
assert
.
Equal
(
s
.
RequestContextMapper
(),
config
.
RequestContextMapper
)
// these values get defaulted
assert
.
Equal
(
net
.
JoinHostPort
(
config
.
PublicAddress
.
String
(),
"443"
),
s
.
ExternalAddress
)
...
...
@@ -141,7 +139,7 @@ func TestInstallAPIGroups(t *testing.T) {
config
.
LegacyAPIGroupPrefixes
=
sets
.
NewString
(
"/apiPrefix"
)
config
.
DiscoveryAddresses
=
discovery
.
DefaultAddresses
{
DefaultAddress
:
"ExternalAddress"
}
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
EmptyDelegate
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the server: %v"
,
err
)
}
...
...
@@ -333,7 +331,7 @@ func TestCustomHandlerChain(t *testing.T) {
var
protected
,
called
bool
config
.
BuildHandlerChainFunc
=
func
(
apiHandler
http
.
Handler
,
c
*
Config
)
http
.
Handler
{
config
.
BuildHandlerChainFunc
=
func
(
apiHandler
http
.
Handler
,
c
*
Config
,
contextMapper
apirequest
.
RequestContextMapper
)
http
.
Handler
{
return
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
protected
=
true
apiHandler
.
ServeHTTP
(
w
,
req
)
...
...
@@ -343,7 +341,7 @@ func TestCustomHandlerChain(t *testing.T) {
called
=
true
})
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
EmptyDelegate
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the server: %v"
,
err
)
}
...
...
@@ -397,7 +395,7 @@ func TestNotRestRoutesHaveAuth(t *testing.T) {
kubeVersion
:=
fakeVersion
()
config
.
Version
=
&
kubeVersion
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
EmptyDelegate
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the server: %v"
,
err
)
}
...
...
@@ -509,10 +507,10 @@ func TestGracefulShutdown(t *testing.T) {
wg
:=
sync
.
WaitGroup
{}
wg
.
Add
(
1
)
config
.
BuildHandlerChainFunc
=
func
(
apiHandler
http
.
Handler
,
c
*
Config
)
http
.
Handler
{
handler
:=
genericfilters
.
WithWaitGroup
(
apiHandler
,
c
.
RequestC
ontextMapper
,
c
.
LongRunningFunc
,
c
.
HandlerChainWaitGroup
)
handler
=
genericapifilters
.
WithRequestInfo
(
handler
,
c
.
RequestInfoResolver
,
c
.
RequestC
ontextMapper
)
handler
=
apirequest
.
WithRequestContext
(
handler
,
c
.
RequestC
ontextMapper
)
config
.
BuildHandlerChainFunc
=
func
(
apiHandler
http
.
Handler
,
c
*
Config
,
contextMapper
apirequest
.
RequestContextMapper
)
http
.
Handler
{
handler
:=
genericfilters
.
WithWaitGroup
(
apiHandler
,
contextMapper
,
c
.
LongRunningFunc
,
c
.
HandlerChainWaitGroup
)
handler
=
genericapifilters
.
WithRequestInfo
(
handler
,
c
.
RequestInfoResolver
,
contextMapper
)
handler
=
apirequest
.
WithRequestContext
(
handler
,
contextMapper
)
return
handler
}
...
...
@@ -523,7 +521,7 @@ func TestGracefulShutdown(t *testing.T) {
graceShutdown
=
true
})
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
EmptyDelegate
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Fatalf
(
"Error in bringing up the server: %v"
,
err
)
}
...
...
staging/src/k8s.io/apiserver/pkg/server/options/BUILD
View file @
9f906618
...
...
@@ -89,7 +89,6 @@ go_test(
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/version:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
"//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
"//vendor/k8s.io/client-go/discovery:go_default_library",
...
...
staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go
View file @
9f906618
...
...
@@ -42,7 +42,6 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/version"
genericapirequest
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/server"
.
"k8s.io/apiserver/pkg/server"
utilflag
"k8s.io/apiserver/pkg/util/flag"
...
...
@@ -55,7 +54,6 @@ func setUp(t *testing.T) Config {
codecs
:=
serializer
.
NewCodecFactory
(
scheme
)
config
:=
NewConfig
(
codecs
)
config
.
RequestContextMapper
=
genericapirequest
.
NewRequestContextMapper
()
return
*
config
}
...
...
@@ -497,7 +495,7 @@ NextTest:
return
}
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
server
.
EmptyDelegate
)
s
,
err
:=
config
.
Complete
(
nil
)
.
New
(
"test"
,
server
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
t
.
Errorf
(
"%q - failed creating the server: %v"
,
title
,
err
)
return
...
...
staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go
View file @
9f906618
...
...
@@ -158,7 +158,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
s
:=
&
APIAggregator
{
GenericAPIServer
:
genericServer
,
delegateHandler
:
delegationTarget
.
UnprotectedHandler
(),
contextMapper
:
c
.
GenericConfig
.
RequestContextMapper
,
contextMapper
:
genericServer
.
RequestContextMapper
()
,
proxyClientCert
:
c
.
ExtraConfig
.
ProxyClientCert
,
proxyClientKey
:
c
.
ExtraConfig
.
ProxyClientKey
,
proxyTransport
:
c
.
ExtraConfig
.
ProxyTransport
,
...
...
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
View file @
9f906618
...
...
@@ -144,7 +144,7 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
return
err
}
server
,
err
:=
config
.
Complete
()
.
NewWithDelegate
(
genericapiserver
.
EmptyDelegate
)
server
,
err
:=
config
.
Complete
()
.
NewWithDelegate
(
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
return
err
}
...
...
staging/src/k8s.io/sample-apiserver/pkg/apiserver/apiserver.go
View file @
9f906618
...
...
@@ -101,7 +101,7 @@ func (cfg *Config) Complete() CompletedConfig {
// New returns a new instance of WardleServer from the given config.
func
(
c
completedConfig
)
New
()
(
*
WardleServer
,
error
)
{
genericServer
,
err
:=
c
.
GenericConfig
.
New
(
"sample-apiserver"
,
genericapiserver
.
EmptyDelegate
)
genericServer
,
err
:=
c
.
GenericConfig
.
New
(
"sample-apiserver"
,
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
test/integration/etcd/etcd_storage_path_test.go
View file @
9f906618
...
...
@@ -751,7 +751,7 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
kubeAPIServerConfig
.
ExtraConfig
.
APIResourceConfigSource
=
&
allResourceSource
{}
// force enable all resources
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
genericapiserver
.
EmptyDelegate
,
sharedInformers
,
versionedInformers
)
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
genericapiserver
.
NewEmptyDelegate
()
,
sharedInformers
,
versionedInformers
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
test/integration/examples/apiserver_test.go
View file @
9f906618
...
...
@@ -130,7 +130,7 @@ func TestAggregatedAPIServer(t *testing.T) {
kubeAPIServerClientConfig
.
ServerName
=
""
kubeClientConfigValue
.
Store
(
kubeAPIServerClientConfig
)
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
genericapiserver
.
EmptyDelegate
,
sharedInformers
,
versionedInformers
)
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
genericapiserver
.
NewEmptyDelegate
()
,
sharedInformers
,
versionedInformers
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
test/integration/framework/master_utils.go
View file @
9f906618
...
...
@@ -177,7 +177,7 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
}
sharedInformers
:=
informers
.
NewSharedInformerFactory
(
clientset
,
masterConfig
.
GenericConfig
.
LoopbackClientConfig
.
Timeout
)
m
,
err
=
masterConfig
.
Complete
(
sharedInformers
)
.
New
(
genericapiserver
.
EmptyDelegate
)
m
,
err
=
masterConfig
.
Complete
(
sharedInformers
)
.
New
(
genericapiserver
.
NewEmptyDelegate
()
)
if
err
!=
nil
{
closeFn
()
glog
.
Fatalf
(
"error in bringing up the master: %v"
,
err
)
...
...
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