Los Services en Kubernetes son uno de los conceptos fundamentales para desplegar aplicaciones distribuidas de forma robusta y escalable. Pero su importancia va mucho más allá de exponer Pods: son también una pieza clave para la monitorización y la observabilidad de nuestros sistemas.
¿Qué es un Service en Kubernetes?
Un Service es un recurso que permite exponer uno o varios Pods bajo una IP virtual y un nombre DNS estable dentro del clúster, permitiendo su acceso de manera predecible, independientemente de la IP real de los Pods, que puede cambiar dinámicamente.
📄 Ejemplo básico de Service:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
Este Service expone a todos los Pods con la etiqueta app: myapp
en el puerto 80, redirigiendo internamente al 8080 del contenedor.
Tipos de Services
Tipo | Accesibilidad | Uso habitual |
---|---|---|
ClusterIP | Interna al clúster | Comunicación entre microservicios |
NodePort | Externo, vía nodos | Acceso básico desde fuera del clúster |
LoadBalancer | Externo (Cloud) | Publicación de servicios en producción |
ExternalName | Alias DNS externo | Integración con servicios externos |
Importancia en la Monitorización y Observabilidad
✅ Visibilidad de la topología
Los Services son el punto de entrada y de conexión entre componentes. Son esenciales para entender el flujo de datos en la arquitectura.
🔢 Métricas clave recogidas por herramientas de monitorización
- Latencia
- Throughput (peticiones por segundo)
- Códigos de error (4xx, 5xx)
- Tiempo de respuesta
- Saturación de conexiones
🔍 Trazabilidad y detección de fallos
Los Services permiten trazar llamadas entre microservicios y aislar errores en sistemas complejos. Herramientas como Dynatrace, Prometheus, Istio, OpenTelemetry, etc., observan el comportamiento desde y hacia estos puntos lógicos.
Consultar Services en el clúster con kubectl
Puedes listar todos los servicios en todos los namespaces con:
kubectl get services -A
O en un namespace específico (por ejemplo, default
):
kubectl get svc -n default
Para obtener más detalles de un Service:
kubectl describe svc myapp-service -n default
Esto te mostrará los endpoints, etiquetas, puertos expuestos, tipo de Service y qué Pods están siendo seleccionados.
También puedes ver los endpoints concretos (IPs de los Pods a los que apunta el Service):
kubectl get endpoints myapp-service -n default
🔎 Esquema: relación entre usuario, Services y Pods
+---------------------------+
| Internet / Usuario |
+-------------+-------------+
|
v
+---------------------+
| LoadBalancer SVC | <-- Expuesto externamente
+---------+-----------+
|
v
+-----------------------+
| ClusterIP Service | <-- Servicio interno
+----------+------------+
|
+-----------+------------+
| | |
v v v
+---------+ +---------+ +---------+
| Pod A | | Pod B | | Pod C | <-- Replicas gestionada Deployment
+---------+ +---------+ +---------+
Resumiendo
Los Services en Kubernetes no solo conectan Pods: conectan personas con productos, sistemas con datos y problemas con soluciones. Son el punto estratégico desde donde se pueden observar, medir, diagnosticar y mejorar los sistemas modernos.
Toda estrategia de monitorización efectiva en Kubernetes pasa por entender y observar estos componentes.