Cronjob Kubernetes

1. Contexto del Proyecto

El 1 de junio de 2025, durante las elecciones judiciales en México, mi equipo fue responsable de una misión crítica: garantizar la descarga, validación y publicación automatizada de resultados electorales provenientes del INE (Instituto Nacional Electoral). Este flujo de datos tenía que funcionar 24/7, con una frecuencia de actualización de cada 5 minutos, y con máxima seguridad y tolerancia a fallos.

Operamos bajo un entorno regulado y expuesto mediáticamente, donde cualquier retraso, inconsistencia o vulnerabilidad sería inaceptable. Para esto, diseñamos una solución de automatización sobre Kubernetes, combinando scripting en Bash, tokens de autenticación y firmas criptográficas GPG. Aquí les comparto cómo lo hicimos.


2. Desafíos Técnicos

  • Alta disponibilidad: La solución debía ejecutarse cada 5 minutos, sin interrupciones, durante toda la jornada electoral.

  • Seguridad de datos: Era indispensable garantizar la autenticidad y no-repudio de los datos publicados.

  • Tolerancia a errores: El sistema debía manejar fallos parciales en servicios externos sin detener la operación general.

  • Infraestructura controlada: El ambiente se desplegó sobre clústeres Kubernetes autoescalables con nodos específicos para tareas cron.


3. Solución Implementada

Decidimos implementar un cron job especializado en Kubernetes, responsable de:

  1. Autenticarse con un sistema remoto mediante un API Token.

  2. Recuperar el archivo de los resultados.

  3. Verificar y validar digitalmente los datos recibidos usando GPG.

  4. Publicar los datos procesados en uno micrositio (con backup inmediato).

4. Detalles de Implementación Técnica

Archivo YAML del CronJob en Kubernetes:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: resultados-electorales
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: recolector
            image: myregistry.com/electoral-job:latest
            imagePullPolicy: Always
            env:
            - name: API_TOKEN
              valueFrom:
                secretKeyRef:
                  name: electoral-secrets
                  key: api-token
            volumeMounts:
            - name: gpg-keys
              mountPath: /gpg
            command: ["/bin/sh"]
            args: ["-c", "/scripts/monitor.sh"]
          restartPolicy: OnFailure
          volumes:
          - name: gpg-keys
            secret:
              secretName: gpg-secret

El job se ejecuta cada 5 minutos utilizando una imagen liviana basada en Alpine, con herramientas mínimas necesarias, reforzada para evitar accesos no autorizados.

Mecanismo de seguridad adicional:

  • Las claves GPG se inyectan como secreto de Kubernetes.

  • Las salidas del script se redirigen a logs centralizados para auditoría.

  • Las fallas se notifican vía webhook a un canal Slack monitoreado en tiempo real.

5. Resultados y Aprendizajes

  • 🕔 100% de uptime durante más de 24 horas continuas.

  • 🔐 0 incidentes de seguridad, gracias al control estricto de accesos y firmas.

  • 📉 Carga minimizada gracias a imágenes optimizadas y nodos taintados solo para procesamiento.

  • 🔁 Escalabilidad futura lista: el diseño permite extender el flujo a múltiples fuentes de datos judiciales o comiciales.

Este tipo de soluciones no solo demandan experiencia técnica, sino criterio operativo y sentido de urgencia. Lo que está en juego es la confianza pública y la responsabilidad institucional.

🚨 ¿Necesitas diseñar soluciones críticas como esta?

Si estás enfrentando un proyecto sensible en medios, gobierno o datos públicos, y necesitas:

  • Consultoría para despliegues en Kubernetes

  • Implementación de cron jobs confiables

  • Diseño de infraestructura segura y autoescalable

📩 Contáctame para una sesión gratuita de diagnóstico técnico.
Haz que tu próxima implementación funcione como un reloj suizo, incluso bajo presión electoral.

Category
Tags

Comments are closed