añadido readme
This commit is contained in:
119
readme.md
Normal file
119
readme.md
Normal file
@ -0,0 +1,119 @@
|
||||
# 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="ManaboValencia"
|
||||
```
|
||||
|
||||
> 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`.
|
Reference in New Issue
Block a user