 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Overview ¶
Package proxy implements the layer-3 network proxy.
Index ¶
- type BaseEndpointInfo
- func (info *BaseEndpointInfo) Equal(other Endpoint) bool
- func (info *BaseEndpointInfo) GetIsLocal() bool
- func (info *BaseEndpointInfo) GetTopology() map[string]string
- func (info *BaseEndpointInfo) GetZoneHints() sets.String
- func (info *BaseEndpointInfo) IP() string
- func (info *BaseEndpointInfo) IsReady() bool
- func (info *BaseEndpointInfo) IsServing() bool
- func (info *BaseEndpointInfo) IsTerminating() bool
- func (info *BaseEndpointInfo) Port() (int, error)
- func (info *BaseEndpointInfo) String() string
 
- type BaseServiceInfo
- func (info *BaseServiceInfo) ClusterIP() net.IP
- func (info *BaseServiceInfo) ExternalIPStrings() []string
- func (info *BaseServiceInfo) HealthCheckNodePort() int
- func (info *BaseServiceInfo) HintsAnnotation() string
- func (info *BaseServiceInfo) InternalTrafficPolicy() *v1.ServiceInternalTrafficPolicyType
- func (info *BaseServiceInfo) LoadBalancerIPStrings() []string
- func (info *BaseServiceInfo) LoadBalancerSourceRanges() []string
- func (info *BaseServiceInfo) NodeLocalExternal() bool
- func (info *BaseServiceInfo) NodeLocalInternal() bool
- func (info *BaseServiceInfo) NodePort() int
- func (info *BaseServiceInfo) Port() int
- func (info *BaseServiceInfo) Protocol() v1.Protocol
- func (info *BaseServiceInfo) SessionAffinityType() v1.ServiceAffinity
- func (info *BaseServiceInfo) StickyMaxAgeSeconds() int
- func (info *BaseServiceInfo) String() string
- func (info *BaseServiceInfo) TopologyKeys() []string
 
- type Endpoint
- type EndpointChangeTracker
- type EndpointSliceCache
- type EndpointsMap
- type Provider
- type ServiceChangeTracker
- type ServiceEndpoint
- type ServiceMap
- type ServicePort
- type ServicePortName
- type UpdateEndpointMapResult
- type UpdateServiceMapResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BaseEndpointInfo ¶ added in v1.10.0
type BaseEndpointInfo struct {
	Endpoint string // TODO: should be an endpointString type
	// IsLocal indicates whether the endpoint is running in same host as kube-proxy.
	IsLocal  bool
	Topology map[string]string
	// ZoneHints represent the zone hints for the endpoint. This is based on
	// endpoint.hints.forZones[*].name in the EndpointSlice API.
	ZoneHints sets.String
	// Ready indicates whether this endpoint is ready and NOT terminating.
	// For pods, this is true if a pod has a ready status and a nil deletion timestamp.
	// This is only set when watching EndpointSlices. If using Endpoints, this is always
	// true since only ready endpoints are read from Endpoints.
	// TODO: Ready can be inferred from Serving and Terminating below when enabled by default.
	Ready bool
	// Serving indiciates whether this endpoint is ready regardless of its terminating state.
	// For pods this is true if it has a ready status regardless of its deletion timestamp.
	// This is only set when watching EndpointSlices. If using Endpoints, this is always
	// true since only ready endpoints are read from Endpoints.
	Serving bool
	// Terminating indicates whether this endpoint is terminating.
	// For pods this is true if it has a non-nil deletion timestamp.
	// This is only set when watching EndpointSlices. If using Endpoints, this is always
	// false since terminating endpoints are always excluded from Endpoints.
	Terminating bool
}
    BaseEndpointInfo contains base information that defines an endpoint. This could be used directly by proxier while processing endpoints, or can be used for constructing a more specific EndpointInfo struct defined by the proxier if needed.
