Tipos de servicios: ClusterIP, NodePort, LoadBalancer y ExternalName

Clase 10 de 24Curso de Kubernetes

Resumen

¿Cómo exponer aplicaciones en Kubernetes?

A la hora de trabajar con Kubernetes, uno de los retos más importantes es aprender a exponer nuestras aplicaciones al mundo exterior. Es decir, habilitar la conexión de nuestras aplicaciones desplegadas en un clúster con usuarios externos. En el ecosistema de Kubernetes, existen cuatro componentes principales que se utilizan para esta tarea: NodePort, ClusterIP, LoadBalancer y ExternalName.

¿Qué es un NodePort?

El concepto de NodePort es esencial dentro de Kubernetes. Este tipo de servicio nos permite exponer un pod en un puerto específico de cada nodo del clúster. Es notable que en escenarios más avanzados, como en el uso de MiniCube, puedes crear clústeres de múltiples nodos.

Para configurarlo, lo primero que debes hacer es definir este servicio en un archivo YAML. Un ejemplo básico incluye los siguientes elementos:

  • Metadata para relacionar el servicio con un ReplicaSet, Deployment o Pod.
  • El containerPort que el deployment utiliza (e.g., 8080).
  • El nodePort que permite conectar el tráfico externo hacia el pod.

Aquí te muestro cómo se vería un archivo de configuración:

apiVersion: v1 kind: Service metadata: name: hello-nodeport spec: selector: app: HelloNodePort type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080 nodePort: 30007

Para implementar este servicio, utiliza el comando:

kubectl apply -f deployment-nodeport.yaml

¿Para qué sirve un ClusterIP?

El servicio tipo ClusterIP es usado cuando se desea exponer aplicaciones dentro del mismo clúster. Esta funcionalidad es ideal cuando varios microservicios o aplicaciones necesitan comunicarse entre sí dentro del clúster.

La configuración es bastante parecida al NodePort, pero enfocada en la conectividad interna. Aquí, el servicio toma una dirección IP específica del rango CIDR asignado al clúster.

apiVersion: v1 kind: Service metadata: name: hello-cluster-ip spec: selector: app: HelloClusterIP type: ClusterIP ports: - protocol: TCP port: 80 targetPort: 8080

Para desplegar este servicio, usa:

kubectl apply -f deployment-clusterip.yaml

¿Cómo se gestiona un LoadBalancer?

Este es el servicio adecuado cuando se trabaja en entornos de nube como AWS, GCP o Azure. Al detectarse un servicio tipo LoadBalancer, el proveedor de la nube automáticamente despliega una instancia que gestionará el tráfico.

Aquí tienes un ejemplo de configuración:

apiVersion: v1 kind: Service metadata: name: hello-loadbalancer spec: selector: app: HelloLoadBalancer type: LoadBalancer ports: - protocol: TCP port: 80 targetPort: 8080

El comando para aplicarlo es:

kubectl apply -f deployment-loadbalancer.yaml

¿Qué es un ExternalName y cuándo usarlo?

El servicio ExternalName es muy útil para conectar Kubernetes con recursos de terceros, como bases de datos externas. A diferencia de los tipos anteriores, ExternalName no gestiona pods directos, sino que encapsula la URL del recurso externo, facilitando su uso y refactorización en grandes aplicaciones.

apiVersion: v1 kind: Service metadata: name: my-database-service spec: type: ExternalName externalName: database.example.com

Para crear este recurso simplemente ejecuta:

kubectl apply -f externalname.yaml

Estos son los cuatro tipos fundamentales de servicios en Kubernetes para exponer aplicaciones. Cada uno tiene su caso de uso específico y ofrecen una forma distinta de gestionar el tráfico hacia y desde tus aplicaciones. Explora y decide cuál es el mejor para tus necesidades, y no dejes de compartir tu experiencia en los comentarios.

      Tipos de servicios: ClusterIP, NodePort, LoadBalancer y ExternalName