service

package
v1.16.3 Latest Latest
Warning

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

Go to latest
Published: Nov 9, 2022 License: Apache-2.0 Imports: 38 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// RespondingTimeout is how long to wait for a service to be responding.
	RespondingTimeout = 2 * time.Minute

	// MaxNodesForEndpointsTests is the max number for testing endpoints.
	// Don't test with more than 3 nodes.
	// Many tests create an endpoint per node, in large clusters, this is
	// resource and time intensive.
	MaxNodesForEndpointsTests = 3
)
View Source
const (
	// KubeProxyLagTimeout is the maximum time a kube-proxy daemon on a node is allowed
	// to not notice a Service update, such as type=NodePort.
	// TODO: This timeout should be O(10s), observed values are O(1m), 5m is very
	// liberal. Fix tracked in #20567.
	KubeProxyLagTimeout = 5 * time.Minute

	// KubeProxyEndpointLagTimeout is the maximum time a kube-proxy daemon on a node is allowed
	// to not notice an Endpoint update.
	KubeProxyEndpointLagTimeout = 30 * time.Second

	// LoadBalancerLagTimeoutDefault is the maximum time a load balancer is allowed to
	// not respond after creation.
	LoadBalancerLagTimeoutDefault = 2 * time.Minute

	// LoadBalancerLagTimeoutAWS is the delay between ELB creation and serving traffic
	// on AWS. A few minutes is typical, so use 10m.
	LoadBalancerLagTimeoutAWS = 10 * time.Minute

	// LoadBalancerCreateTimeoutDefault is the default time to wait for a load balancer to be created/modified.
	// TODO: once support ticket 21807001 is resolved, reduce this timeout back to something reasonable
	LoadBalancerCreateTimeoutDefault = 20 * time.Minute
	// LoadBalancerCreateTimeoutLarge is the maximum time to wait for a load balancer to be created/modified.
	LoadBalancerCreateTimeoutLarge = 2 * time.Hour

	// LoadBalancerCleanupTimeout is the time required by the loadbalancer to cleanup, proportional to numApps/Ing.
	// Bring the cleanup timeout back down to 5m once b/33588344 is resolved.
	LoadBalancerCleanupTimeout = 15 * time.Minute

	// LoadBalancerPollTimeout is the time required by the loadbalancer to poll.
	// On average it takes ~6 minutes for a single backend to come online in GCE.
	LoadBalancerPollTimeout = 15 * time.Minute
	// LoadBalancerPollInterval is the interval value in which the loadbalancer polls.
	LoadBalancerPollInterval = 30 * time.Second

	// LargeClusterMinNodesNumber is the number of nodes which a large cluster consists of.
	LargeClusterMinNodesNumber = 100

	// TestTimeout is used for most polling/waiting activities
	TestTimeout = 60 * time.Second

	// AffinityConfirmCount is the number of needed continuous requests to confirm that
	// affinity is enabled.
	AffinityConfirmCount = 15

	// ServiceEndpointsTimeout is the maximum time in which endpoints for the service should be created.
	ServiceEndpointsTimeout = 2 * time.Minute

	// ServiceReachabilityShortPollTimeout is the maximum time in which service must be reachable during polling.
	ServiceReachabilityShortPollTimeout = 2 * time.Minute
)

Variables

View Source
var NodePortRange = utilnet.PortRange{Base: 30000, Size: 2768}

NodePortRange should match whatever the default/configured range is

View Source
var PauseDeploymentLabels = map[string]string{"deployment": "agnhost-pause"}

PauseDeploymentLabels are unique deployment selector labels for pause pod

Functions

func CleanupServiceResources

func CleanupServiceResources(c clientset.Interface, loadBalancerName, region, zone string)

CleanupServiceResources cleans up service Type=LoadBalancer resources.

func CreateServiceSpec

func CreateServiceSpec(serviceName, externalName string, isHeadless bool, selector map[string]string) *v1.Service

CreateServiceSpec returns a Service object for testing.

func DescribeSvc

func DescribeSvc(ns string)

DescribeSvc logs the output of kubectl describe svc for the given namespace

func EnableAndDisableInternalLB

func EnableAndDisableInternalLB() (enable func(svc *v1.Service), disable func(svc *v1.Service))

EnableAndDisableInternalLB returns two functions for enabling and disabling the internal load balancer setting for the supported cloud providers (currently GCE/GKE and Azure) and empty functions for others.

func GetIngressPoint

func GetIngressPoint(ing *v1.LoadBalancerIngress) string

GetIngressPoint returns a host on which ingress serves.

func GetServiceLoadBalancerCreationTimeout

