Documentation ¶
Overview ¶
Package controller contains the router controller.
Index ¶
- Variables
- func GetNameForHost(name string) string
- func GetSafeRouteName(name string) string
- func HostForRoute(route *routeapi.Route) string
- func IsGeneratedRouteName(name string) bool
- type ExtendedValidator
- func (p *ExtendedValidator) Commit() error
- func (p *ExtendedValidator) HandleEndpoints(eventType watch.EventType, endpoints *kapi.Endpoints) error
- func (p *ExtendedValidator) HandleNamespaces(namespaces sets.String) error
- func (p *ExtendedValidator) HandleNode(eventType watch.EventType, node *kapi.Node) error
- func (p *ExtendedValidator) HandleRoute(eventType watch.EventType, route *routeapi.Route) error
- type HostAdmitter
- func (p *HostAdmitter) Commit() error
- func (p *HostAdmitter) HandleEndpoints(eventType watch.EventType, endpoints *kapi.Endpoints) error
- func (p *HostAdmitter) HandleNamespaces(namespaces sets.String) error
- func (p *HostAdmitter) HandleNode(eventType watch.EventType, node *kapi.Node) error
- func (p *HostAdmitter) HandleRoute(eventType watch.EventType, route *routeapi.Route) error
- type HostToRouteMap
- type IngressTranslator
- func (it *IngressTranslator) TranslateIngressEvent(eventType watch.EventType, ingress *extensions.Ingress) []ingressRouteEvents
- func (it *IngressTranslator) TranslateSecretEvent(eventType watch.EventType, secret *kapi.Secret) (events []ingressRouteEvents)
- func (it *IngressTranslator) UpdateNamespaces(namespaces sets.String)
- type RejectionRecorder
- type RouteAdmissionFunc
- type RouteHostFunc
- type RouteMap
- type RouteToHostMap
- type RouterController
- func (c *RouterController) Commit()
- func (c *RouterController) GetFilteredProjectNames() (sets.String, error)
- func (c *RouterController) HandleEndpoints(eventType watch.EventType, obj interface{})
- func (c *RouterController) HandleIngress(eventType watch.EventType, obj interface{})
- func (c *RouterController) HandleNamespace(eventType watch.EventType, obj interface{})
- func (c *RouterController) HandleNode(eventType watch.EventType, obj interface{})
- func (c *RouterController) HandleProjects()
- func (c *RouterController) HandleRoute(eventType watch.EventType, obj interface{})
- func (c *RouterController) HandleSecret(eventType watch.EventType, obj interface{})
- func (c *RouterController) RecordNamespaceEndpoints(eventType watch.EventType, ep *kapi.Endpoints)
- func (c *RouterController) RecordNamespaceRoutes(eventType watch.EventType, rt *routeapi.Route)
- func (c *RouterController) Run()
- func (c *RouterController) UpdateNamespaces()
- type StatusAdmitter
- func (a *StatusAdmitter) Commit() error
- func (a *StatusAdmitter) HandleEndpoints(eventType watch.EventType, route *kapi.Endpoints) error
- func (a *StatusAdmitter) HandleNamespaces(namespaces sets.String) error
- func (a *StatusAdmitter) HandleNode(eventType watch.EventType, node *kapi.Node) error
- func (a *StatusAdmitter) HandleRoute(eventType watch.EventType, route *routeapi.Route) error
- func (a *StatusAdmitter) RecordRouteRejection(route *routeapi.Route, reason, message string)
- type UniqueHost
- func (p *UniqueHost) Commit() error
- func (p *UniqueHost) HandleEndpoints(eventType watch.EventType, endpoints *kapi.Endpoints) error
- func (p *UniqueHost) HandleNamespaces(namespaces sets.String) error
- func (p *UniqueHost) HandleNode(eventType watch.EventType, node *kapi.Node) error
- func (p *UniqueHost) HandleRoute(eventType watch.EventType, route *routeapi.Route) error
- func (p *UniqueHost) HostLen() int
- func (p *UniqueHost) RoutesForHost(host string) ([]*routeapi.Route, bool)
Constants ¶
This section is empty.
Variables ¶
var LogRejections = logRecorder{}
Functions ¶
func GetNameForHost ¶
GetNameForHost returns the name of the ingress if the route name was generated from a path, otherwise it returns the name as given.
func GetSafeRouteName ¶
GetSafeRouteName returns a name that is safe for use in an HAproxy config.
func HostForRoute ¶
HostForRoute returns the host set on the route.
func IsGeneratedRouteName ¶
IsGeneratedRoute indicates whether the given route name was generated from an ingress.
Types ¶
type ExtendedValidator ¶
type ExtendedValidator struct {
// contains filtered or unexported fields
}
ExtendedValidator implements the router.Plugin interface to provide extended config validation for template based, backend-agnostic routers.
func NewExtendedValidator ¶
func NewExtendedValidator(plugin router.Plugin, recorder RejectionRecorder) *ExtendedValidator
NewExtendedValidator creates a plugin wrapper that ensures only routes that pass extended validation are relayed to the next plugin in the chain. Recorder is an interface for indicating why a route was rejected.
func (*ExtendedValidator) Commit ¶
func (p *ExtendedValidator) Commit() error
func (*ExtendedValidator) HandleEndpoints ¶
func (p *ExtendedValidator) HandleEndpoints(eventType watch.EventType, endpoints *kapi.Endpoints) error
HandleEndpoints processes watch events on the Endpoints resource.
func (*ExtendedValidator) HandleNamespaces ¶
func (p *ExtendedValidator) HandleNamespaces(namespaces sets.String) error
HandleNamespaces limits the scope of valid routes to only those that match the provided namespace list.
func (*ExtendedValidator) HandleNode ¶
HandleNode processes watch events on the node resource
func (*ExtendedValidator) HandleRoute ¶
HandleRoute processes watch events on the Route resource.
type HostAdmitter ¶
type HostAdmitter struct {
// contains filtered or unexported fields
}
HostAdmitter implements the router.Plugin interface to add admission control checks for routes in template based, backend-agnostic routers.
func NewHostAdmitter ¶
func NewHostAdmitter(plugin router.Plugin, fn RouteAdmissionFunc, allowWildcards, disableNamespaceCheck bool, recorder RejectionRecorder) *HostAdmitter
NewHostAdmitter creates a plugin wrapper that checks whether or not to admit routes and relay them to the next plugin in the chain. Recorder is an interface for indicating why a route was rejected.
func (*HostAdmitter) Commit ¶
func (p *HostAdmitter) Commit() error
func (*HostAdmitter) HandleEndpoints ¶
HandleEndpoints processes watch events on the Endpoints resource.
func (*HostAdmitter) HandleNamespaces ¶
func (p *HostAdmitter) HandleNamespaces(namespaces sets.String) error
HandleNamespaces limits the scope of valid routes to only those that match the provided namespace list.
func (*HostAdmitter) HandleNode ¶
HandleNode processes watch events on the Node resource.
func (*HostAdmitter) HandleRoute ¶
HandleRoute processes watch events on the Route resource.
type HostToRouteMap ¶
type IngressTranslator ¶
type IngressTranslator struct {
// contains filtered or unexported fields
}
IngressTranslator converts secret and ingress events into route events.
- Caches ingresses to enable:
- Identification of which secrets are referenced by ingresses
- Generation of route events in response to a secret event
- Route deletion when an ingress rule is removed
- Caches secrets to minimize the lookups required to generate route events from an ingress
- Secrets will be read into the cache via Get() the first time they are referenced
- Only secrets referenced by an ingress cached by the router will themselves be cached
- Secrets will be updated by calls to TranslateSecretEvent
func NewIngressTranslator ¶
func NewIngressTranslator(kc kcoreclient.SecretsGetter) *IngressTranslator
NewIngressTranslator creates a new cache for the given client
func (*IngressTranslator) TranslateIngressEvent ¶
func (it *IngressTranslator) TranslateIngressEvent(eventType watch.EventType, ingress *extensions.Ingress) []ingressRouteEvents
TranslateIngressEvent converts an ingress event into route events.
func (*IngressTranslator) TranslateSecretEvent ¶
func (it *IngressTranslator) TranslateSecretEvent(eventType watch.EventType, secret *kapi.Secret) (events []ingressRouteEvents)
TranslateSecretEvent converts the given secret event into route events.
func (*IngressTranslator) UpdateNamespaces ¶
func (it *IngressTranslator) UpdateNamespaces(namespaces sets.String)
UpdateNamespaces sets which namespaces ingress objects are allowed from and updates the cache accordingly.
type RejectionRecorder ¶
type RejectionRecorder interface {
RecordRouteRejection(route *routeapi.Route, reason, message string)
}
RejectionRecorder is an object capable of recording why a route was rejected
type RouteAdmissionFunc ¶
RouteAdmissionFunc determines whether or not to admit a route.
type RouteHostFunc ¶
RouteHostFunc returns a host for a route. It may return an empty string.
type RouteToHostMap ¶
type RouterController ¶
type RouterController struct { Plugin router.Plugin FilteredNamespaceNames sets.String NamespaceLabels labels.Selector // Holds Namespace --> RouteName --> RouteObject NamespaceRoutes map[string]map[string]*routeapi.Route // Holds Namespace --> EndpointsName --> EndpointsObject NamespaceEndpoints map[string]map[string]*kapi.Endpoints ProjectClient projectclient.ProjectResourceInterface ProjectLabels labels.Selector ProjectSyncInterval time.Duration ProjectWaitInterval time.Duration ProjectRetries int WatchNodes bool EnableIngress bool IngressTranslator *IngressTranslator // contains filtered or unexported fields }
RouterController abstracts the details of watching resources like Routes, Endpoints, etc. used by the plugin implementation.
func (*RouterController) Commit ¶ added in v3.7.0
func (c *RouterController) Commit()
Commit notifies the plugin that it is safe to commit state.
func (*RouterController) GetFilteredProjectNames ¶ added in v3.7.0
func (c *RouterController) GetFilteredProjectNames() (sets.String, error)
func (*RouterController) HandleEndpoints ¶
func (c *RouterController) HandleEndpoints(eventType watch.EventType, obj interface{})
HandleEndpoints handles a single Endpoints event and refreshes the router backend.
func (*RouterController) HandleIngress ¶
func (c *RouterController) HandleIngress(eventType watch.EventType, obj interface{})
HandleIngress handles a single Ingress event and synchronizes the router backend.
func (*RouterController) HandleNamespace ¶ added in v3.7.0
func (c *RouterController) HandleNamespace(eventType watch.EventType, obj interface{})
func (*RouterController) HandleNode ¶
func (c *RouterController) HandleNode(eventType watch.EventType, obj interface{})
HandleNode handles a single Node event and synchronizes the router backend
func (*RouterController) HandleProjects ¶ added in v3.7.0
func (c *RouterController) HandleProjects()
func (*RouterController) HandleRoute ¶
func (c *RouterController) HandleRoute(eventType watch.EventType, obj interface{})
HandleRoute handles a single Route event and synchronizes the router backend.
func (*RouterController) HandleSecret ¶
func (c *RouterController) HandleSecret(eventType watch.EventType, obj interface{})
HandleSecret handles a single Secret event and synchronizes the router backend.
func (*RouterController) RecordNamespaceEndpoints ¶ added in v3.7.0
func (c *RouterController) RecordNamespaceEndpoints(eventType watch.EventType, ep *kapi.Endpoints)
func (*RouterController) RecordNamespaceRoutes ¶ added in v3.7.0
func (c *RouterController) RecordNamespaceRoutes(eventType watch.EventType, rt *routeapi.Route)
func (*RouterController) UpdateNamespaces ¶ added in v3.7.0
func (c *RouterController) UpdateNamespaces()
type StatusAdmitter ¶
type StatusAdmitter struct {
// contains filtered or unexported fields
}
StatusAdmitter ensures routes added to the plugin have status set.
func NewStatusAdmitter ¶
func NewStatusAdmitter(plugin router.Plugin, client client.RoutesGetter, name, hostName string) *StatusAdmitter
NewStatusAdmitter creates a plugin wrapper that ensures every accepted route has a status field set that matches this router. The admitter manages an LRU of recently seen conflicting updates to handle when two router processes with differing configurations are writing updates at the same time.
func (*StatusAdmitter) Commit ¶
func (a *StatusAdmitter) Commit() error
func (*StatusAdmitter) HandleEndpoints ¶
func (*StatusAdmitter) HandleNamespaces ¶
func (a *StatusAdmitter) HandleNamespaces(namespaces sets.String) error
func (*StatusAdmitter) HandleNode ¶
func (*StatusAdmitter) HandleRoute ¶
HandleRoute attempts to admit the provided route on watch add / modifications.
func (*StatusAdmitter) RecordRouteRejection ¶
func (a *StatusAdmitter) RecordRouteRejection(route *routeapi.Route, reason, message string)
RecordRouteRejection attempts to update the route status with a reason for a route being rejected.
type UniqueHost ¶
type UniqueHost struct {
// contains filtered or unexported fields
}
UniqueHost implements the router.Plugin interface to provide a template based, backend-agnostic router.
func NewUniqueHost ¶
func NewUniqueHost(plugin router.Plugin, fn RouteHostFunc, disableOwnershipCheck bool, recorder RejectionRecorder) *UniqueHost
NewUniqueHost creates a plugin wrapper that ensures only unique routes are passed into the underlying plugin. Recorder is an interface for indicating why a route was rejected.
func (*UniqueHost) Commit ¶
func (p *UniqueHost) Commit() error
func (*UniqueHost) HandleEndpoints ¶
HandleEndpoints processes watch events on the Endpoints resource.
func (*UniqueHost) HandleNamespaces ¶
func (p *UniqueHost) HandleNamespaces(namespaces sets.String) error
HandleNamespaces limits the scope of valid routes to only those that match the provided namespace list.
func (*UniqueHost) HandleNode ¶
HandleNode processes watch events on the Node resource and calls the router
func (*UniqueHost) HandleRoute ¶
HandleRoute processes watch events on the Route resource. TODO: this function can probably be collapsed with the router itself, as a function that
determines which component needs to be recalculated (which template) and then does so on demand.
func (*UniqueHost) HostLen ¶
func (p *UniqueHost) HostLen() int
HostLen returns the number of hosts currently tracked by this plugin.
func (*UniqueHost) RoutesForHost ¶
func (p *UniqueHost) RoutesForHost(host string) ([]*routeapi.Route, bool)
RoutesForHost is a helper that allows routes to be retrieved.