Objectives
--
-
- Learn about a Service in Kubernetes -
- Understand how labels and LabelSelector objects relate to a Service -
- Expose an application outside a Kubernetes cluster using a Service -
Overview of Kubernetes Services
- -Kubernetes Pods are mortal. Pods in fact - have a lifecycle. When a worker node - dies, the Pods running on the Node are also lost. A ReplicationController - might then dynamically drive the cluster back to desired state via creation of new Pods to keep your - application running. As another example, consider an image-processing backend with 3 replicas. Those - replicas are fungible; the front-end system should not care about backend replicas or even if a Pod - is lost and recreated. That said, each Pod in a Kubernetes cluster has a unique IP address, even - Pods on the same Node, so there needs to be a way of automatically reconciling changes among Pods so - that your applications continue to function.
- -A Service in Kubernetes is an abstraction which defines a logical set of Pods and a policy by which
- to access them. Services enable a loose coupling between dependent Pods. A Service is defined using
- YAML (preferred) or JSON,
- like all Kubernetes objects. The set of Pods targeted by a Service is usually determined by a LabelSelector
- (see below for why you might want a Service without including selector
in the spec).
-
Although each Pod has a unique IP address, those IPs are not exposed outside the cluster without a
- Service. Services allow your applications to receive traffic. Services can be exposed in different
- ways by specifying a type
in the ServiceSpec:
-
-
- ClusterIP (default) - Exposes the Service on an internal IP in the cluster. This type - makes the Service only reachable from within the cluster. - -
- NodePort - Exposes the Service on the same port of each selected Node in the cluster
- using NAT. Makes a Service accessible from outside the cluster using
<NodeIP>:<NodePort>
. - Superset of ClusterIP. -
- - LoadBalancer - Creates an external load balancer in the current cloud (if supported) and - assigns a fixed, external IP to the Service. Superset of NodePort. - -
- ExternalName - Exposes the Service using an arbitrary name (specified by
externalName
- in the spec) by returning a CNAME record with the name. No proxy is used. This type requires - v1.7 or higher ofkube-dns
. -
-
More information about the different types of Services can be found in the Using Source IP tutorial. Also see Connecting Applications - with Services.
-Additionally, note that there are some use cases with Services that involve not defining selector
- in the spec. A Service created without selector
will also not create the corresponding
- Endpoints object. This allows users to manually map a Service to specific endpoints. Another
- possibility why there may be no selector is you are strictly using type: ExternalName
.
-
Summary
--
-
- Exposing Pods to external traffic -
- Load balancing traffic across multiple Pods -
- Using labels -
A Kubernetes Service is an abstraction layer which defines a logical set of Pods and enables - external traffic exposure, load balancing and service discovery for those Pods.
-- -
Services and Labels
-A Service routes traffic across a set of Pods. Services are the abstraction that allow pods to die - and replicate in Kubernetes without impacting your application. Discovery and routing among - dependent Pods (such as the frontend and backend components in an application) is handled by - Kubernetes Services.
-Services match a set of Pods using labels - and selectors, a grouping primitive that allows logical operation on objects in Kubernetes. - Labels are key/value pairs attached to objects and can be used in any number of ways:
--
-
- Designate objects for development, test, and production -
- Embed version tags -
- Classify an object using tags -
You can create a Service at the same time you create a Deployment by
- using--expose
in kubectl.
- -
-
Labels can be attached to objects at creation time or later on. They can be modified at any time. - Let's expose our application now using a Service and apply some labels.
--