Todos los fallos del log eran el mismo: cada ciclo de 5 min intentaba detectar la IP v6 contra api.cloudflare.com/cdn-cgi/trace, agotaba los 5s de DETECTION_TIMEOUT y terminaba en "No valid IPv6 addresses were detected". 34 de 34 errores en las últimas 400 líneas; ni uno solo de IPv4. Aquí no hay IPv6: la única dirección v6 global de los nodos es la ULA de Tailscale (fd7a:115c:a1e0::/48) y no hay ruta a internet por v6. IP6_PROVIDER no estaba puesto y cae por defecto en cloudflare.trace, así que lo intentaba igual. Ahora va explícito a "none". No se pierde ningún registro: no hay AAAA de origen que mantener. Los AAAA que publica theexclusionzone.com son de Cloudflare (2606:4700::/32), sintetizados por ser proxied, y el DDNS nunca los tocó. Importa más de lo que parece: ese ruido constante es lo que haría invisible un fallo de verdad en el servicio del que dependen los tres dominios. De paso, fuera del fichero dos anotaciones que no son configuración deseada sino estado del controlador: last-applied-configuration (además describía la config de una sola zona, anterior al alta de los dos blogs) y deployment.kubernetes.io/revision, que el fichero fijaba en 1 cuando la viva iba por la 8. Verificado con kubectl diff antes de aplicar (único cambio: +IP6_PROVIDER), y después: el arranque ya no anuncia proveedor IPv6, comprueba los 7 registros A y lleva 0 errores. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
k8s-manifests
Manifests de Kubernetes gestionados por ArgoCD para el cluster chemavx.
Regla crítica: secrets en git
Los secrets con datos sensibles NO se guardan en este repo.
Los archivos de secret en este repo sólo contienen metadata (name, namespace, labels, annotations). Los campos data / stringData se gestionan manualmente fuera de git.
Por qué
Un valor placeholder como REDACTED es base64 válido que decodifica a bytes no-UTF-8. Si ArgoCD aplica ese manifest, corrompe el secret en el cluster, lo que puede:
- Romper certificados TLS (ERR_CERT_AUTHORITY_INVALID)
- Impedir que pods arranquen (
grpc: error while marshaling: string field contains invalid UTF-8) - Cifrar credenciales con una clave incorrecta
Secrets TLS (cert-manager)
Los secrets TLS los gestiona cert-manager automáticamente a partir del recurso Certificate. No crear archivos secret-*-tls.yaml con datos.
Secrets de aplicación — crear manualmente antes del primer deploy
| Namespace | Secret | Comando |
|---|---|---|
n8n |
n8n-secret |
kubectl create secret generic n8n-secret --from-literal=encryption-key='<valor-en-vaultwarden>' -n n8n |
authentik |
authentik-secret |
Ver Vaultwarden → "authentik" |
cloudflare-ddns |
cloudflare-ddns-secret |
Ver Vaultwarden → "cloudflare-ddns" |
vaultwarden |
vaultwarden-secret |
Ver Vaultwarden → "vaultwarden" |
ghost-en |
ghost-en-smtp |
kubectl create secret generic ghost-en-smtp --from-literal=SMTP_USER='<user-gmail>' --from-literal=SMTP_PASS='<app-password>' -n ghost-en |
argocd |
argocd-secret |
Gestionado por ArgoCD bootstrap |
argocd |
argocd-redis |
Gestionado por ArgoCD bootstrap |
monitoring |
kube-prometheus-stack-grafana |
Ver Vaultwarden → "grafana" |
monitoring |
kube-prometheus-stack-admission |
Generado por helm (webhook TLS) |
ArgoCD ignoreDifferences para secrets
Toda ArgoCD Application que gestione un namespace con secrets debe incluir ignoreDifferences para el campo /data:
spec:
ignoreDifferences:
- group: ""
kind: Secret
name: <nombre-del-secret>
namespace: <namespace>
jsonPointers:
- /data
syncPolicy:
syncOptions:
- RespectIgnoreDifferences=true
Ver n8n ArgoCD Application como referencia.
Pre-commit hook
Este repo incluye un pre-commit hook que rechaza commits con REDACTED en archivos .yaml.
Instalar con:
cp .githooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Renovate Bot
Secret renovate-token gestionado manualmente (no está en el repo).
Para recrearlo:
kubectl create secret generic renovate-token \
--from-literal=RENOVATE_TOKEN=<token-gitea> \
-n renovate
Token en https://git.chemavx.xyz/user/settings/applications con permisos:
issue: Read/Write, repository: Read/Write, user: Read
Imagen fijada a 38.0.0 — no actualizar a latest sin probar autenticación primero.
ArgoCD patches
Después de instalar ArgoCD aplicar:
kubectl apply -f argocd-patches/redis-patch.yaml