Documentation

Overview

Package kube implements the shared and reusable library for Kubernetes

Index

Constants

View Source
const (
	// NodeRegionLabel is the well-known label for kubernetes node region
	NodeRegionLabel = "failure-domain.beta.kubernetes.io/region"
	// NodeZoneLabel is the well-known label for kubernetes node zone
	NodeZoneLabel = "failure-domain.beta.kubernetes.io/zone"
	// IstioNamespace used by default for Istio cluster-wide installation
	IstioNamespace = "istio-system"
	// IstioConfigMap is used by default
	IstioConfigMap = "istio"
	// PrometheusScrape is the annotation used by prometheus to determine if service metrics should be scraped (collected)
	PrometheusScrape = "prometheus.io/scrape"
	// PrometheusPort is the annotation used to explicitly specify the port to use for scraping metrics
	PrometheusPort = "prometheus.io/port"
	// PrometheusPath is the annotation used to specify a path for scraping metrics. Default is "/metrics"
	PrometheusPath = "prometheus.io/path"
	// PrometheusPathDefault is the default value for the PrometheusPath annotation
	PrometheusPathDefault = "/metrics"
)
View Source
const (
	// IngressClassAnnotation is the annotation on ingress resources for the class of controllers
	// responsible for it
	IngressClassAnnotation = "kubernetes.io/ingress.class"

	// KubeServiceAccountsOnVMAnnotation is to specify the K8s service accounts that are allowed to run
	// this service on the VMs
	KubeServiceAccountsOnVMAnnotation = "alpha.istio.io/kubernetes-serviceaccounts"

	// CanonicalServiceAccountsAnnotation is to specify the non-Kubernetes service accounts that
	// are allowed to run this service.
	CanonicalServiceAccountsAnnotation = "alpha.istio.io/canonical-serviceaccounts"

	// ServiceExportAnnotation specifies the namespaces to which this service should be exported to.
	//   "*" which is the default, indicates it is reachable within the mesh
	//   "." indicates it is reachable within its namespace
	ServiceExportAnnotation = "networking.istio.io/exportTo"
)

Variables

This section is empty.

Functions

func ConvertProtocol

func ConvertProtocol(name string, proto v1.Protocol) model.Protocol

ConvertProtocol from k8s protocol and port name

func CreateInterface

func CreateInterface(kubeconfig string) (kubernetes.Interface, error)

CreateInterface is a helper function to create Kubernetes interface from kubeconfig file

func CreateInterfaceFromClusterConfig

func CreateInterfaceFromClusterConfig(clusterConfig *clientcmdapi.Config) (kubernetes.Interface, error)

CreateInterfaceFromClusterConfig is a helper function to create Kubernetes interface from in memory cluster config struct

func DeRegisterEndpoint

func DeRegisterEndpoint(client kubernetes.Interface, namespace string, svcName string,
	ip string) error

DeRegisterEndpoint removes the endpoint (and the service if it already exists) from Kubernetes. It creates or updates as needed.

func FindPort

func FindPort(pod *v1.Pod, svcPort *v1.ServicePort) (int, error)

Forked from Kubernetes k8s.io/kubernetes/pkg/api/v1/pod FindPort locates the container port for the given pod and portName. If the targetPort is a number, use that. If the targetPort is a string, look that string up in all named ports in all containers in the target pod. If no match is found, fail.

func KeyFunc

func KeyFunc(name, namespace string) string

KeyFunc is the internal API key function that returns "namespace"/"name" or "name" if "namespace" is empty

func RegisterEndpoint

func RegisterEndpoint(client kubernetes.Interface, namespace string, svcName string,
	ip string, portsList []NamedPort, labels []string, annotations []string) error

