Table of contents
In Kubernetes, a service is an abstraction of a set of pods that perform the same task. Services allow for logical grouping of pods and provides a stable IP and port for them so that other services can access them. Kubernetes supports three types of services: ClusterIP, NodePort, and LoadBalancer. In this article, we'll explore each service type and provide an example YAML file for each one.
ClusterIP Service
The ClusterIP
service is the default service type in Kubernetes. This type of service is used to expose a set of pods to other objects in the cluster using a virtual IP address. The ClusterIP
service makes pods accessible within the cluster, but not from external sources.
Here's an example YAML file for a ClusterIP
service:
apiVersion: v1
kind: Service
metadata:
name: my-app
labels:
app: my-app
spec:
type: ClusterIP
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
This YAML file creates a ClusterIP
service called my-app
with an associated label selector of app: my-app
. It exposes pods with the same label selector within the cluster using a virtual IP address that's only accessible within the cluster. The service listens on port 80
and directs traffic to the target port 8080
on the pods.
NodePort Service
The NodePort
service type exposes the service on a static port on each node in the Kubernetes cluster. This allows external traffic to reach the service on those nodes. NodePort
services are useful for development and testing environments but may not be suitable for production environments due to potential security concerns.
Here's an example YAML file for a NodePort
service:
apiVersion: v1
kind: Service
metadata:
name: my-app
labels:
app: my-app
spec:
type: NodePort
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
nodePort: 30000
This YAML file creates a NodePort
service called my-app
with an associated label selector of app: my-app
. The service exposes pods with the same label selector using a static port of 30000
on each node. This allows external traffic to reach the service on this port. The service listens on port 80
and directs traffic to the target port 8080
on the pods.
LoadBalancer Service
The LoadBalancer
service type is used to expose the service outside of the Kubernetes cluster using an external load balancer. The load balancer can be a physical or cloud-based load balancer that can distribute traffic to the pods associated with the service.
Here's an example YAML file for a LoadBalancer
service:
apiVersion: v1
kind: Service
metadata:
name: my-app
labels:
app: my-app
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
This YAML file creates a LoadBalancer
service called my-app
with an associated label selector of app: my-app
. When we create this service, Kubernetes will create a cloud-based load balancer such as ELB on Amazon Web Services. The service listens on port 80
and directs traffic to the target port 8080
on the pods. The load balancer is responsible for distributing the traffic to the multiple pods that are associated with the service.
Conclusion
Kubernetes services are a crucial abstraction that allows your applications to communicate with each other securely and reliably. In this article, we provided a complete guide to Kubernetes services and explored each service type with a YAML file example. By using these examples, you can easily create and modify services to suit the needs of your application.