Despliegue de Apps en GKE: De Contenedores a Servicios Públicos
Autor: Eduardo Martínez Agrelo
En el ejercicio anterior levantamos el clúster de Kubernetes, que es como construir un hotel vacío. Ahora toca llenarlo de huéspedes (aplicaciones). En el examen Associate Cloud Engineer, te pedirán desplegar contenedores y, lo más importante, hacerlos accesibles desde internet. Aquí es donde muchos fallan al confundir Pods con Servicios.
La Unidad Atómica: El Pod
En Kubernetes, no desplegamos "contenedores" directamente; desplegamos Pods. Un Pod es una cápsula que envuelve uno o más contenedores.
Concepto clave de examen: Los Pods son EFÍMEROS (mortales). Tienen una dirección IP interna, pero si el Pod muere y se reinicia (por un error o una actualización), esa IP cambia. Por tanto, nunca debes configurar tu aplicación para apuntar a la IP de un Pod directamente.
El Controlador: Deployment
Para gestionar los Pods, usamos un Deployment. Tú le dices: "Quiero 3 copias de Nginx siempre funcionando".
- El Deployment crea los 3 Pods.
- Si un nodo se rompe y mueren 2 Pods, el Deployment se da cuenta y crea 2 nuevos en otro nodo automáticamente.
- Garantiza el "Estado Deseado".
La Red Estable: Service (LoadBalancer)
Si las IPs de los Pods cambian constantemente, ¿cómo acceden los usuarios a mi web? Aquí entra el objeto Service.
Un Service es una abstracción estable. Tiene una IP que nunca cambia mientras exista el servicio. Actúa como un balanceador de carga interno que reparte el tráfico entre los Pods vivos, tengan la IP que tengan.
Tipos de Servicio para el Examen:
- ClusterIP: La opción por defecto. Solo accesible desde dentro del clúster. (Ideal para bases de datos).
- NodePort: Abre un puerto en la IP de cada nodo. (Raro en producción cloud).
- LoadBalancer: La opción mágica de la nube. Al crear este servicio, GKE habla con Google Cloud y aprovisiona una IP Externa estática regional y un Balanceador de Carga de Red real fuera del clúster. Esto es lo que permite que el tráfico de internet entre a tu clúster.
La Práctica con kubectl
Usaremos dos comandos imperativos fundamentales:
kubectl create deployment nginx-app --image=nginx: Lanza la aplicación.kubectl expose deployment nginx-app --type=LoadBalancer --port 80: Crea el servicio y solicita la IP pública.
Conclusión: Del Código al Mundo
Al finalizar este ejercicio, verás cómo una "EXTERNAL-IP" aparece en tu terminal. Al pegar esa IP en el navegador, verás la página de bienvenida de Nginx. Has completado el ciclo: Infraestructura (GKE) -> Aplicación (Deployment) -> Red (Service).