Saltar al contenido principal

Tipos de Services

Services NodePort

Supongamos que tenemos desplegado nginx usando el archivo YAML: nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: contenedor-nginx
ports:
- name: http
containerPort: 80

Aplicamos el despliegue con:

kubectl apply -f nginx-deployment.yaml

Ahora tenemos dos Pods ofreciendo el servidor web nginx, a los que queremos acceder desde el exterior y balancear la carga entre ellos.

Aunque podríamos crear un recurso Service desde la línea de comandos:

kubectl expose deployment/nginx --port=80 --type=NodePort

Normalmente, describimos las características del Service en un archivo YAML nginx-srv.yaml:

apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
ports:
- name: service-http
port: 80
targetPort: http
selector:
app: nginx

Veamos la descripción:

  • Vamos a crear un recurso Service (kind) y lo nombramos nginx (name). Este nombre será importante para la resolución DNS.
  • En la especificación del recurso, indicamos el tipo de Service (type).
  • Definimos el puerto por el que va a ofrecer el Service y lo nombramos (port y name). Además, indicamos el puerto en el que los Pods están ofreciendo el Service (targetPort). En este caso, usamos el nombre del puerto (http) que indicamos en el recurso Deployment:
...
ports:
- name: http
containerPort: 80
...
  • Por último, seleccionamos los Pods a los que vamos a acceder y balancear la carga, seleccionándolos por medio de sus etiquetas (selector).

Nota: La definición de un Service de tipo ClusterIP sería exactamente igual, pero cambiando el parámetro type.

Documentación

Para más información acerca de los Services, puedes leer la guía de usuario.