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 nombramosnginx
(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
yname
). 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.