Kubernetes Service enable a loose coupling between dependent Kubernetes Pods. A Kubernetes Service is defined using YAML (preferred) or JSON, like all Kubernetes objects. The set of Kubernetes Pods targeted by a Kubernetes Service is usually determined by a LabelSelector (see below for why you might want a Kubernetes Service without including selector in the spec).
Although each Kubernetes Pod has a unique IP Address, those IPs are not exposed outside the cluster without a Kubernetes Service. Kubernetes Service allow your applications to receive traffic. Kubernetes Service can be exposed in different ways by specifying a type in the ServiceSpec:
Kubernetes Service routes traffic across a set of Kubernetes Pods. Kubernetes Service are the abstraction that allow Kubernetes 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.
Kubernetes Services match a set of Kubernetes 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: