Documentation ¶
Index ¶
- Constants
- func AcquireBackendID(l3n4Addr loadbalancer.L3n4Addr) (loadbalancer.BackendID, error)
- func AcquireID(l3n4Addr loadbalancer.L3n4Addr, baseID uint32) (*loadbalancer.L3n4AddrID, error)
- func DeleteBackendID(id loadbalancer.BackendID)
- func DeleteID(id uint32) error
- func GetID(id uint32) (*loadbalancer.L3n4AddrID, error)
- func LookupBackendID(l3n4Addr loadbalancer.L3n4Addr) (loadbalancer.BackendID, error)
- func NewErrLocalRedirectServiceExists(frontend lb.L3n4AddrID, name lb.ServiceName) error
- func RestoreBackendID(l3n4Addr loadbalancer.L3n4Addr, id loadbalancer.BackendID) error
- func RestoreID(l3n4Addr loadbalancer.L3n4Addr, baseID uint32) (*loadbalancer.L3n4AddrID, error)
- type ErrLocalRedirectServiceExists
- type IDAllocator
- type L7LBInfo
- type NodeMetaCollector
- type Service
- func (s *Service) DeleteService(frontend lb.L3n4Addr) (bool, error)
- func (s *Service) DeleteServiceByID(id lb.ServiceID) (bool, error)
- func (s *Service) GetCurrentTs() time.Time
- func (s *Service) GetDeepCopyServiceByFrontend(frontend lb.L3n4Addr) (*lb.SVC, bool)
- func (s *Service) GetDeepCopyServiceByID(id lb.ServiceID) (*lb.SVC, bool)
- func (s *Service) GetDeepCopyServices() []*lb.SVC
- func (s *Service) GetDeepCopyServicesByName(name, namespace string) (svcs []*lb.SVC)
- func (s *Service) GetLastUpdatedTs() time.Time
- func (s *Service) GetServiceNameByAddr(addr lb.L3n4Addr) (string, string, bool)
- func (s *Service) InitMaps(ipv6, ipv4, sockMaps, restore bool) error
- func (s *Service) RegisterL7LBService(serviceName, resourceName lb.ServiceName, ports []string, proxyPort uint16) error
- func (s *Service) RegisterL7LBServiceBackendSync(serviceName, resourceName lb.ServiceName, ports []string) error
- func (s *Service) RemoveL7LBService(serviceName, resourceName lb.ServiceName) error
- func (s *Service) RestoreServices() error
- func (s *Service) SyncServicesOnDeviceChange(nodeAddressing types.NodeAddressing)
- func (s *Service) SyncWithK8sFinished(ensurer func(k8s.ServiceID, *lock.StoppableWaitGroup) bool) error
- func (s *Service) UpdateBackendsState(backends []*lb.Backend) error
- func (s *Service) UpsertService(params *lb.SVC) (bool, lb.ID, error)
Constants ¶
const ( // FirstFreeServiceID is the first ID for which the services should be assigned. FirstFreeServiceID = uint32(1) // MaxSetOfServiceID is maximum number of set of service IDs that can be stored // in the kvstore or the local ID allocator. MaxSetOfServiceID = uint32(0xFFFF) // FirstFreeBackendID is the first ID for which the backend should be assigned. // BPF datapath assumes that backend_id cannot be 0. FirstFreeBackendID = uint32(1) // MaxSetOfBackendID is maximum number of set of backendIDs IDs that can be // stored in the local ID allocator. MaxSetOfBackendID = uint32(0xFFFFFFFF) )
Variables ¶
This section is empty.
Functions ¶
func AcquireBackendID ¶
func AcquireBackendID(l3n4Addr loadbalancer.L3n4Addr) (loadbalancer.BackendID, error)
AcquireBackendID acquires a new local ID for the given backend.
func AcquireID ¶
func AcquireID(l3n4Addr loadbalancer.L3n4Addr, baseID uint32) (*loadbalancer.L3n4AddrID, error)
AcquireID acquires a service ID
func DeleteBackendID ¶
func DeleteBackendID(id loadbalancer.BackendID)
DeleteBackendID releases the given backend ID. TODO(brb) maybe provide l3n4Addr as an arg for the extra safety.
func GetID ¶
func GetID(id uint32) (*loadbalancer.L3n4AddrID, error)
GetID returns the L3n4AddrID that belongs to the given id.
func LookupBackendID ¶
func LookupBackendID(l3n4Addr loadbalancer.L3n4Addr) (loadbalancer.BackendID, error)
LookupBackendID looks up already allocated backend ID for the given backend addr. If such cannot be found, returns an error.
func NewErrLocalRedirectServiceExists ¶
func NewErrLocalRedirectServiceExists(frontend lb.L3n4AddrID, name lb.ServiceName) error
NewErrLocalRedirectServiceExists returns a new ErrLocalRedirectServiceExists
func RestoreBackendID ¶
func RestoreBackendID(l3n4Addr loadbalancer.L3n4Addr, id loadbalancer.BackendID) error
RestoreBackendID tries to restore the given local ID for the given backend.
If ID cannot be restored (ID already taken), returns an error.
func RestoreID ¶
func RestoreID(l3n4Addr loadbalancer.L3n4Addr, baseID uint32) (*loadbalancer.L3n4AddrID, error)
RestoreID restores previously used service ID
Types ¶
type ErrLocalRedirectServiceExists ¶
type ErrLocalRedirectServiceExists struct {
// contains filtered or unexported fields
}
ErrLocalRedirectServiceExists represents an error when a Local redirect service exists with the same Frontend.
func (ErrLocalRedirectServiceExists) Error ¶
func (e ErrLocalRedirectServiceExists) Error() string
func (*ErrLocalRedirectServiceExists) Is ¶
func (e *ErrLocalRedirectServiceExists) Is(target error) bool
type IDAllocator ¶
type IDAllocator struct { // Protects entitiesID, entities, nextID and maxID lock.RWMutex // contains filtered or unexported fields }
IDAllocator contains an internal state of the ID allocator.
func NewIDAllocator ¶
func NewIDAllocator(nextID uint32, maxID uint32) *IDAllocator
NewIDAllocator creates a new ID allocator instance.
type Service ¶
Service is a service handler. Its main responsibility is to reflect service-related changes into BPF maps used by datapath BPF programs. The changes can be triggered either by k8s_watcher or directly by API calls to the /services endpoint.
func NewService ¶
func NewService(monitorNotify monitorNotify, envoyCache envoyCache, lbmap datapathTypes.LBMap) *Service
NewService creates a new instance of the service handler.
func (*Service) DeleteService ¶
DeleteService removes the given service.
func (*Service) DeleteServiceByID ¶
DeleteServiceByID removes a service identified by the given ID.
func (*Service) GetCurrentTs ¶
func (*Service) GetDeepCopyServiceByFrontend ¶
GetDeepCopyServiceByFrontend returns a deep-copy of the service that matches the Frontend address.
func (*Service) GetDeepCopyServiceByID ¶
GetDeepCopyServiceByID returns a deep-copy of a service identified with the given ID.
If a service cannot be found, returns false.
func (*Service) GetDeepCopyServices ¶
GetDeepCopyServices returns a deep-copy of all installed services.
func (*Service) GetDeepCopyServicesByName ¶
GetDeepCopyServicesByName returns a deep-copy all matching services.
func (*Service) GetLastUpdatedTs ¶
func (*Service) GetServiceNameByAddr ¶
GetServiceNameByAddr returns namespace and name of the service with a given L3n4Addr. The third return value is set to true if and only if the service is found in the map.
func (*Service) InitMaps ¶
InitMaps opens or creates BPF maps used by services.
If restore is set to false, entries of the maps are removed.
func (*Service) RegisterL7LBService ¶
func (s *Service) RegisterL7LBService(serviceName, resourceName lb.ServiceName, ports []string, proxyPort uint16) error
RegisterL7LBService makes the given service to be locally forwarded to the given proxy port.
func (*Service) RegisterL7LBServiceBackendSync ¶
func (s *Service) RegisterL7LBServiceBackendSync(serviceName, resourceName lb.ServiceName, ports []string) error
RegisterL7LBServiceBackendSync synchronizes the backends of a service to Envoy.
func (*Service) RemoveL7LBService ¶
func (s *Service) RemoveL7LBService(serviceName, resourceName lb.ServiceName) error
func (*Service) RestoreServices ¶
RestoreServices restores services from BPF maps.
It first restores all the service entries, followed by backend entries. In the process, it deletes any duplicate backend entries that were leaked, and are not referenced by any service entries.
The method should be called once before establishing a connectivity to kube-apiserver.
func (*Service) SyncServicesOnDeviceChange ¶
func (s *Service) SyncServicesOnDeviceChange(nodeAddressing types.NodeAddressing)
SyncServicesOnDeviceChange finds and adds missing load-balancing entries for new devices.
func (*Service) SyncWithK8sFinished ¶
func (s *Service) SyncWithK8sFinished(ensurer func(k8s.ServiceID, *lock.StoppableWaitGroup) bool) error
SyncWithK8sFinished removes services which we haven't heard about during a sync period of cilium-agent's k8s service cache.
The removal is based on an assumption that during the sync period UpsertService() is going to be called for each alive service.
func (*Service) UpdateBackendsState ¶
UpdateBackendsState updates all the service(s) with the updated state of the given backends. It also persists the updated backend states to the BPF maps.
Backend state transitions are validated before processing.
In case of duplicated backends in the list, the state will be updated to the last duplicate entry.