La Infraestructura Detrás de Este Blog
Si estás leyendo esto, tu petición HTTP atravesó un pfSense, rebotó en MetalLB, pasó por un NGINX Gateway y aterrizó en un Pod de Django corriendo sobre mi propio Kubernetes. Bienvenido.
Este post empezó como un humilde smoke test — una llamada a la API REST para verificar que el pipeline de publicación funcionaba de punta a punta. Pero un post de prueba que nadie lee merece mejor destino. Así que aquí estamos.
El Pipeline
Cada artículo de este blog sigue el mismo camino hasta llegar a tus ojos:
Texto → Markdown → API REST (JWT) → PostgreSQL →
Django (DRF) → Gunicorn → Pod → Service →
NGINX Gateway → MetalLB → pfSense → Tú
Todo esto corre en exactamente 3 nodos Kubernetes, 1 VM de servicios (PostgreSQL + NFS), y un pfSense sobre 1 único servidor Proxmox.
No hay cloud. No hay SaaS de por medio. Hay una persona, un cluster pequeño, una disciplina llamada GitOps, y una regla sagrada:
Si está en el cluster y no está en Git, es un bug.
Por Qué Construir Todo Uno Mismo
Hay formas mucho más fáciles de tener un blog. Ghost, WordPress, Hashnode, incluso un README en GitHub Pages. Pero si algo aprendí en 12 años como SRE es esto:
No entiendes realmente un sistema hasta que lo has tenido que recovery a las 2 AM.
Construir y operar tu propia infraestructura — aunque sea pequeña — te obliga a tomar decisiones que en la nube están abstraídas. Cómo cablear networking entre VMs. Cómo renovar certificados TLS sin que se venza el que nadie miró. Cómo hacer rolling updates de un pod sin matar las conexiones activas. Cómo darte cuenta, en medio de una auditoría de puertos, que tu etcd está expuesto en la LAN sin firewall (spoiler: me pasó).
Cada error duele más cuando el cluster es tuyo. Y por eso se aprende más.
El Stack en 30 Segundos
| Capa | Herramienta | Nota |
|---|---|---|
| Virtualización | Proxmox VE | KVM, maduro, manejable |
| Firewall | pfSense + OpenVPN | Zero-trust; sin VPN no hay SSH |
| Orquestación | Kubernetes 1.34 (kubeadm) | 3 nodos, 4 vCPU / 8 GB c/u |
| Datos | PostgreSQL 16 + NFS | Compute y storage separados |
| Red K8s | Calico + MetalLB + NGINX Gateway | Cloud-native sobre bare-metal |
| GitOps | ArgoCD (app-of-apps) | Git es la fuente de verdad, siempre |
| TLS | cert-manager + Let's Encrypt | DNS-01, renovación automática |
| CMS | Django 5.2 + DRF + SimpleJWT | Python puro, sin magia |
Cada componente tiene su propia historia, y la mayoría de esas historias empiezan con "se me cayó a las 2 AM y descubrí que..."
Lo Que Viene
El homelab es un organismo vivo. En los próximos posts planeo cubrir:
- Migración completa a Gateway API (jubilando los últimos Ingress)
- Backups automáticos de PostgreSQL a almacenamiento frío
- Un nodo con GPU para experimentar con modelos locales
- Más patrones de ArgoCD que realmente funcionan en clusters pequeños
Este sitio corre sobre Kubernetes auto-gestionado. Este post fue escrito por un humano y publicado vía la API REST del propio blog. Todo lo demás — build, deploy, TLS, GitOps sync — es automático.
Lo que empezó como un test de integración terminó siendo una declaración de principios. Me gusta pensar que es el mejor destino posible para un post de prueba.