120 lines
2.8 KiB
Markdown
120 lines
2.8 KiB
Markdown
# 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`.
|