func GetServiceLoadBalancerCreationTimeout(cs clientset.Interface) time.Duration

GetServiceLoadBalancerCreationTimeout returns a timeout value for creating a load balancer of a service.

func GetServicesProxyRequest

func GetServicesProxyRequest(c clientset.Interface, request *restclient.Request) (*restclient.Request, error)

GetServicesProxyRequest returns a request for a service proxy.

func StartServeHostnameService

func StartServeHostnameService(c clientset.Interface, svc *v1.Service, ns string, replicas int) ([]string, string, error)

StartServeHostnameService creates a replication controller that serves its hostname and a service on top of it.

func StopServeHostnameService

func StopServeHostnameService(clientset clientset.Interface, ns, name string) error

StopServeHostnameService stops the given service.

func UpdateService

func UpdateService(c clientset.Interface, namespace, serviceName string, update func(*v1.Service)) (*v1.Service, error)

UpdateService fetches a service, calls the update function on it, and then attempts to send the updated service. It retries up to 2 times in the face of timeouts and conflicts.

func VerifyServeHostnameServiceDown

func VerifyServeHostnameServiceDown(c clientset.Interface, host string, serviceIP string, servicePort int) error

VerifyServeHostnameServiceDown verifies that the given service isn't served.

func VerifyServeHostnameServiceUp

func VerifyServeHostnameServiceUp(c clientset.Interface, ns, host string, expectedPods []string, serviceIP string, servicePort int) error

VerifyServeHostnameServiceUp wgets the given serviceIP:servicePort from the given host and from within a pod. The host is expected to be an SSH-able node in the cluster. Each pod in the service is expected to echo its name. These names are compared with the given expectedPods list after a sort | uniq.

func WaitForServiceDeletedWithFinalizer

func WaitForServiceDeletedWithFinalizer(cs clientset.Interface, namespace, name string)

WaitForServiceDeletedWithFinalizer waits for the service with finalizer to be deleted.

func WaitForServiceResponding

func WaitForServiceResponding(c clientset.Interface, ns, name string) error

WaitForServiceResponding waits for the service to be responding.

func WaitForServiceUpdatedWithFinalizer

func WaitForServiceUpdatedWithFinalizer(cs clientset.Interface, namespace, name string, hasFinalizer bool)

WaitForServiceUpdatedWithFinalizer waits for the service to be updated to have or don't have a finalizer.

Types

type TestFixture

type TestFixture struct {
	ServiceName string
	Namespace   string
	Client      clientset.Interface

	TestID string
	Labels map[string]string

	Name  string
	Image string
	// contains filtered or unexported fields
}

TestFixture is a simple helper class to avoid too much boilerplate in tests

func NewServerTest

func NewServerTest(client clientset.Interface, namespace string, serviceName string) *TestFixture

NewServerTest creates a new TestFixture for the tests.

func (*TestFixture) BuildServiceSpec

func (t *TestFixture) BuildServiceSpec() *v1.Service

BuildServiceSpec builds default config for a service (which can then be changed)

func (*TestFixture) Cleanup

func (t *TestFixture) Cleanup() []error

Cleanup cleans all ReplicationControllers and Services which this object holds.

func (*TestFixture) CreateRC

CreateRC creates a replication controller and records it for cleanup.

func (*TestFixture) CreateService

func (t *TestFixture) CreateService(service *v1.Service) (*v1.Service, error)

CreateService creates a service, and record it for cleanup

func (*TestFixture) DeleteService

func (t *TestFixture) DeleteService(serviceName string) error

DeleteService deletes a service, and remove it from the cleanup list

type TestJig

type TestJig struct {
	ID     string
	Name   string
	Client clientset.Interface
	Labels map[string]string
}

TestJig is a test jig to help service testing.

func NewTestJig

func NewTestJig(client clientset.Interface, name string) *TestJig

NewTestJig allocates and inits a new TestJig.

func (*TestJig) AddRCAntiAffinity

func (j *TestJig) AddRCAntiAffinity(rc *v1.ReplicationController)

AddRCAntiAffinity adds AntiAffinity to the given ReplicationController.

func (*TestJig) ChangeServiceNodePortOrFail

func (j *TestJig) ChangeServiceNodePortOrFail(namespace, name string, initial int) *v1.Service

ChangeServiceNodePortOrFail changes node ports of the given service.

func (*TestJig) ChangeServiceType

func (j *TestJig) ChangeServiceType(namespace, name string, newType v1.ServiceType, timeout time.Duration)

ChangeServiceType updates the given service's ServiceType to the given newType.

func (*TestJig) CheckAffinity

func (j *TestJig) CheckAffinity(execPod *v1.Pod, targetIP string, targetPort int, shouldHold bool) bool

