Documentation ¶
Overview ¶
Package server contains the plumbing to create kubernetes-like API server command.
Index ¶
- Constants
- Variables
- func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) http.Handler
- func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, scheme *runtime.Scheme) *openapicommon.Config
- func DefaultSwaggerConfig() *swagger.Config
- func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, error)
- func LoopbackHostPort(bindAddress string) (string, string, error)
- func NewRequestInfoResolver(c *Config) *apirequest.RequestInfoFactory
- func RunServer(server *http.Server, network string, stopCh <-chan struct{}) (int, error)
- type APIGroupInfo
- type Config
- type DefaultDiscoveryAddresses
- type DelegationTarget
- type DiscoveryAddresses
- type DiscoveryCIDRRule
- type GenericAPIServer
- func (s *GenericAPIServer) AddAPIGroupForDiscovery(apiGroup metav1.APIGroup)
- func (s *GenericAPIServer) AddHealthzChecks(checks ...healthz.HealthzChecker) error
- func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc) error
- func (s *GenericAPIServer) DynamicApisDiscovery() *restful.WebService
- func (s *GenericAPIServer) EffectiveSecurePort() int
- func (s *GenericAPIServer) HealthzChecks() []healthz.HealthzChecker
- func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error
- func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo *APIGroupInfo) error
- func (s *GenericAPIServer) ListedPaths() []string
- func (s *GenericAPIServer) MinRequestTimeout() time.Duration
- func (s *GenericAPIServer) PostStartHooks() map[string]postStartHookEntry
- func (s *GenericAPIServer) PrepareRun() preparedGenericAPIServer
- func (s *GenericAPIServer) RemoveAPIGroupForDiscovery(groupName string)
- func (s *GenericAPIServer) RequestContextMapper() apirequest.RequestContextMapper
- func (s *GenericAPIServer) RunPostStartHooks()
- func (s *GenericAPIServer) UnprotectedHandler() http.Handler
- type NamedTLSCert
- type PostStartHookContext
- type PostStartHookFunc
- type PostStartHookProvider
- type SecureServingInfo
Constants ¶
const ( // DefaultLegacyAPIPrefix is where the the legacy APIs will be located. DefaultLegacyAPIPrefix = "/api" // APIGroupPrefix is where non-legacy API group will be located. APIGroupPrefix = "/apis" )
const LoopbackClientServerNameOverride = "apiserver-loopback-client"
LoopbackClientServerNameOverride is passed to the apiserver from the loopback client in order to select the loopback certificate via SNI if TLS is used.
Variables ¶
var EmptyDelegate = emptyDelegate{ // contains filtered or unexported fields }
Functions ¶
func DefaultOpenAPIConfig ¶
func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, scheme *runtime.Scheme) *openapicommon.Config
func DefaultSwaggerConfig ¶
DefaultSwaggerConfig returns a default configuration without WebServiceURL and WebServices set.
func GetNamedCertificateMap ¶
func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, error)
getNamedCertificateMap returns a map of *tls.Certificate by name. It's is suitable for use in tls.Config#NamedCertificates. Returns an error if any of the certs cannot be loaded. Returns nil if len(certs) == 0
func LoopbackHostPort ¶
LoopbackHostPort returns the host and port loopback REST clients should use to contact the server.
func NewRequestInfoResolver ¶
func NewRequestInfoResolver(c *Config) *apirequest.RequestInfoFactory
Types ¶
type APIGroupInfo ¶
type APIGroupInfo struct { GroupMeta apimachinery.GroupMeta // Info about the resources in this group. Its a map from version to resource to the storage. VersionedResourcesStorageMap map[string]map[string]rest.Storage // OptionsExternalVersion controls the APIVersion used for common objects in the // schema like api.Status, api.DeleteOptions, and metav1.ListOptions. Other implementors may // define a version "v1beta1" but want to use the Kubernetes "v1" internal objects. // If nil, defaults to groupMeta.GroupVersion. // TODO: Remove this when https://github.com/kubernetes/kubernetes/issues/19018 is fixed. OptionsExternalVersion *schema.GroupVersion // MetaGroupVersion defaults to "meta.k8s.io/v1" and is the scheme group version used to decode // common API implementations like ListOptions. Future changes will allow this to vary by group // version (for when the inevitable meta/v2 group emerges). MetaGroupVersion *schema.GroupVersion // Scheme includes all of the types used by this group and how to convert between them (or // to convert objects from outside of this group that are accepted in this API). // TODO: replace with interfaces Scheme *runtime.Scheme // NegotiatedSerializer controls how this group encodes and decodes data NegotiatedSerializer runtime.NegotiatedSerializer // ParameterCodec performs conversions for query parameters passed to API calls ParameterCodec runtime.ParameterCodec // SubresourceGroupVersionKind contains the GroupVersionKind overrides for each subresource that is // accessible from this API group version. The GroupVersionKind is that of the external version of // the subresource. The key of this map should be the path of the subresource. The keys here should // match the keys in the Storage map above for subresources. SubresourceGroupVersionKind map[string]schema.GroupVersionKind }
Info about an API group.
func NewDefaultAPIGroupInfo ¶
func NewDefaultAPIGroupInfo(group string, registry *registered.APIRegistrationManager, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo
NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values exposed for easier composition from other packages
type Config ¶
type Config struct { // SecureServingInfo is required to serve https SecureServingInfo *SecureServingInfo // LoopbackClientConfig is a config for a privileged loopback connection to the API server // This is required for proper functioning of the PostStartHooks on a GenericAPIServer LoopbackClientConfig *restclient.Config // Authenticator determines which subject is making the request Authenticator authenticator.Request // Authorizer determines whether the subject is allowed to make the request based only // on the RequestURI Authorizer authorizer.Authorizer // AdmissionControl performs deep inspection of a given request (including content) // to set values and determine whether its allowed AdmissionControl admission.Interface CorsAllowedOriginList []string EnableSwaggerUI bool EnableIndex bool EnableProfiling bool EnableDiscovery bool // Requires generic profiling enabled EnableContentionProfiling bool EnableMetrics bool DisabledPostStartHooks sets.String // Version will enable the /version endpoint if non-nil Version *version.Info // AuditWriter is the destination for audit logs. If nil, they will not be written. AuditWriter io.Writer // SupportsBasicAuth indicates that's at least one Authenticator supports basic auth // If this is true, a basic auth challenge is returned on authentication failure // TODO(roberthbailey): Remove once the server no longer supports http basic auth. SupportsBasicAuth bool // ExternalAddress is the host name to use for external (public internet) facing URLs (e.g. Swagger) // Will default to a value based on secure serving info and available ipv4 IPs. ExternalAddress string // FallThroughHandler is the final HTTP handler in the chain. If it is nil, one will be created for you. // It comes after all filters and the API handling FallThroughHandler *mux.PathRecorderMux // BuildHandlerChainFunc allows you to build custom handler chains by decorating the apiHandler. BuildHandlerChainFunc func(apiHandler http.Handler, c *Config) (secure http.Handler) // DiscoveryAddresses is used to build the IPs pass to discovery. If nil, the ExternalAddress is // always reported DiscoveryAddresses DiscoveryAddresses // The default set of healthz checks. There might be more added via AddHealthzChecks dynamically. HealthzChecks []healthz.HealthzChecker // 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 // Serializer is required and provides the interface for serializing and converting objects to and from the wire // The default (api.Codecs) usually works fine. Serializer runtime.NegotiatedSerializer // OpenAPIConfig will be used in generating OpenAPI spec. This is nil by default. Use DefaultOpenAPIConfig for "working" defaults. OpenAPIConfig *openapicommon.Config // SwaggerConfig will be used in generating Swagger spec. This is nil by default. Use DefaultSwaggerConfig for "working" defaults. SwaggerConfig *swagger.Config // RESTOptionsGetter is used to construct RESTStorage types via the generic registry. RESTOptionsGetter genericregistry.RESTOptionsGetter // If specified, requests will be allocated a random timeout between this value, and twice this value. // Note that it is up to the request handlers to ignore or honor this timeout. In seconds. MinRequestTimeout int // MaxRequestsInFlight is the maximum number of parallel non-long-running requests. Every further // request has to wait. Applies only to non-mutating requests. MaxRequestsInFlight int // MaxMutatingRequestsInFlight is the maximum number of parallel mutating requests. Every further // request has to wait. MaxMutatingRequestsInFlight int // Predicate which is true for paths of long-running http requests LongRunningFunc genericfilters.LongRunningRequestCheck // The port on PublicAddress where a read-write server will be installed. // Defaults to 6443 if not set. ReadWritePort int // PublicAddress is the IP address where members of the cluster (kubelet, // kube-proxy, services, etc.) can reach the GenericAPIServer. // If nil or 0.0.0.0, the host's default interface will be used. PublicAddress net.IP }
Config is a structure used to configure a GenericAPIServer. It's members are sorted roughly in order of importance for composers.
func NewConfig ¶
func NewConfig(codecs serializer.CodecFactory) *Config
NewConfig returns a Config struct with the default values
func (*Config) ApplyClientCert ¶
func (*Config) Complete ¶
func (c *Config) Complete() completedConfig
Complete fills in any fields not set that are required to have valid data and can be derived from other fields. If you're going to `ApplyOptions`, do that first. It's mutating the receiver.
func (*Config) SkipComplete ¶
func (c *Config) SkipComplete() completedConfig
SkipComplete provides a way to construct a server instance without config completion.
type DefaultDiscoveryAddresses ¶
type DefaultDiscoveryAddresses struct { // DiscoveryCIDRRules is a list of CIDRs and Addresses to use if a client is in the range DiscoveryCIDRRules []DiscoveryCIDRRule // DefaultAddress is the address (hostname or IP and port) that should be used in // if no CIDR matches more specifically. DefaultAddress string }
DefaultDiscoveryAddresses is a default implementation of DiscoveryAddresses that will work in most cases
func (DefaultDiscoveryAddresses) ServerAddressByClientCIDRs ¶
func (d DefaultDiscoveryAddresses) ServerAddressByClientCIDRs(clientIP net.IP) []metav1.ServerAddressByClientCIDR
type DelegationTarget ¶
type DelegationTarget interface { // UnprotectedHandler returns a handler that is NOT protected by a normal chain UnprotectedHandler() http.Handler // RequestContextMapper returns the existing RequestContextMapper. Because we cannot rewire all existing // uses of this function, this will be used in any delegating API server RequestContextMapper() apirequest.RequestContextMapper // PostStartHooks returns the post-start hooks that need to be combined PostStartHooks() map[string]postStartHookEntry // HealthzChecks returns the healthz checks that need to be combined HealthzChecks() []healthz.HealthzChecker // ListedPaths returns the paths for supporting an index ListedPaths() []string }
DelegationTarget is an interface which allows for composition of API servers with top level handling that works as expected.
type DiscoveryAddresses ¶
type DiscoveryAddresses interface {
ServerAddressByClientCIDRs(net.IP) []metav1.ServerAddressByClientCIDR
}
type DiscoveryCIDRRule ¶
type DiscoveryCIDRRule struct { IPRange net.IPNet // Address is the address (hostname or IP and port) that should be used in // if this CIDR matches Address string }
DiscoveryCIDRRule is a rule for adding an alternate path to the master based on matching CIDR
func (DiscoveryCIDRRule) ServerAddressByClientCIDRs ¶
func (d DiscoveryCIDRRule) ServerAddressByClientCIDRs(clientIP net.IP) []metav1.ServerAddressByClientCIDR
type GenericAPIServer ¶
type GenericAPIServer struct { // LoopbackClientConfig is a config for a privileged loopback connection to the API server LoopbackClientConfig *restclient.Config // The registered APIs HandlerContainer *genericmux.APIContainer SecureServingInfo *SecureServingInfo // ExternalAddress is the address (hostname or IP and port) that should be used in // external (public internet) URLs for this GenericAPIServer. ExternalAddress string // Serializer controls how common API objects not in a group/version prefix are serialized for this server. // Individual APIGroups may define their own serializers. Serializer runtime.NegotiatedSerializer // "Outputs" Handler http.Handler // FallThroughHandler is the final HTTP handler in the chain. // It comes after all filters and the API handling FallThroughHandler *mux.PathRecorderMux // contains filtered or unexported fields }
GenericAPIServer contains state for a Kubernetes cluster api server.
func (*GenericAPIServer) AddAPIGroupForDiscovery ¶
func (s *GenericAPIServer) AddAPIGroupForDiscovery(apiGroup metav1.APIGroup)
AddAPIGroupForDiscovery adds the specified group to the list served to discovery queries. Groups are listed in the order they are added.
func (*GenericAPIServer) AddHealthzChecks ¶
func (s *GenericAPIServer) AddHealthzChecks(checks ...healthz.HealthzChecker) error
AddHealthzCheck allows you to add a HealthzCheck.
func (*GenericAPIServer) AddPostStartHook ¶
func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc) error
AddPostStartHook allows you to add a PostStartHook.
func (*GenericAPIServer) DynamicApisDiscovery ¶
func (s *GenericAPIServer) DynamicApisDiscovery() *restful.WebService
DynamicApisDiscovery returns a webservice serving api group discovery. Note: during the server runtime apiGroupsForDiscovery might change.
func (*GenericAPIServer) EffectiveSecurePort ¶
func (s *GenericAPIServer) EffectiveSecurePort() int
EffectiveSecurePort returns the secure port we bound to.
func (*GenericAPIServer) HealthzChecks ¶
func (s *GenericAPIServer) HealthzChecks() []healthz.HealthzChecker
func (*GenericAPIServer) InstallAPIGroup ¶
func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error
Exposes the given api group in the API.
func (*GenericAPIServer) InstallLegacyAPIGroup ¶
func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo *APIGroupInfo) error
func (*GenericAPIServer) ListedPaths ¶
func (s *GenericAPIServer) ListedPaths() []string
func (*GenericAPIServer) MinRequestTimeout ¶
func (s *GenericAPIServer) MinRequestTimeout() time.Duration
MinRequestTimeout is exposed so that third party resource storage can be build in a different location. TODO refactor third party resource storage
func (*GenericAPIServer) PostStartHooks ¶
func (s *GenericAPIServer) PostStartHooks() map[string]postStartHookEntry
func (*GenericAPIServer) PrepareRun ¶
func (s *GenericAPIServer) PrepareRun() preparedGenericAPIServer
PrepareRun does post API installation setup steps.
func (*GenericAPIServer) RemoveAPIGroupForDiscovery ¶
func (s *GenericAPIServer) RemoveAPIGroupForDiscovery(groupName string)
func (*GenericAPIServer) RequestContextMapper ¶
func (s *GenericAPIServer) RequestContextMapper() apirequest.RequestContextMapper
RequestContextMapper is exposed so that third party resource storage can be build in a different location. TODO refactor third party resource storage
func (*GenericAPIServer) RunPostStartHooks ¶
func (s *GenericAPIServer) RunPostStartHooks()
RunPostStartHooks runs the PostStartHooks for the server
func (*GenericAPIServer) UnprotectedHandler ¶
func (s *GenericAPIServer) UnprotectedHandler() http.Handler
type NamedTLSCert ¶
type NamedTLSCert struct { TLSCert tls.Certificate // names is a list of domain patterns: fully qualified domain names, possibly prefixed with // wildcard segments. Names []string }
type PostStartHookContext ¶
type PostStartHookContext struct { // LoopbackClientConfig is a config for a privileged loopback connection to the API server LoopbackClientConfig *restclient.Config }
PostStartHookContext provides information about this API server to a PostStartHookFunc
type PostStartHookFunc ¶
type PostStartHookFunc func(context PostStartHookContext) error
PostStartHookFunc is a function that is called after the server has started. It must properly handle cases like:
- asynchronous start in multiple API server processes
- conflicts between the different processes all trying to perform the same action
- partially complete work (API server crashes while running your hook)
- API server access **BEFORE** your hook has completed
Think of it like a mini-controller that is super privileged and gets to run in-process If you use this feature, tag @deads2k on github who has promised to review code for anyone's PostStartHook until it becomes easier to use.
type PostStartHookProvider ¶
type PostStartHookProvider interface {
PostStartHook() (string, PostStartHookFunc, error)
}
PostStartHookProvider is an interface in addition to provide a post start hook for the api server
type SecureServingInfo ¶
type SecureServingInfo struct { // BindAddress is the ip:port to serve on BindAddress string // BindNetwork is the type of network to bind to - defaults to "tcp", accepts "tcp", // "tcp4", and "tcp6". BindNetwork string // Cert is the main server cert which is used if SNI does not match. Cert must be non-nil and is // allowed to be in SNICerts. Cert *tls.Certificate // CACert is an optional certificate authority used for the loopback connection of the Admission controllers. // If this is nil, the certificate authority is extracted from Cert or a matching SNI certificate. CACert *tls.Certificate // SNICerts are the TLS certificates by name used for SNI. SNICerts map[string]*tls.Certificate // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates ClientCA *x509.CertPool // MinTLSVersion optionally overrides the minimum TLS version supported. // Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). MinTLSVersion uint16 // CipherSuites optionally overrides the list of allowed cipher suites for the server. // Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). CipherSuites []uint16 }
func (*SecureServingInfo) NewLoopbackClientConfig ¶
func (s *SecureServingInfo) NewLoopbackClientConfig(token string, loopbackCert []byte) (*restclient.Config, error)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package filters contains all the http handler chain filters which are not api related.
|
Package filters contains all the http handler chain filters which are not api related. |
Package healthz implements basic http server health checking.
|
Package healthz implements basic http server health checking. |
Package httplog contains a helper object and functions to maintain a log along with an http response.
|
Package httplog contains a helper object and functions to maintain a log along with an http response. |
Package mux contains abstractions for http multiplexing of APIs.
|
Package mux contains abstractions for http multiplexing of APIs. |
Package openapi contains code to generate OpenAPI discovery spec (which initial version of it also known as Swagger 2.0).
|
Package openapi contains code to generate OpenAPI discovery spec (which initial version of it also known as Swagger 2.0). |
package options is the public flags and options used by a generic api server.
|
package options is the public flags and options used by a generic api server. |
Package routes holds a collection of optional genericapiserver http handlers.
|
Package routes holds a collection of optional genericapiserver http handlers. |
Package storage contains the plumbing to setup the etcd storage of the apiserver.
|
Package storage contains the plumbing to setup the etcd storage of the apiserver. |