mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-31 07:20:13 +00:00
Decouple NewRequestInfoResolver from GenericApiServer instance
This commit is contained in:
parent
10cbaf7ce0
commit
6c75e922f3
@ -37,6 +37,7 @@ func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoResolver
|
|||||||
info, err := resolver.GetRequestInfo(req)
|
info, err := resolver.GetRequestInfo(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
internalError(w, req, fmt.Errorf("failed to create RequestInfo: %v", err))
|
internalError(w, req, fmt.Errorf("failed to create RequestInfo: %v", err))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
requestContextMapper.Update(req, request.WithRequestInfo(ctx, info))
|
requestContextMapper.Update(req, request.WithRequestInfo(ctx, info))
|
||||||
|
@ -63,6 +63,7 @@ func (r *ProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
ctx, ok := r.mapper.Get(req)
|
ctx, ok := r.mapper.Get(req)
|
||||||
if !ok {
|
if !ok {
|
||||||
internalError(w, req, errors.New("Error getting request context"))
|
internalError(w, req, errors.New("Error getting request context"))
|
||||||
|
httpCode = http.StatusInternalServerError
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/emicklei/go-restful"
|
"github.com/emicklei/go-restful"
|
||||||
@ -37,6 +38,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apiserver"
|
"k8s.io/kubernetes/pkg/apiserver"
|
||||||
apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
|
apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
|
||||||
|
"k8s.io/kubernetes/pkg/apiserver/request"
|
||||||
"k8s.io/kubernetes/pkg/auth/authenticator"
|
"k8s.io/kubernetes/pkg/auth/authenticator"
|
||||||
"k8s.io/kubernetes/pkg/auth/authorizer"
|
"k8s.io/kubernetes/pkg/auth/authorizer"
|
||||||
authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
|
authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
|
||||||
@ -49,6 +51,7 @@ import (
|
|||||||
ipallocator "k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
|
ipallocator "k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
utilnet "k8s.io/kubernetes/pkg/util/net"
|
utilnet "k8s.io/kubernetes/pkg/util/net"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config is a structure used to configure a GenericAPIServer.
|
// Config is a structure used to configure a GenericAPIServer.
|
||||||
@ -355,7 +358,7 @@ func (s *GenericAPIServer) buildHandlerChains(c *Config, handler http.Handler) (
|
|||||||
// insecure filters
|
// insecure filters
|
||||||
insecure = handler
|
insecure = handler
|
||||||
insecure = genericfilters.WithPanicRecovery(insecure, c.RequestContextMapper)
|
insecure = genericfilters.WithPanicRecovery(insecure, c.RequestContextMapper)
|
||||||
insecure = apiserverfilters.WithRequestInfo(insecure, s.NewRequestInfoResolver(), c.RequestContextMapper)
|
insecure = apiserverfilters.WithRequestInfo(insecure, NewRequestInfoResolver(c), c.RequestContextMapper)
|
||||||
insecure = api.WithRequestContext(insecure, c.RequestContextMapper)
|
insecure = api.WithRequestContext(insecure, c.RequestContextMapper)
|
||||||
insecure = genericfilters.WithTimeoutForNonLongRunningRequests(insecure, c.LongRunningFunc)
|
insecure = genericfilters.WithTimeoutForNonLongRunningRequests(insecure, c.LongRunningFunc)
|
||||||
|
|
||||||
@ -367,7 +370,7 @@ func (s *GenericAPIServer) buildHandlerChains(c *Config, handler http.Handler) (
|
|||||||
secure = apiserverfilters.WithAudit(secure, attributeGetter, c.AuditWriter) // before impersonation to read original user
|
secure = apiserverfilters.WithAudit(secure, attributeGetter, c.AuditWriter) // before impersonation to read original user
|
||||||
secure = authhandlers.WithAuthentication(secure, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
|
secure = authhandlers.WithAuthentication(secure, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
|
||||||
secure = genericfilters.WithPanicRecovery(secure, c.RequestContextMapper)
|
secure = genericfilters.WithPanicRecovery(secure, c.RequestContextMapper)
|
||||||
secure = apiserverfilters.WithRequestInfo(secure, s.NewRequestInfoResolver(), c.RequestContextMapper)
|
secure = apiserverfilters.WithRequestInfo(secure, NewRequestInfoResolver(c), c.RequestContextMapper)
|
||||||
secure = api.WithRequestContext(secure, c.RequestContextMapper)
|
secure = api.WithRequestContext(secure, c.RequestContextMapper)
|
||||||
secure = genericfilters.WithTimeoutForNonLongRunningRequests(secure, c.LongRunningFunc)
|
secure = genericfilters.WithTimeoutForNonLongRunningRequests(secure, c.LongRunningFunc)
|
||||||
secure = genericfilters.WithMaxInFlightLimit(secure, c.MaxRequestsInFlight, c.LongRunningFunc)
|
secure = genericfilters.WithMaxInFlightLimit(secure, c.MaxRequestsInFlight, c.LongRunningFunc)
|
||||||
@ -440,3 +443,10 @@ func DefaultAndValidateRunOptions(options *options.ServerRunOptions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewRequestInfoResolver(c *Config) *request.RequestInfoResolver {
|
||||||
|
return &request.RequestInfoResolver{
|
||||||
|
APIPrefixes: sets.NewString(strings.Trim(c.APIPrefix, "/"), strings.Trim(c.APIGroupPrefix, "/")), // all possible API prefixes
|
||||||
|
GrouplessAPIPrefixes: sets.NewString(strings.Trim(c.APIPrefix, "/")), // APIPrefixes that won't have groups (legacy)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -42,7 +42,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apimachinery"
|
"k8s.io/kubernetes/pkg/apimachinery"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apiserver"
|
"k8s.io/kubernetes/pkg/apiserver"
|
||||||
"k8s.io/kubernetes/pkg/apiserver/request"
|
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver/openapi"
|
"k8s.io/kubernetes/pkg/genericapiserver/openapi"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver/openapi/common"
|
"k8s.io/kubernetes/pkg/genericapiserver/openapi/common"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver/options"
|
"k8s.io/kubernetes/pkg/genericapiserver/options"
|
||||||
@ -50,7 +49,6 @@ import (
|
|||||||
certutil "k8s.io/kubernetes/pkg/util/cert"
|
certutil "k8s.io/kubernetes/pkg/util/cert"
|
||||||
utilnet "k8s.io/kubernetes/pkg/util/net"
|
utilnet "k8s.io/kubernetes/pkg/util/net"
|
||||||
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
|
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Info about an API group.
|
// Info about an API group.
|
||||||
@ -188,13 +186,6 @@ func (s *GenericAPIServer) MinRequestTimeout() time.Duration {
|
|||||||
return s.minRequestTimeout
|
return s.minRequestTimeout
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *GenericAPIServer) NewRequestInfoResolver() *request.RequestInfoResolver {
|
|
||||||
return &request.RequestInfoResolver{
|
|
||||||
APIPrefixes: sets.NewString(strings.Trim(s.legacyAPIPrefix, "/"), strings.Trim(s.apiPrefix, "/")), // all possible API prefixes
|
|
||||||
GrouplessAPIPrefixes: sets.NewString(strings.Trim(s.legacyAPIPrefix, "/")), // APIPrefixes that won't have groups (legacy)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// HandleWithAuth adds an http.Handler for pattern to an http.ServeMux
|
// HandleWithAuth adds an http.Handler for pattern to an http.ServeMux
|
||||||
// Applies the same authentication and authorization (if any is configured)
|
// Applies the same authentication and authorization (if any is configured)
|
||||||
// to the request is used for the GenericAPIServer's built-in endpoints.
|
// to the request is used for the GenericAPIServer's built-in endpoints.
|
||||||
|
Loading…
Reference in New Issue
Block a user