func (*BaseEndpointInfo) Equal ¶ added in v1.10.0
func (info *BaseEndpointInfo) Equal(other Endpoint) bool
Equal is part of proxy.Endpoint interface.
func (*BaseEndpointInfo) GetIsLocal ¶ added in v1.10.0
func (info *BaseEndpointInfo) GetIsLocal() bool
GetIsLocal is part of proxy.Endpoint interface.
func (*BaseEndpointInfo) GetTopology ¶ added in v1.17.0
func (info *BaseEndpointInfo) GetTopology() map[string]string
GetTopology returns the topology information of the endpoint.
func (*BaseEndpointInfo) GetZoneHints ¶ added in v1.21.0
func (info *BaseEndpointInfo) GetZoneHints() sets.String
GetZoneHints returns the zone hint for the endpoint.
func (*BaseEndpointInfo) IP ¶ added in v1.10.0
func (info *BaseEndpointInfo) IP() string
IP returns just the IP part of the endpoint, it's a part of proxy.Endpoint interface.
func (*BaseEndpointInfo) IsReady ¶ added in v1.21.0
func (info *BaseEndpointInfo) IsReady() bool
IsReady returns true if an endpoint is ready and not terminating.
func (*BaseEndpointInfo) IsServing ¶ added in v1.21.0
func (info *BaseEndpointInfo) IsServing() bool
IsServing returns true if an endpoint is ready, regardless of if the endpoint is terminating.
func (*BaseEndpointInfo) IsTerminating ¶ added in v1.21.0
func (info *BaseEndpointInfo) IsTerminating() bool
IsTerminating retruns true if an endpoint is terminating. For pods, that is any pod with a deletion timestamp.
func (*BaseEndpointInfo) Port ¶ added in v1.10.0
func (info *BaseEndpointInfo) Port() (int, error)
Port returns just the Port part of the endpoint.
func (*BaseEndpointInfo) String ¶ added in v1.10.0
func (info *BaseEndpointInfo) String() string
String is part of proxy.Endpoint interface.
type BaseServiceInfo ¶ added in v1.10.0
type BaseServiceInfo struct {
	// contains filtered or unexported fields
}
    BaseServiceInfo contains base information that defines a service. This could be used directly by proxier while processing services, or can be used for constructing a more specific ServiceInfo struct defined by the proxier if needed.
