Service

Con los Service Kubernetes nos permite utilizar una única ip y un único nombre dns para un conjunto de pods que definamos mediante etiquetas (label) Tipos de servicio:

Clusterip → Es el tipo por defecto. Crea una ip virtual dentro del cluster. Solo podemos acceder internamente entre distintos servicios, para acceder desde el exterior tenemos que usar kubectl proxy

NodePort →expone un puerto (por defecto entre: 30000-32767) del nodo para que podamos acceder desde el exterior. Para acceder usamos la ip del servidor master y el puerto asignado

LoadBalancer → Sólo está soportado en servidos de nube pública (AWS, GKE, etc)

Ejemplo <sxh yaml> apiVersion: apps/v1 kind: Deployment metadata:

name: deployment-test
labels:
app: front

spec:

replicas: 3
selector:
matchLabels:
app: front
template:
metadata:
labels:
app: front
spec:
containers:
- name: nginx
image: nginx:alpine

— apiVersion: v1 kind: Service # Definimos el Service metadata:

name: mi-servicio
labels:
app: front

spec:

type: ClusterIP #tipo de servicio
selector:
app: front
ports:
- protocol: TCP
port: 8080 # Puerto en donde tenemos el service la escucha de las peticiones
targetPort: 80 # Puerto d elos pods donde enviar las peticiones que llegan al service
</sxh>

Comandos

Mostrar los servicios

<sxh>kubectl get svc</sxh>

Ver los services con una determinada etiqueta

<sxh>kubectl get svc -l app=<etiqueta></sxh>

Mostrar los endpoints

<sxh>kubectl describe endpoint <nombreservicio></sxh>

Crear un service desde la línea de comandos

<sxh>kubectl expose nginx/nginx –port=80 –type=NodePort</sxh>

Referencias

https://kubernetes.io/docs/concepts/services-networking/service/

https://github.com/ricardoandre97/k8s-resources/tree/master/service

https://refactorizando.com/clusterip-vs-loadbalancer-vs-nodeport-vs-ingress-en-kubernetes/

https://www.josedomingo.org/pledin/2018/11/recursos-de-kubernetes-services/