RegisterEndpoint registers the endpoint (and the service if it doesn't already exists). It creates or updates as needed. When creating it adds the optional labels.

Types

type ChainHandler

type ChainHandler struct {
	// contains filtered or unexported fields
}

ChainHandler applies handlers in a sequence

func (*ChainHandler) Append

func (ch *ChainHandler) Append(h Handler)

Append a handler as the last handler in the chain

func (*ChainHandler) Apply

func (ch *ChainHandler) Apply(obj interface{}, event model.Event) error

Apply is the handler function

type Controller

type Controller struct {

	// Env is set by server to point to the environment, to allow the controller to
	// use env data and push status. It may be null in tests.
	Env *model.Environment

	// ClusterID identifies the remote cluster in a multicluster env.
	ClusterID string

	// XDSUpdater will push EDS changes to the ADS model.
	XDSUpdater model.XDSUpdater

	sync.RWMutex
	// contains filtered or unexported fields
}

Controller is a collection of synchronized resource watchers Caches are thread-safe

func NewController

NewController creates a new Kubernetes controller Created by bootstrap and multicluster (see secretcontroler).

func (*Controller) AppendInstanceHandler

func (c *Controller) AppendInstanceHandler(f func(*model.ServiceInstance, model.Event)) error

AppendInstanceHandler implements a service catalog operation

func (*Controller) AppendServiceHandler

func (c *Controller) AppendServiceHandler(f func(*model.Service, model.Event)) error

AppendServiceHandler implements a service catalog operation

func (*Controller) GetIstioServiceAccounts

func (c *Controller) GetIstioServiceAccounts(hostname model.Hostname, ports []int) []string

GetIstioServiceAccounts returns the Istio service accounts running a serivce hostname. Each service account is encoded according to the SPIFFE VSID spec. For example, a service account named "bar" in namespace "foo" is encoded as "spiffe://cluster.local/ns/foo/sa/bar".

func (*Controller) GetPodLocality

func (c *Controller) GetPodLocality(pod *v1.Pod) string

GetPodLocality retrieves the locality for a pod.

func (*Controller) GetProxyServiceInstances

func (c *Controller) GetProxyServiceInstances(proxy *model.Proxy) ([]*model.ServiceInstance, error)

GetProxyServiceInstances returns service instances co-located with a given proxy

func (*Controller) GetProxyWorkloadLabels

func (c *Controller) GetProxyWorkloadLabels(proxy *model.Proxy) (model.LabelsCollection, error)

func (*Controller) GetService

func (c *Controller) GetService(hostname model.Hostname) (*model.Service, error)

GetService implements a service catalog operation by hostname specified.

func (*Controller) HasSynced

func (c *Controller) HasSynced() bool

HasSynced returns true after the initial state synchronization

func (*Controller) InitNetworkLookup

func (c *Controller) InitNetworkLookup(meshNetworks *meshconfig.MeshNetworks)

InitNetworkLookup will read the mesh networks configuration from the environment and initialize CIDR rangers for an efficient network lookup when needed

func (*Controller) InstancesByPort

func (c *Controller) InstancesByPort(hostname model.Hostname, reqSvcPort int,
	labelsList model.LabelsCollection) ([]*model.ServiceInstance, error)

InstancesByPort implements a service catalog operation

func (*Controller) ManagementPorts

func (c *Controller) ManagementPorts(addr string) model.PortList

ManagementPorts implements a service catalog operation

func (*Controller) Run

func (c *Controller) Run(stop <-chan struct{})

Run all controllers until a signal is received

func (*Controller) Services

func (c *Controller) Services() ([]*model.Service, error)

Services implements a service catalog operation

func (*Controller) Stop

func (c *Controller) Stop()

Stop the controller. Mostly for tests, to simplify the code (defer c.Stop())

func (*Controller) WorkloadHealthCheckInfo

func (c *Controller) WorkloadHealthCheckInfo(addr string) model.ProbeList

WorkloadHealthCheckInfo implements a service catalog operation

type ControllerOptions

type ControllerOptions struct {
	// Deprecated; Namespace the controller watches. If set to meta_v1.NamespaceAll (""), controller watches all namespaces
	WatchedNamespace string
	// Namespace list the controller watches, separated by comma; if not set, controller watches all namespaces"
	WatchedNamespaces string
	// PodLocalitySource specifies whether the controller should read the node's or the pod's labels to determine Pod's
	// locality (reading it from nodes requires cluster-level privileges, while pods require a controller to copy the
	// node's AZ labels to the pods)
	PodLocalitySource string
	MemberRollName    string
	ResyncPeriod      time.Duration
	DomainSuffix      string

	// ClusterID identifies the remote cluster in a multicluster env.
	ClusterID string

	// XDSUpdater will push changes to the xDS server.
	XDSUpdater model.XDSUpdater

	// TrustDomain used in SPIFFE identity
	TrustDomain string
	// contains filtered or unexported fields
}

ControllerOptions stores the configurable attributes of a Controller.

type Handler

type Handler func(obj interface{}, event model.Event) error

Handler specifies a function to apply on an object for a given event type

type NamedPort

type NamedPort struct {
	Port int32
	Name string
}

NamedPort defines the Port and Name tuple needed for services and endpoints.

func Str2NamedPort

func Str2NamedPort(str string) (NamedPort, error)

Str2NamedPort parses a proto:port string into a namePort struct.

type PodCache

type PodCache struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

PodCache is an eventually consistent pod cache

type PodLocalitySource

type PodLocalitySource interface {
	GetPodLocality(pod *v1.Pod) string
	HasSynced() bool
	Run(stop <-chan struct{})
}

type Queue

type Queue interface {
	// Push a ticket
	Push(Task)
	// Run the loop until a signal on the channel
	Run(<-chan struct{})
}

Queue of work tickets processed using a rate-limiting loop

func NewQueue

func NewQueue(errorDelay time.Duration) Queue

NewQueue instantiates a queue with a processing function

type Task

type Task struct {
	// contains filtered or unexported fields
}

Task object for the event watchers; processes until handler succeeds

func NewTask

func NewTask(handler Handler, obj interface{}, event model.Event) Task

NewTask creates a task from a work item