CheckAffinity function tests whether the service affinity works as expected. If affinity is expected, the test will return true once affinityConfirmCount number of same response observed in a row. If affinity is not expected, the test will keep observe until different responses observed. The function will return false only in case of unexpected errors.

func (*TestJig) CheckServiceReachability

func (j *TestJig) CheckServiceReachability(namespace string, svc *v1.Service, pod *v1.Pod)

CheckServiceReachability ensures that request are served by the services. Only supports Services with type ClusterIP, NodePort and ExternalName.

func (*TestJig) CreateExternalNameServiceOrFail

func (j *TestJig) CreateExternalNameServiceOrFail(namespace string, tweak func(svc *v1.Service)) *v1.Service

CreateExternalNameServiceOrFail creates a new ExternalName type Service based on the j's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*TestJig) CreateLoadBalancerService

func (j *TestJig) CreateLoadBalancerService(namespace, serviceName string, timeout time.Duration, tweak func(svc *v1.Service)) *v1.Service

CreateLoadBalancerService creates a loadbalancer service and waits for it to acquire an ingress IP.

func (*TestJig) CreateOnlyLocalLoadBalancerService

func (j *TestJig) CreateOnlyLocalLoadBalancerService(namespace, serviceName string, timeout time.Duration, createPod bool,
	tweak func(svc *v1.Service)) *v1.Service

CreateOnlyLocalLoadBalancerService creates a loadbalancer service with ExternalTrafficPolicy set to Local and waits for it to acquire an ingress IP. If createPod is true, it also creates an RC with 1 replica of the standard netexec container used everywhere in this test.

func (*TestJig) CreateOnlyLocalNodePortService

func (j *TestJig) CreateOnlyLocalNodePortService(namespace, serviceName string, createPod bool) *v1.Service

CreateOnlyLocalNodePortService creates a NodePort service with ExternalTrafficPolicy set to Local and sanity checks its nodePort. If createPod is true, it also creates an RC with 1 replica of the standard netexec container used everywhere in this test.

func (*TestJig) CreatePDBOrFail

func (j *TestJig) CreatePDBOrFail(namespace string, rc *v1.ReplicationController) *policyv1beta1.PodDisruptionBudget

CreatePDBOrFail returns a PodDisruptionBudget for the given ReplicationController, or fails if a PodDisruptionBudget isn't ready

func (*TestJig) CreatePausePodDeployment

func (j *TestJig) CreatePausePodDeployment(name, ns string, replica int32) *appsv1.Deployment

CreatePausePodDeployment creates a deployment for agnhost-pause pod running in different nodes

func (*TestJig) CreateServicePods

func (j *TestJig) CreateServicePods(c clientset.Interface, ns string, replica int)

CreateServicePods creates a replication controller with the label same as service

func (*TestJig) CreateServiceWithServicePort

func (j *TestJig) CreateServiceWithServicePort(labels map[string]string, namespace string, ports []v1.ServicePort) (*v1.Service, error)

CreateServiceWithServicePort creates a new Service with ServicePort.

func (*TestJig) CreateTCPServiceOrFail

func (j *TestJig) CreateTCPServiceOrFail(namespace string, tweak func(svc *v1.Service)) *v1.Service

CreateTCPServiceOrFail creates a new TCP Service based on the j's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*TestJig) CreateTCPServiceWithPort

func (j *TestJig) CreateTCPServiceWithPort(namespace string, tweak func(svc *v1.Service), port int32) *v1.Service

CreateTCPServiceWithPort creates a new TCP Service with given port based on the j's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*TestJig) CreateUDPServiceOrFail

func (j *TestJig) CreateUDPServiceOrFail(namespace string, tweak func(svc *v1.Service)) *v1.Service

CreateUDPServiceOrFail creates a new UDP Service based on the j's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*TestJig) GetEndpointNodes

func (j *TestJig) GetEndpointNodes(svc *v1.Service) map[string][]string

GetEndpointNodes returns a map of nodenames:external-ip on which the endpoints of the given Service are running.

func (*TestJig) GetHTTPContent

func (j *TestJig) GetHTTPContent(host string, port int, timeout time.Duration, url string) bytes.Buffer

GetHTTPContent returns the content of the given url by HTTP.

func (*TestJig) GetNodes

func (j *TestJig) GetNodes(maxNodesForTest int) (nodes *v1.NodeList)

GetNodes returns the first maxNodesForTest nodes. Useful in large clusters where we don't eg: want to create an endpoint per node.

func (*TestJig) GetNodesNames

func (j *TestJig) GetNodesNames(maxNodesForTest int) []string

