A pod is an ephemeral resource: it can be deleted, moved or disappear because of network issues at any time, and every time a pod is replaced it receives a new IP address. It’s therefore impossible for pods to maintain consistent communications within an application at a low level. To make a pod accessible externally, you expose it by creating a Service object. A Service serves as a single communication entry point for the pods that belong to an application. The common practice is to deploy a Service and use the name of the Service as the domain name for network communications.

Services are part of the Kubernetes cluster-wide network and can be used by any pod. For example, ExternalName can be used by any pod for DNS lookup; ClusterIP can be reached by any pod in the cluster.