store

package
v1.17.0-pre.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2024 License: Apache-2.0 Imports: 14 Imported by: 6

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ServiceStorePrefix is the kvstore prefix of the shared store
	//
	// WARNING - STABLE API: Changing the structure or values of this will
	// break backwards compatibility
	ServiceStorePrefix = path.Join(kvstore.BaseKeyPrefix, "state", "services", "v1")
)

Functions

func ClusterIDValidator added in v1.16.0

func ClusterIDValidator(clusterID *uint32) clusterServiceValidator

ClusterIDValidator returns a validator enforcing that the cluster ID of the unmarshaled service matches the provided one. The access to the provided clusterID value is not synchronized, and it shall not be mutated concurrently.

func ClusterNameValidator added in v1.16.0

func ClusterNameValidator(clusterName string) clusterServiceValidator

ClusterNameValidator returns a validator enforcing that the cluster field of the unmarshaled service matches the provided one.

func JoinClusterServices

func JoinClusterServices(merger ServiceMerger, clusterName string)

JoinClusterServices starts a controller for syncing services from the kvstore

func KeyCreator added in v1.16.0

func KeyCreator(validators ...clusterServiceValidator) store.KeyCreator

KeyCreator returns a store.KeyCreator for ClusterServices, configuring the specified extra validators.

func NamespacedNameValidator added in v1.16.0

func NamespacedNameValidator() clusterServiceValidator

NamespacedNameValidator returns a validator enforcing that the namespaced name of the unmarshaled service matches the kvstore key.

Types

type ClusterService

type ClusterService struct {
	// Cluster is the cluster name the service is configured in
	Cluster string `json:"cluster"`

	// Namespace is the cluster namespace the service is configured in
	Namespace string `json:"namespace"`

	// Name is the name of the service. It must be unique within the
	// namespace of the cluster
	Name string `json:"name"`

	// Frontends is a map indexed by the frontend IP address
	Frontends map[string]PortConfiguration `json:"frontends"`

	// Backends is map indexed by the backend IP address
	Backends map[string]PortConfiguration `json:"backends"`

	// Hostnames is map indexed by the backend IP address
	Hostnames map[string]string `json:"hostnames"`

	// Labels are the labels of the service
	Labels map[string]string `json:"labels"`

	// Selector is the label selector used to select backends
	Selector map[string]string `json:"selector"`

	// IncludeExternal is true when external endpoints from other clusters
	// should be included
	IncludeExternal bool `json:"includeExternal"`

	// Shared is true when the service should be exposed/shared to other clusters
	Shared bool `json:"shared"`

	// ClusterID is the cluster ID the service is configured in
	ClusterID uint32 `json:"clusterID"`
}

ClusterService is the definition of a service in a cluster

WARNING - STABLE API: Any change to this structure must be done in a backwards compatible way.

+k8s:deepcopy-gen=true

func NewClusterService

func NewClusterService(name, namespace string) ClusterService

NewClusterService returns a new cluster service definition

func (*ClusterService) DeepCopy

func (in *ClusterService) DeepCopy() *ClusterService

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterService.

func (*ClusterService) DeepCopyInto

func (in *ClusterService) DeepCopyInto(out *ClusterService)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ClusterService) DeepKeyCopy

func (s *ClusterService) DeepKeyCopy() store.LocalKey

DeepKeyCopy creates a deep copy of the LocalKey

func (*ClusterService) GetKeyName

func (s *ClusterService) GetKeyName() string

GetKeyName returns the kvstore key to be used for the global service

func (*ClusterService) Marshal

func (s *ClusterService) Marshal() ([]byte, error)

Marshal returns the global service object as JSON byte slice

func (*ClusterService) NamespaceServiceName

func (s *ClusterService) NamespaceServiceName() types.NamespacedName

NamespaceServiceName returns the namespace and service name

func (*ClusterService) String

func (s *ClusterService) String() string

func (*ClusterService) Unmarshal

func (s *ClusterService) Unmarshal(_ string, data []byte) error

Unmarshal parses the JSON byte slice and updates the global service receiver

type PortConfiguration

type PortConfiguration map[string]*loadbalancer.L4Addr

PortConfiguration is the L4 port configuration of a frontend or backend. The map is indexed by the name of the port and the value constains the L4 port and protocol.

+deepequal-gen=true

func (*PortConfiguration) DeepEqual

func (in *PortConfiguration) DeepEqual(other *PortConfiguration) bool

DeepEqual is an autogenerated deepequal function, deeply comparing the receiver with other. in must be non-nil.

type ServiceMerger

type ServiceMerger interface {
	MergeClusterServiceUpdate(service *ClusterService, swg *lock.StoppableWaitGroup)
	MergeClusterServiceDelete(service *ClusterService, swg *lock.StoppableWaitGroup)
}

ServiceMerger is the interface to be implemented by the owner of local services. The functions have to merge service updates and deletions with local services to provide a shared view.

type ValidatingClusterService added in v1.16.0

type ValidatingClusterService struct {
	ClusterService
	// contains filtered or unexported fields
}

ValidatingClusterService wraps a ClusterService to perform additional validation at unmarshal time.

func (*ValidatingClusterService) Unmarshal added in v1.16.0

func (vcs *ValidatingClusterService) Unmarshal(key string, data []byte) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL