Servicios

Un Service en Kubernetes es un recurso que proporciona una abstracción para exponer y acceder a un conjunto de pods de manera estable y confiable. Los pods son efímeros y sus IPs pueden cambiar, por lo que un Service actúa como un punto fijo de entrada que redirige el tráfico a los pods correctos, incluso si estos son recreados o se mueven a otro nodo.
Funciones principales de un servicio:
-
Descubrimiento y balanceo de carga:
-
Distribuye automáticamente el tráfico entre los pods que coincidan con el selector definido.
-
-
Dirección IP estable:
-
Mientras que los pods tienen IPs dinámicas, el Service proporciona una IP virtual estable (ClusterIP) o un nombre DNS interno.
-
-
Exposición de la aplicación:
-
Puede exponer una aplicación internamente dentro del clúster o externamente hacia internet.
-
Tipos de servicios en Kubernetes:
-
ClusterIP (por defecto):
-
Expone el servicio internamente dentro del clúster. No es accesible desde fuera.
-
-
NodePort:
-
Abre un puerto en cada nodo del clúster y redirige el tráfico a los pods.
-
-
LoadBalancer:
-
Crea un balanceador de carga externo (si el clúster está en una nube como AWS, GCP, Azure) y lo conecta al servicio.
-
-
ExternalName:
-
No redirige tráfico, pero mapea un nombre DNS interno a un nombre DNS externo.
-
📝 Manifiesto de "Service" tipo NodePort
---
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
type: NodePort
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
Funcionamiento
-
El selector
app: myapphace que este Service envíe tráfico a todos los pods que tengan la etiquetaapp=myapp. -
El puerto
80del Service se mapea al puerto80del pod (targetPort).
🔧 Comandos
# Aplica el manifiesto o los cambios
kubectl apply -f myapp.yaml
# Elimina el manifiesto
kubectl delete -f myapp.yaml
# Comprueba
kubectl get all
NAME READY STATUS RESTARTS AGE
pod/myapp 1/1 Running 0 15m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 44h
service/service1 NodePort 10.96.146.193 <none> 80:31926/TCP 15m