func (*BaseServiceInfo) ClusterIP ¶ added in v1.10.0
func (info *BaseServiceInfo) ClusterIP() net.IP
ClusterIP is part of ServicePort interface.
func (*BaseServiceInfo) ExternalIPStrings ¶ added in v1.13.11
func (info *BaseServiceInfo) ExternalIPStrings() []string
ExternalIPStrings is part of ServicePort interface.
func (*BaseServiceInfo) HealthCheckNodePort ¶ added in v1.10.0
func (info *BaseServiceInfo) HealthCheckNodePort() int
HealthCheckNodePort is part of ServicePort interface.
func (*BaseServiceInfo) HintsAnnotation ¶ added in v1.21.0
func (info *BaseServiceInfo) HintsAnnotation() string
HintsAnnotation is part of ServicePort interface.
func (*BaseServiceInfo) InternalTrafficPolicy ¶ added in v1.21.0
func (info *BaseServiceInfo) InternalTrafficPolicy() *v1.ServiceInternalTrafficPolicyType
InternalTrafficPolicy is part of ServicePort interface
func (*BaseServiceInfo) LoadBalancerIPStrings ¶ added in v1.13.11
func (info *BaseServiceInfo) LoadBalancerIPStrings() []string
LoadBalancerIPStrings is part of ServicePort interface.
func (*BaseServiceInfo) LoadBalancerSourceRanges ¶ added in v1.10.0
func (info *BaseServiceInfo) LoadBalancerSourceRanges() []string
LoadBalancerSourceRanges is part of ServicePort interface
func (*BaseServiceInfo) NodeLocalExternal ¶ added in v1.21.0
func (info *BaseServiceInfo) NodeLocalExternal() bool
NodeLocalExternal is part of ServicePort interface.
func (*BaseServiceInfo) NodeLocalInternal ¶ added in v1.21.0
func (info *BaseServiceInfo) NodeLocalInternal() bool
NodeLocalInternal is part of ServicePort interface
func (*BaseServiceInfo) NodePort ¶ added in v1.10.0
func (info *BaseServiceInfo) NodePort() int
NodePort is part of the ServicePort interface.
func (*BaseServiceInfo) Port ¶ added in v1.10.0
func (info *BaseServiceInfo) Port() int
Port is part of ServicePort interface.
func (*BaseServiceInfo) Protocol ¶ added in v1.10.0
func (info *BaseServiceInfo) Protocol() v1.Protocol
Protocol is part of ServicePort interface.
func (*BaseServiceInfo) SessionAffinityType ¶ added in v1.10.0
func (info *BaseServiceInfo) SessionAffinityType() v1.ServiceAffinity
SessionAffinityType is part of the ServicePort interface.
func (*BaseServiceInfo) StickyMaxAgeSeconds ¶ added in v1.10.0
func (info *BaseServiceInfo) StickyMaxAgeSeconds() int
StickyMaxAgeSeconds is part of the ServicePort interface
func (*BaseServiceInfo) String ¶ added in v1.10.0
func (info *BaseServiceInfo) String() string
String is part of ServicePort interface.
func (*BaseServiceInfo) TopologyKeys ¶ added in v1.17.0
func (info *BaseServiceInfo) TopologyKeys() []string
TopologyKeys is part of ServicePort interface.
type Endpoint ¶ added in v1.10.0
type Endpoint interface {
	// String returns endpoint string.  An example format can be: `IP:Port`.
	// We take the returned value as ServiceEndpoint.Endpoint.
	String() string
	// GetIsLocal returns true if the endpoint is running in same host as kube-proxy, otherwise returns false.
	GetIsLocal() bool
	// IsReady returns true if an endpoint is ready and not terminating.
	// This is only set when watching EndpointSlices. If using Endpoints, this is always
	// true since only ready endpoints are read from Endpoints.
	IsReady() bool
	// IsServing returns true if an endpoint is ready. It does not account
	// for terminating state.
	// This is only set when watching EndpointSlices. If using Endpoints, this is always
	// true since only ready endpoints are read from Endpoints.
	IsServing() bool
	// IsTerminating retruns true if an endpoint is terminating. For pods,
	// that is any pod with a deletion timestamp.
	// This is only set when watching EndpointSlices. If using Endpoints, this is always
	// false since terminating endpoints are always excluded from Endpoints.
	IsTerminating() bool
	// GetTopology returns the topology information of the endpoint.
	GetTopology() map[string]string
	// GetZoneHint returns the zone hint for the endpoint. This is based on
	// endpoint.hints.forZones[0].name in the EndpointSlice API.
	GetZoneHints() sets.String
	// IP returns IP part of the endpoint.
	IP() string
	// Port returns the Port part of the endpoint.
	Port() (int, error)
	// Equal checks if two endpoints are equal.
	Equal(Endpoint) bool
}
    Endpoint in an interface which abstracts information about an endpoint. TODO: Rename functions to be consistent with ServicePort.
func FilterEndpoints ¶ added in v1.21.0
func FilterEndpoints(endpoints []Endpoint, svcInfo ServicePort, nodeLabels map[string]string) []Endpoint
FilterEndpoints filters endpoints based on Service configuration, node labels, and enabled feature gates. This is primarily used to enable topology aware routing.
type EndpointChangeTracker ¶ added in v1.10.0
type EndpointChangeTracker struct {
	// contains filtered or unexported fields
}
    EndpointChangeTracker carries state about uncommitted changes to an arbitrary number of Endpoints, keyed by their namespace and name.