GetNodesNames returns a list of names of the first maxNodesForTest nodes

func (*TestJig) RunOrFail

func (j *TestJig) RunOrFail(namespace string, tweak func(rc *v1.ReplicationController)) *v1.ReplicationController

RunOrFail creates a ReplicationController and Pod(s) and waits for the Pod(s) to be running. Callers can provide a function to tweak the RC object before it is created.

func (*TestJig) SanityCheckService

func (j *TestJig) SanityCheckService(svc *v1.Service, svcType v1.ServiceType)

SanityCheckService performs sanity checks on the given service

func (*TestJig) Scale

func (j *TestJig) Scale(namespace string, replicas int)

Scale scales pods to the given replicas

func (*TestJig) TestHTTPHealthCheckNodePort

func (j *TestJig) TestHTTPHealthCheckNodePort(host string, port int, request string, timeout time.Duration, expectSucceed bool, threshold int) error

TestHTTPHealthCheckNodePort tests a HTTP connection by the given request to the given host and port.

func (*TestJig) TestNotReachableHTTP

func (j *TestJig) TestNotReachableHTTP(host string, port int, timeout time.Duration)

TestNotReachableHTTP tests that a HTTP request doesn't connect to the given host and port.

func (*TestJig) TestNotReachableUDP

func (j *TestJig) TestNotReachableUDP(host string, port int, timeout time.Duration)

TestNotReachableUDP tests that the given host doesn't serve UDP on the given port.

func (*TestJig) TestReachableHTTP

func (j *TestJig) TestReachableHTTP(host string, port int, timeout time.Duration)

TestReachableHTTP tests that the given host serves HTTP on the given port.

func (*TestJig) TestReachableHTTPWithRetriableErrorCodes

func (j *TestJig) TestReachableHTTPWithRetriableErrorCodes(host string, port int, retriableErrCodes []int, timeout time.Duration)

TestReachableHTTPWithRetriableErrorCodes tests that the given host serves HTTP on the given port with the given retriableErrCodes.

func (*TestJig) TestReachableUDP

func (j *TestJig) TestReachableUDP(host string, port int, timeout time.Duration)

TestReachableUDP tests that the given host serves UDP on the given port.

func (*TestJig) TestRejectedHTTP

func (j *TestJig) TestRejectedHTTP(host string, port int, timeout time.Duration)

TestRejectedHTTP tests that the given host rejects a HTTP request on the given port.

func (*TestJig) TestRejectedUDP

func (j *TestJig) TestRejectedUDP(host string, port int, timeout time.Duration)

TestRejectedUDP tests that the given host rejects a UDP request on the given port.

func (*TestJig) UpdateService

func (j *TestJig) UpdateService(namespace, name string, update func(*v1.Service)) (*v1.Service, error)

UpdateService fetches a service, calls the update function on it, and then attempts to send the updated service. It tries up to 3 times in the face of timeouts and conflicts.

func (*TestJig) UpdateServiceOrFail

func (j *TestJig) UpdateServiceOrFail(namespace, name string, update func(*v1.Service)) *v1.Service

UpdateServiceOrFail fetches a service, calls the update function on it, and then attempts to send the updated service. It tries up to 3 times in the face of timeouts and conflicts.

func (*TestJig) WaitForAvailableEndpoint

func (j *TestJig) WaitForAvailableEndpoint(namespace, serviceName string, timeout time.Duration)

WaitForAvailableEndpoint waits for at least 1 endpoint to be available till timeout

func (*TestJig) WaitForEndpointOnNode

func (j *TestJig) WaitForEndpointOnNode(namespace, serviceName, nodeName string)

WaitForEndpointOnNode waits for a service endpoint on the given node.

func (*TestJig) WaitForLoadBalancerDestroyOrFail

func (j *TestJig) WaitForLoadBalancerDestroyOrFail(namespace, name string, ip string, port int, timeout time.Duration) *v1.Service

WaitForLoadBalancerDestroyOrFail waits the given service to destroy a LoadBalancer, or fails after the given timeout

func (*TestJig) WaitForLoadBalancerOrFail

func (j *TestJig) WaitForLoadBalancerOrFail(namespace, name string, timeout time.Duration) *v1.Service

WaitForLoadBalancerOrFail waits the given service to have a LoadBalancer, or fails after the given timeout

func (*TestJig) WaitForNewIngressIPOrFail

func (j *TestJig) WaitForNewIngressIPOrFail(namespace, name, existingIP string, timeout time.Duration) *v1.Service

WaitForNewIngressIPOrFail waits for the given service to get a new ingress IP, or fails after the given timeout

Jump to

Keyboard shortcuts

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