Documentation ¶
Index ¶
- Variables
- func CleanupLeftovers(ipt iptables.Interface) (encounteredError bool)
- func ProxyTCP(in, out *net.TCPConn)
- func TryConnectEndpoints(service proxy.ServicePortName, srcAddr net.Addr, protocol string, ...) (out net.Conn, err error)
- type ClientCache
- type LoadBalancer
- type LoadBalancerRR
- func (lb *LoadBalancerRR) CleanupStaleStickySessions(svcPort proxy.ServicePortName)
- func (lb *LoadBalancerRR) DeleteService(svcPort proxy.ServicePortName)
- func (lb *LoadBalancerRR) NewService(svcPort proxy.ServicePortName, affinityType v1.ServiceAffinity, ttlSeconds int) error
- func (lb *LoadBalancerRR) NextEndpoint(svcPort proxy.ServicePortName, srcAddr net.Addr, sessionAffinityReset bool) (string, error)
- func (lb *LoadBalancerRR) OnEndpointsAdd(endpoints *v1.Endpoints)
- func (lb *LoadBalancerRR) OnEndpointsDelete(endpoints *v1.Endpoints)
- func (lb *LoadBalancerRR) OnEndpointsSynced()
- func (lb *LoadBalancerRR) OnEndpointsUpdate(oldEndpoints, endpoints *v1.Endpoints)
- func (lb *LoadBalancerRR) ServiceHasEndpoints(svcPort proxy.ServicePortName) bool
- type PortAllocator
- type Proxier
- func (proxier *Proxier) OnEndpointsAdd(endpoints *v1.Endpoints)
- func (proxier *Proxier) OnEndpointsDelete(endpoints *v1.Endpoints)
- func (proxier *Proxier) OnEndpointsSynced()
- func (proxier *Proxier) OnEndpointsUpdate(oldEndpoints, endpoints *v1.Endpoints)
- func (proxier *Proxier) OnServiceAdd(service *v1.Service)
- func (proxier *Proxier) OnServiceDelete(service *v1.Service)
- func (proxier *Proxier) OnServiceSynced()
- func (proxier *Proxier) OnServiceUpdate(oldService, service *v1.Service)
- func (proxier *Proxier) Sync()
- func (proxier *Proxier) SyncLoop()
- type ProxySocket
- type ProxySocketFunc
- type ServiceInfo
Constants ¶
This section is empty.
Variables ¶
var ( ErrMissingServiceEntry = errors.New("missing service entry") ErrMissingEndpoints = errors.New("missing endpoints") )
var EndpointDialTimeouts = []time.Duration{250 * time.Millisecond, 500 * time.Millisecond, 1 * time.Second, 2 * time.Second}
How long we wait for a connection to a backend in seconds
var ( // ErrProxyOnLocalhost is returned by NewProxier if the user requests a proxier on // the loopback address. May be checked for by callers of NewProxier to know whether // the caller provided invalid input. ErrProxyOnLocalhost = fmt.Errorf("cannot proxy on localhost") )
Functions ¶
func CleanupLeftovers ¶
CleanupLeftovers removes all iptables rules and chains created by the Proxier It returns true if an error was encountered. Errors are logged.
func TryConnectEndpoints ¶ added in v1.6.0
func TryConnectEndpoints(service proxy.ServicePortName, srcAddr net.Addr, protocol string, loadBalancer LoadBalancer) (out net.Conn, err error)
TryConnectEndpoints attempts to connect to the next available endpoint for the given service, cycling through until it is able to successfully connect, or it has tried with all timeouts in EndpointDialTimeouts.
Types ¶
type ClientCache ¶ added in v1.6.0
Holds all the known UDP clients that have not timed out.
type LoadBalancer ¶
type LoadBalancer interface { // NextEndpoint returns the endpoint to handle a request for the given // service-port and source address. NextEndpoint(service proxy.ServicePortName, srcAddr net.Addr, sessionAffinityReset bool) (string, error) NewService(service proxy.ServicePortName, sessionAffinityType v1.ServiceAffinity, stickyMaxAgeSeconds int) error DeleteService(service proxy.ServicePortName) CleanupStaleStickySessions(service proxy.ServicePortName) ServiceHasEndpoints(service proxy.ServicePortName) bool proxyconfig.EndpointsHandler }
LoadBalancer is an interface for distributing incoming requests to service endpoints.
type LoadBalancerRR ¶
type LoadBalancerRR struct {
// contains filtered or unexported fields
}
LoadBalancerRR is a round-robin load balancer.
func NewLoadBalancerRR ¶
func NewLoadBalancerRR() *LoadBalancerRR
NewLoadBalancerRR returns a new LoadBalancerRR.
func (*LoadBalancerRR) CleanupStaleStickySessions ¶
func (lb *LoadBalancerRR) CleanupStaleStickySessions(svcPort proxy.ServicePortName)
func (*LoadBalancerRR) DeleteService ¶ added in v1.3.3
func (lb *LoadBalancerRR) DeleteService(svcPort proxy.ServicePortName)
func (*LoadBalancerRR) NewService ¶
func (lb *LoadBalancerRR) NewService(svcPort proxy.ServicePortName, affinityType v1.ServiceAffinity, ttlSeconds int) error
func (*LoadBalancerRR) NextEndpoint ¶
func (lb *LoadBalancerRR) NextEndpoint(svcPort proxy.ServicePortName, srcAddr net.Addr, sessionAffinityReset bool) (string, error)
NextEndpoint returns a service endpoint. The service endpoint is chosen using the round-robin algorithm.
func (*LoadBalancerRR) OnEndpointsAdd ¶ added in v1.7.0
func (lb *LoadBalancerRR) OnEndpointsAdd(endpoints *v1.Endpoints)
func (*LoadBalancerRR) OnEndpointsDelete ¶ added in v1.7.0
func (lb *LoadBalancerRR) OnEndpointsDelete(endpoints *v1.Endpoints)
func (*LoadBalancerRR) OnEndpointsSynced ¶ added in v1.7.0
func (lb *LoadBalancerRR) OnEndpointsSynced()
func (*LoadBalancerRR) OnEndpointsUpdate ¶
func (lb *LoadBalancerRR) OnEndpointsUpdate(oldEndpoints, endpoints *v1.Endpoints)
func (*LoadBalancerRR) ServiceHasEndpoints ¶ added in v1.6.0
func (lb *LoadBalancerRR) ServiceHasEndpoints(svcPort proxy.ServicePortName) bool
ServiceHasEndpoints checks whether a service entry has endpoints.
type PortAllocator ¶
type Proxier ¶
type Proxier struct { // EndpointSlice support has not been added for this proxier yet. config.NoopEndpointSliceHandler // TODO(imroc): implement node handler for userspace proxier. config.NoopNodeHandler // contains filtered or unexported fields }
Proxier is a simple proxy for TCP connections between a localhost:lport and services that provide the actual implementations.
func NewCustomProxier ¶ added in v1.6.0
func NewCustomProxier(loadBalancer LoadBalancer, listenIP net.IP, iptables iptables.Interface, exec utilexec.Interface, pr utilnet.PortRange, syncPeriod, minSyncPeriod, udpIdleTimeout time.Duration, nodePortAddresses []string, makeProxySocket ProxySocketFunc) (*Proxier, error)
NewCustomProxier functions similarly to NewProxier, returning a new Proxier for the given LoadBalancer and address. The new proxier is constructed using the ProxySocket constructor provided, however, instead of constructing the default ProxySockets.
func NewProxier ¶
func NewProxier(loadBalancer LoadBalancer, listenIP net.IP, iptables iptables.Interface, exec utilexec.Interface, pr utilnet.PortRange, syncPeriod, minSyncPeriod, udpIdleTimeout time.Duration, nodePortAddresses []string) (*Proxier, error)
NewProxier returns a new Proxier given a LoadBalancer and an address on which to listen. Because of the iptables logic, It is assumed that there is only a single Proxier active on a machine. An error will be returned if the proxier cannot be started due to an invalid ListenIP (loopback) or if iptables fails to update or acquire the initial lock. Once a proxier is created, it will keep iptables up to date in the background and will not terminate if a particular iptables call fails.
func (*Proxier) OnEndpointsAdd ¶ added in v1.15.0
OnEndpointsAdd is called whenever creation of new endpoints object is observed.
func (*Proxier) OnEndpointsDelete ¶ added in v1.15.0
OnEndpointsDelete is called whenever deletion of an existing endpoints object is observed.
func (*Proxier) OnEndpointsSynced ¶ added in v1.15.0
func (proxier *Proxier) OnEndpointsSynced()
OnEndpointsSynced is called once all the initial event handlers were called and the state is fully propagated to local cache.
func (*Proxier) OnEndpointsUpdate ¶ added in v1.15.0
OnEndpointsUpdate is called whenever modification of an existing endpoints object is observed.
func (*Proxier) OnServiceAdd ¶ added in v1.7.0
OnServiceAdd is called whenever creation of new service object is observed.
func (*Proxier) OnServiceDelete ¶ added in v1.7.0
OnServiceDelete is called whenever deletion of an existing service object is observed.
func (*Proxier) OnServiceSynced ¶ added in v1.7.0
func (proxier *Proxier) OnServiceSynced()
OnServiceSynced is called once all the initial event handlers were called and the state is fully propagated to local cache.
func (*Proxier) OnServiceUpdate ¶
OnServiceUpdate is called whenever modification of an existing service object is observed.
type ProxySocket ¶ added in v1.6.0
type ProxySocket interface { // Addr gets the net.Addr for a ProxySocket. Addr() net.Addr // Close stops the ProxySocket from accepting incoming connections. // Each implementation should comment on the impact of calling Close // while sessions are active. Close() error // ProxyLoop proxies incoming connections for the specified service to the service endpoints. ProxyLoop(service proxy.ServicePortName, info *ServiceInfo, loadBalancer LoadBalancer) // ListenPort returns the host port that the ProxySocket is listening on ListenPort() int }
Abstraction over TCP/UDP sockets which are proxied.
type ProxySocketFunc ¶ added in v1.6.0
ProxySocketFunc is a function which constructs a ProxySocket from a protocol, ip, and port
type ServiceInfo ¶ added in v1.6.0
type ServiceInfo struct { // Timeout is the read/write timeout (used for UDP connections) Timeout time.Duration // ActiveClients is the cache of active UDP clients being proxied by this proxy for this service ActiveClients *ClientCache // contains filtered or unexported fields }
ServiceInfo contains information and state for a particular proxied service
func (*ServiceInfo) IsAlive ¶ added in v1.6.0
func (info *ServiceInfo) IsAlive() bool
func (*ServiceInfo) IsFinished ¶ added in v1.20.0
func (info *ServiceInfo) IsFinished() bool
func (*ServiceInfo) IsStarted ¶ added in v1.20.0
func (info *ServiceInfo) IsStarted() bool