func NewEndpointChangeTracker ¶ added in v1.10.0
func NewEndpointChangeTracker(hostname string, makeEndpointInfo makeEndpointFunc, ipFamily v1.IPFamily, recorder record.EventRecorder, endpointSlicesEnabled bool, processEndpointsMapChange processEndpointsMapChangeFunc) *EndpointChangeTracker
NewEndpointChangeTracker initializes an EndpointsChangeMap
func (*EndpointChangeTracker) EndpointSliceUpdate ¶ added in v1.16.0
func (ect *EndpointChangeTracker) EndpointSliceUpdate(endpointSlice *discovery.EndpointSlice, removeSlice bool) bool
EndpointSliceUpdate updates given service's endpoints change map based on the <previous, current> endpoints pair. It returns true if items changed, otherwise return false. Will add/update/delete items of EndpointsChangeMap. If removeSlice is true, slice will be removed, otherwise it will be added or updated.
func (*EndpointChangeTracker) Update ¶ added in v1.10.0
func (ect *EndpointChangeTracker) Update(previous, current *v1.Endpoints) bool
Update updates given service's endpoints change map based on the <previous, current> endpoints pair. It returns true if items changed, otherwise return false. Update can be used to add/update/delete items of EndpointsChangeMap. For example, Add item
- pass <nil, endpoints> as the <previous, current> pair.
Update item
- pass <oldEndpoints, endpoints> as the <previous, current> pair.
Delete item
- pass <endpoints, nil> as the <previous, current> pair.
type EndpointSliceCache ¶ added in v1.16.0
type EndpointSliceCache struct {
	// contains filtered or unexported fields
}
    EndpointSliceCache is used as a cache of EndpointSlice information.
func NewEndpointSliceCache ¶ added in v1.16.0
func NewEndpointSliceCache(hostname string, ipFamily v1.IPFamily, recorder record.EventRecorder, makeEndpointInfo makeEndpointFunc) *EndpointSliceCache
NewEndpointSliceCache initializes an EndpointSliceCache.
type EndpointsMap ¶ added in v1.10.0
type EndpointsMap map[ServicePortName][]Endpoint
EndpointsMap maps a service name to a list of all its Endpoints.
func (EndpointsMap) Update ¶ added in v1.15.0
func (em EndpointsMap) Update(changes *EndpointChangeTracker) (result UpdateEndpointMapResult)
Update updates endpointsMap base on the given changes.
type Provider ¶ added in v1.16.0
type Provider interface {
	config.EndpointsHandler
	config.EndpointSliceHandler
	config.ServiceHandler
	config.NodeHandler
	// Sync immediately synchronizes the Provider's current state to proxy rules.
	Sync()
	// SyncLoop runs periodic work.
	// This is expected to run as a goroutine or as the main loop of the app.
	// It does not return.
	SyncLoop()
}
    Provider is the interface provided by proxier implementations.
type ServiceChangeTracker ¶ added in v1.10.0
type ServiceChangeTracker struct {
	// contains filtered or unexported fields
}
    ServiceChangeTracker carries state about uncommitted changes to an arbitrary number of Services, keyed by their namespace and name.
func NewServiceChangeTracker ¶ added in v1.10.0
func NewServiceChangeTracker(makeServiceInfo makeServicePortFunc, ipFamily v1.IPFamily, recorder record.EventRecorder, processServiceMapChange processServiceMapChangeFunc) *ServiceChangeTracker
NewServiceChangeTracker initializes a ServiceChangeTracker
func (*ServiceChangeTracker) Update ¶ added in v1.10.0
func (sct *ServiceChangeTracker) Update(previous, current *v1.Service) bool
Update updates given service's change map based on the <previous, current> service pair. It returns true if items changed, otherwise return false. Update can be used to add/update/delete items of ServiceChangeMap. For example, Add item
- pass <nil, service> as the <previous, current> pair.
Update item
- pass <oldService, service> as the <previous, current> pair.
Delete item
- pass <service, nil> as the <previous, current> pair.
type ServiceEndpoint ¶ added in v1.10.0
type ServiceEndpoint struct {
	Endpoint        string
	ServicePortName ServicePortName
}
    ServiceEndpoint is used to identify a service and one of its endpoint pair.
