Sobes.tech
Junior

¿En qué se diferencia un servicio headless de otros tipos de servicios?

sobes.tech AI

Respuesta de la IA

El servicio sin cabeza no tiene una dirección IP de clúster y no realiza balanceo de carga. En su lugar, DNS devuelve directamente las direcciones IP de todos los pods que coinciden con el selector del servicio. Esto permite que el cliente elija por sí mismo a qué pod conectarse o utilice su propio algoritmo de balanceo.

Opciones típicas de uso:

  • StatefulSets: Para aplicaciones que requieren una identificación de red única y almacenamiento de datos estable.
  • Discovery: Los clientes pueden descubrir directamente los pods y gestionar las conexiones.
  • Balanceo de carga propio: Las aplicaciones pueden implementar algoritmos de balanceo personalizados.

Comparación con servicios ClusterIP y NodePort:

Tipo de servicio IP de clúster Balanceo de carga DNS
ClusterIP Kubernetes Devuelve la IP del servicio
NodePort Kubernetes Devuelve la IP del servicio
Sin cabeza No No (cliente) Devuelve las direcciones IP de los pods

Definición del servicio sin cabeza en YAML:

apiVersion: v1
kind: Service
metadata:
  name: mi-servicio-sin-cabeza
spec:
  selector:
    app: mi-aplicacion # Selector para los pods
  clusterIP: None # La diferencia clave: ausencia de IP de clúster
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

En lugar de acceder a mi-servicio-sin-cabeza mediante una IP única, el cliente recibirá una lista de direcciones IP de los pods:

$ kubectl get pods -l app=mi-aplicacion -o custom-columns=NAME:.metadata.name,IP:.status.podIP
NAME            IP
mi-aplicacion-abcde    10.42.0.10
mi-aplicacion-fghij    10.42.0.11
mi-aplicacion-klmno    10.42.0.12

Luego, el cliente puede elegir cualquiera de estas direcciones IP para establecer la conexión.