# Dynu IP Updater en Kubernetes Este proyecto despliega un cliente de Dynu personalizado como `CronJob` y `Job` en un clúster K3s/Kubernetes. Su función es mantener actualizada la dirección IP pública de un grupo de dominios gestionados en Dynu usando su API. --- ## 🚀 Características * Imagen Docker ligera basada en Alpine. * Actualiza la IP pública mediante peticiones HTTP a la API de Dynu. * Guarda la IP anterior para evitar actualizaciones innecesarias. * Ejecutado periódicamente mediante `CronJob` (cada 5 minutos). * Puede ejecutarse manualmente mediante un `Job`. * Los logs de ejecución se almacenan y pueden consultarse con `kubectl logs`. --- ## 🚜 Estructura de archivos ``` . k8s-dynu-updater/ ├── cronjob.yaml # CronJob de Kubernetes ├── job-manual.yaml # Job manual para pruebas ├── kustomization.yaml # Kustomize para despliegue ├── namespace.yaml # Namespace aislado para el updater ``` La imagen Docker utilizada se crea con el script `update.sh` incrustado, que: 1. Detecta la IP pública actual. 2. Comprueba si ha cambiado desde la última ejecución. 3. Llama a la API de Dynu con usuario, grupo y contraseña hash MD5. --- ## 📂 Despliegue 1. Aplicar los manifiestos: ```bash cd k8s-dynu-updater kubectl apply -k . ``` 2. Comprobar el estado: ```bash kubectl get pods -n dynu-updater ``` --- ## ✅ Ejecución manual Para probar el script sin esperar al cron: ```bash kubectl apply -f job-manual.yaml kubectl logs -n dynu-updater job/dynu-updater-manual ``` --- ## ⚖️ Configuración del script El script embebido en la imagen Docker: ```bash USERNAME="xavor" PASSWORD="M@nabo2025" GROUP="Trabajo" ``` > La contraseña se convierte a hash MD5 antes de enviarla. --- ## 🚨 Seguridad * La contraseña se envía como hash MD5. * Se recomienda usar un "IP Update Password" diferente del de cuenta. * Puedes montar `Secret` en Kubernetes para no incluir credenciales directamente en la imagen. --- ## 🔍 Logs en Dynu Dynu registra las actualizaciones entrantes. Puedes ver líneas como: ``` /nic/update?username=xavor&group=manabovalencia&myip=62.15.155.254&myipv6=no&password=***** Good ``` Esto confirma que el pod ha funcionado correctamente. --- ## 🔍 Referencias * Dynu IP Update Protocol: [https://www.dynu.com/DynamicDNS/IP-Update-Protocol](https://www.dynu.com/DynamicDNS/IP-Update-Protocol) * API: `https://api.dynu.com/nic/update` * Cliente basado en `curl` y `cron` en Alpine Linux --- ## 📅 Mantenimiento * Se puede adaptar a otros grupos (por ejemplo: `ManaboTorrevieja`). * Si se quiere logs persistentes, se puede montar un volumen. * Si se quiere gestionar con ArgoCD, agregarlo como `Application`. --- ## 📄 Autor Xavor (2025) Este cliente se ha probado en K3s y Dynu, actualizando correctamente el grupo `ManaboValencia`.