type ServiceMap ¶ added in v1.10.0
type ServiceMap map[ServicePortName]ServicePort
ServiceMap maps a service to its ServicePort.
func (ServiceMap) Update ¶ added in v1.21.0
func (sm ServiceMap) Update(changes *ServiceChangeTracker) (result UpdateServiceMapResult)
Update updates ServiceMap base on the given changes.
type ServicePort ¶ added in v1.10.0
type ServicePort interface {
	// String returns service string.  An example format can be: `IP:Port/Protocol`.
	String() string
	// GetClusterIP returns service cluster IP in net.IP format.
	ClusterIP() net.IP
	// GetPort returns service port if present. If return 0 means not present.
	Port() int
	// GetSessionAffinityType returns service session affinity type
	SessionAffinityType() v1.ServiceAffinity
	// GetStickyMaxAgeSeconds returns service max connection age
	StickyMaxAgeSeconds() int
	// ExternalIPStrings returns service ExternalIPs as a string array.
	ExternalIPStrings() []string
	// LoadBalancerIPStrings returns service LoadBalancerIPs as a string array.
	LoadBalancerIPStrings() []string
	// GetProtocol returns service protocol.
	Protocol() v1.Protocol
	// LoadBalancerSourceRanges returns service LoadBalancerSourceRanges if present empty array if not
	LoadBalancerSourceRanges() []string
	// GetHealthCheckNodePort returns service health check node port if present.  If return 0, it means not present.
	HealthCheckNodePort() int
	// GetNodePort returns a service Node port if present. If return 0, it means not present.
	NodePort() int
	// NodeLocalExternal returns if a service has only node local endpoints for external traffic.
	NodeLocalExternal() bool
	// NodeLocalInternal returns if a service has only node local endpoints for internal traffic.
	NodeLocalInternal() bool
	// InternalTrafficPolicy returns service InternalTrafficPolicy
	InternalTrafficPolicy() *v1.ServiceInternalTrafficPolicyType
	// TopologyKeys returns service TopologyKeys as a string array.
	TopologyKeys() []string
	// HintsAnnotation returns the value of the v1.AnnotationTopologyAwareHints annotation.
	HintsAnnotation() string
}
    ServicePort is an interface which abstracts information about a service.
type ServicePortName ¶ added in v0.15.0
type ServicePortName struct {
	types.NamespacedName
	Port     string
	Protocol v1.Protocol
}
    ServicePortName carries a namespace + name + portname. This is the unique identifier for a load-balanced service.
func (ServicePortName) String ¶ added in v0.15.0
func (spn ServicePortName) String() string
type UpdateEndpointMapResult ¶ added in v1.10.0
type UpdateEndpointMapResult struct {
	// HCEndpointsLocalIPSize maps an endpoints name to the length of its local IPs.
	HCEndpointsLocalIPSize map[types.NamespacedName]int
	// StaleEndpoints identifies if an endpoints service pair is stale.
	StaleEndpoints []ServiceEndpoint
	// StaleServiceNames identifies if a service is stale.
	StaleServiceNames []ServicePortName
	// List of the trigger times for all endpoints objects that changed. It's used to export the
	// network programming latency.
	// NOTE(oxddr): this can be simplified to []time.Time if memory consumption becomes an issue.
	LastChangeTriggerTimes map[types.NamespacedName][]time.Time
}
    UpdateEndpointMapResult is the updated results after applying endpoints changes.
type UpdateServiceMapResult ¶ added in v1.10.0
type UpdateServiceMapResult struct {
	// HCServiceNodePorts is a map of Service names to node port numbers which indicate the health of that Service on this Node.
	// The value(uint16) of HCServices map is the service health check node port.
	HCServiceNodePorts map[types.NamespacedName]uint16
	// UDPStaleClusterIP holds stale (no longer assigned to a Service) Service IPs that had UDP ports.
	// Callers can use this to abort timeout-waits or clear connection-tracking information.
	UDPStaleClusterIP sets.String
}
    UpdateServiceMapResult is the updated results after applying service changes.
       Source Files
      ¶
      Source Files
      ¶
    
  
       Directories
      ¶
      Directories
      ¶
    
    | Path | Synopsis | 
|---|---|
| Package config provides decoupling between various configuration sources (etcd, files,...) and the pieces that actually care about them (loadbalancer, proxy). | Package config provides decoupling between various configuration sources (etcd, files,...) and the pieces that actually care about them (loadbalancer, proxy). | 
| Package healthcheck provides tools for serving kube-proxy healthchecks. | Package healthcheck provides tools for serving kube-proxy healthchecks. |