What is a Service?

last updated May 10, 2019

There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors. -- Leon Bambrick

A Kubernetes Service is an object which describe how to access your applications. You can think of a Service a bit like a DNS name, a firewall rule, and a load balancer all in-one - because it is! Services "select" applications to point at via their selector tag - you'll notice this matches our definition on the DeploymentIn Kubernetes, a Deployment is an object which describes how an application is deployed. A Deployment defines the images to launch, how to configure them, and how they should be deployedRead More... example page.

apiVersion: v1
kind: Service
name: nginx-http
type: ClusterIP
- name: tcp
port: 80
app: nginx
.apiVersionKube resource version to use
.kindWhat kind of resource is this yaml doc defining
.metadata.nameName of your resource
.specUsed to define how your deployment behaves. Some example properties might be: * selector * minReadySeconds

Once defined, all pods in the same NamespaceA Namespace is a logical group for application enviroments - staging, qa, production - a namespace isolates containers within it from containers outside.Read More... as this pod can automatically access the NGINX server via the address: http://nginx-http. Many services can select the same pods, and pods can be exposed by multiple services (for example, we're only exposing port 80 here - another service might expose the 443 port later).

Services have a number of "types" of Kubernetes Services:

  • ClusterIP: This type of service is only reachable from inside the cluster and is the default type.

  • NodePort: This service type selects a static port number on the Node, potentially allowing access to the service from the internet.

  • LoadBalancer: A LoadBalancer service requires a Cloud Provider plugin which will create an actual Cloud LoadBalancer resource for you. Kubernetes then actively manages the LoadBalancer, ensuring it points at the right nodes and the right ports!