Proyecto projet11-kubernetes-services · la teoría útil antes (o durante) la práctica.
Un Pod es efímero: puede eliminarse, recrearse, moverse a otro nodo — y su dirección IP cambia. Imposible, por tanto, codificar «a pelo» la IP de un Pod.
El Service resuelve este problema: ofrece una dirección estable (IP + nombre DNS) y reparte automáticamente el tráfico hacia el conjunto de Pods que coinciden con su selector de labels.
El enlace Service → Pods no es una IP fija: es un selector de labels. Kubernetes mantiene solo la lista de Pods correspondientes (los Endpoints).
http://demo-clusterip).http://<ip-du-noeud>:<nodePort> (aquí http://localhost:30082).EXTERNAL-IP pasa a ser localhost (http://localhost:8090).| Tipo | Alcance | Acceso | Caso de uso típico |
|---|---|---|---|
| ClusterIP | Interno | Nombre DNS interno | Base de datos, API interna, comunicación Pod↔Pod |
| NodePort | Externo | localhost:<30000-32767> | Demo / dev local |
| LoadBalancer | Externo | IP pública (localhost en local) | Service público en producción cloud |
También existen ExternalName (alias DNS hacia un service externo) y el Ingress (enrutado HTTP/HTTPS por nombre de dominio, visto más adelante) — fuera de este proyecto.
Kubernetes ejecuta CoreDNS en el clúster. Cada Service recibe un nombre DNS:
<nom-du-service> # desde el mismo namespace
<nom-du-service>.<namespace> # desde otro namespace
<nom-du-service>.<namespace>.svc.cluster.local # nombre completo (FQDN)Así, desde cualquier Pod del mismo namespace:
curl http://demo-clusterip # resuelto por CoreDNS -> IP del Service -> un PodIP:port de los Pods correspondientes, actualizada automáticamente por Kubernetes.kubectl get endpoints demo-clusterip # muestra las IP de los Pods detrás del ServiceCurso creado por el Dr. Haythem REHOUMA — Desarrollo y despliegue de soluciones de datos