Documentation ¶
Index ¶
- func ResolveServicePort(svcPort corev1.ServicePort, containerPorts []corev1.ContainerPort) (int32, bool)
- type Builder
- type Key
- type Pod
- type Service
- type ServiceTrafficTarget
- type ServiceTrafficTargetDestination
- type ServiceTrafficTargetKey
- type ServiceTrafficTargetSource
- type Topology
- type TrafficSpec
- type TrafficSplit
- type TrafficSplitBackend
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ResolveServicePort ¶
func ResolveServicePort(svcPort corev1.ServicePort, containerPorts []corev1.ContainerPort) (int32, bool)
ResolveServicePort resolves the given service port against the given container port list, as described in the Kubernetes documentation, and returns true if it has been successfully resolved, false otherwise.
The Kubernetes documentation says: Port definitions in Pods have names, and you can reference these names in the targetPort attribute of a Service. This works even if there is a mixture of Pods in the Service using a single configured name, with the same network protocol available via different port numbers.
Types ¶
type Builder ¶
type Builder struct {
// contains filtered or unexported fields
}
Builder builds Topology objects based on the current state of a kubernetes cluster.
func NewBuilder ¶
func NewBuilder( serviceLister listers.ServiceLister, endpointLister listers.EndpointsLister, podLister listers.PodLister, trafficTargetLister accesslister.TrafficTargetLister, trafficSplitLister splitlister.TrafficSplitLister, httpRouteGroupLister speclister.HTTPRouteGroupLister, tcpRoutesLister speclister.TCPRouteLister, logger logrus.FieldLogger, ) *Builder
NewBuilder creates and returns a new topology Builder instance.
type Key ¶
Key references a resource.
func (*Key) UnmarshalJSON ¶
UnmarshalJSON implements the `json.Unmarshaler` interface. This is a temporary workaround for the bug described in this issue: https://github.com/golang/go/issues/38771.
func (*Key) UnmarshalText ¶
UnmarshalText unmarshals the Key.
type Pod ¶
type Pod struct { Name string `json:"name"` Namespace string `json:"namespace"` ServiceAccount string `json:"serviceAccount"` OwnerReferences []v1.OwnerReference `json:"ownerReferences,omitempty"` ContainerPorts []corev1.ContainerPort `json:"containerPorts,omitempty"` IP string `json:"ip"` SourceOf []ServiceTrafficTargetKey `json:"sourceOf,omitempty"` DestinationOf []ServiceTrafficTargetKey `json:"destinationOf,omitempty"` }
Pod is a node of the graph representing a kubernetes pod.
type Service ¶
type Service struct { Name string `json:"name"` Namespace string `json:"namespace"` Selector map[string]string `json:"selector"` Annotations map[string]string `json:"annotations"` Ports []corev1.ServicePort `json:"ports,omitempty"` ClusterIP string `json:"clusterIp"` Pods []Key `json:"pods,omitempty"` // List of TrafficTargets that are targeting pods which are selected by this service. TrafficTargets []ServiceTrafficTargetKey `json:"trafficTargets,omitempty"` // List of TrafficSplits that are targeting this service. TrafficSplits []Key `json:"trafficSplits,omitempty"` // List of TrafficSplit mentioning this service as a backend. BackendOf []Key `json:"backendOf,omitempty"` Errors []string `json:"errors"` }
Service is a node of the graph representing a kubernetes service.
type ServiceTrafficTarget ¶
type ServiceTrafficTarget struct { Service Key `json:"service"` Name string `json:"name"` Namespace string `json:"namespace"` Sources []ServiceTrafficTargetSource `json:"sources,omitempty"` Destination ServiceTrafficTargetDestination `json:"destination"` Rules []TrafficSpec `json:"rules,omitempty"` Errors []string `json:"errors"` }
ServiceTrafficTarget represents a TrafficTarget applied a on Service. TrafficTargets have a Destination service account. This service account can be set on many pods, each of them, potentially accessible through different services. A ServiceTrafficTarget is a TrafficTarget for a Service which exposes a Pod which has the TrafficTarget Destination service-account.
func (*ServiceTrafficTarget) AddError ¶
func (tt *ServiceTrafficTarget) AddError(err error)
AddError adds the given error to this ServiceTrafficTarget.
type ServiceTrafficTargetDestination ¶
type ServiceTrafficTargetDestination struct { ServiceAccount string `json:"serviceAccount"` Namespace string `json:"namespace"` Ports []corev1.ServicePort `json:"ports,omitempty"` Pods []Key `json:"pods,omitempty"` }
ServiceTrafficTargetDestination represents a destination of a ServiceTrafficTarget. In the SMI specification, a TrafficTarget has a destination service-account. ServiceTrafficTargetDestination holds the pods exposed by the Service which has this service-account.
type ServiceTrafficTargetKey ¶
ServiceTrafficTargetKey references a TrafficTarget applied on a Service.
func (ServiceTrafficTargetKey) MarshalText ¶
func (k ServiceTrafficTargetKey) MarshalText() ([]byte, error)
MarshalText marshals the ServiceTrafficTargetKey.
func (ServiceTrafficTargetKey) String ¶
func (k ServiceTrafficTargetKey) String() string
String stringifies the ServiceTrafficTargetKey.
func (*ServiceTrafficTargetKey) UnmarshalJSON ¶
func (k *ServiceTrafficTargetKey) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the `json.Unmarshaler` interface. This is a temporary workaround for the bug described in this issue: https://github.com/golang/go/issues/38771.
func (*ServiceTrafficTargetKey) UnmarshalText ¶
func (k *ServiceTrafficTargetKey) UnmarshalText(data []byte) error
UnmarshalText unmarshals the ServiceTrafficTargetKey.
type ServiceTrafficTargetSource ¶
type ServiceTrafficTargetSource struct { ServiceAccount string `json:"serviceAccount"` Namespace string `json:"namespace"` Pods []Key `json:"pods,omitempty"` }
ServiceTrafficTargetSource represents a source of a ServiceTrafficTarget. In the SMI specification, a TrafficTarget has a list of sources, each of them being a service-account name. ServiceTrafficTargetSource represents this service-account, populated with the pods having this Service.
type Topology ¶
type Topology struct { Services map[Key]*Service `json:"services"` Pods map[Key]*Pod `json:"pods"` ServiceTrafficTargets map[ServiceTrafficTargetKey]*ServiceTrafficTarget `json:"serviceTrafficTargets"` TrafficSplits map[Key]*TrafficSplit `json:"trafficSplits"` }
Topology holds the graph and represents the different paths a request can follow. Each Pods and services are nodes of the graph.
type TrafficSpec ¶
type TrafficSpec struct { HTTPRouteGroup *specs.HTTPRouteGroup `json:"httpRouteGroup,omitempty"` TCPRoute *specs.TCPRoute `json:"tcpRoute,omitempty"` // HTTPMatches is the list of HTTPMatch selected from the HTTPRouteGroup. HTTPMatches []*specs.HTTPMatch `json:"httpMatches,omitempty"` }
TrafficSpec represents a Spec which can be used for restricting access to a route in a TrafficTarget or a TrafficSplit.
type TrafficSplit ¶
type TrafficSplit struct { Name string `json:"name"` Namespace string `json:"namespace"` Service Key `json:"service"` Backends []TrafficSplitBackend `json:"backends,omitempty"` Rules []TrafficSpec `json:"rules,omitempty"` // List of Pods that are explicitly allowed to pass through the TrafficSplit. Incoming []Key `json:"incoming,omitempty"` Errors []string `json:"errors"` }
TrafficSplit represents a TrafficSplit applied on a Service.
func (*TrafficSplit) AddError ¶
func (ts *TrafficSplit) AddError(err error)
AddError adds the given error to this TrafficSplit.
type TrafficSplitBackend ¶
TrafficSplitBackend is a backend of a TrafficSplit.