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:
- 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. - 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. - 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 - 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
- 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
- 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
Para crear un despliegue, ejecuta el siguiente comando.
kubectl create -f my-deployment.yml
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
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
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
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
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
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.