Cómo crear un Servicio en Kubernetes

Un servicio es una capa de abstracción sobre los Pods. Define un conjunto lógico de Pods. Proporciona una única dirección IP y un nombre DNS por el que se puede acceder a los pods. Se utiliza para exponer los pods.

Hay 3 tipos diferentes de Servicios en Kubernetes:

  1. ClusterIP:
    Expone el servicio dentro del cluster de Kubernetes. Este Servicio sólo es accesible desde dentro del clúster. No se puede acceder a él desde fuera del clúster.
  2. NodePort:
    Expone el servicio en un puerto estático del nodo desplegado. Se puede acceder a este servicio desde fuera del clúster utilizando el NodeIP:Nodeport.
  3. Equilibradorde carga:
    Exponeel servicio externamente utilizando el equilibrador de carga de un proveedor de la nube, esto crea una IP pública en el proveedor de la nube
  4. NombreExterno:
    Asigna el Servicio al contenido del campo externalName devolviendo un registro CNAME

Haz clicaquí para saber más sobre el Servicio Kubernetes.

En este artículo, veremos los pasos para crear un Servicio de tipo NodePort.

Requisitos previos

  1. Cluster Kubernetes con al menos 1 nodo trabajador.
    Si quieres aprender a crear un Cluster de Kubernetes, haz clic aquí. Esta guía te ayudará a crear un cluster de Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu 18l04.

Qué vamos a hacer

  1. Crear un Servicio

Crear un servicio

En primer lugar, crearemos un despliegue con la siguiente definición al que el servicio redirigirá todas las peticiones que le lleguen.

Crea un nuevo archivo y añade el siguiente contenido en él, esto creará un despliegue para Nginx.

vim my-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx
  replicas: 3 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

mi-despliegue

Para crear un despliegue, ejecuta el siguiente comando.

kubectl create -f my-deployment.yml

crear-despliegue

Esto creará un despliegue para Nginx con 3 réplicas.

Puedes obtener los detalles del despliegue, el conjunto de réplicas y el pod utilizando los siguientes comandos.

kubectl get deployment | grep nginx
kubectl get replicaset | grep nginx
kubectl get pod | grep nginx

get-deployment-details

En la captura de pantalla anterior, puedes ver que se han creado 3 réplicas de Nginx.

Ahora, crea una definición de Servicio utilizando el siguiente contenido.

vim my-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
app: nginx type: NodePort

mi-servicio

La definición de servicio anterior creará un Servicio de tipo NodePort y redirigirá las peticiones a los pods que coincidan con la etiqueta nginx, es decir, los pods que hemos creado mediante el paso anterior de creación del despliegue.

Ejecuta el siguiente comando para crear un Servicio.

kubectl create -f my-service.yml

crear-servicio

Obtén los detalles del servicio y comprueba el NodePort en el que estará disponible el servicio.

kubectl get service | grep nginx
kubectl describe service nginx

get-service-details

En la captura de pantalla anterior, se puede ver que el Servicio está disponible en el Puerto 30747. Esto puede ser diferente para ti, ya que el puerto se asigna aleatoriamente del rango disponible.

Ahora, se puede acceder a la aplicación nginx a través de este servicio en NodeIp:NodePort

Aquí es:106.210.138.189:30747

servicio de acceso

Conclusión

En este artículo, hemos creado un despliegue para Nginx con 3 réplicas y hemos creado un Servicio de tipo NodePort. Hemos visto cómo se puede acceder a la aplicación Nginx creada mediante el despliegue en NodeIP:Port.

También te podría gustar...