Files
k8s-manifests/README.md
T
chemavxandClaude Opus 4.8 07c872e847 tools: auditor de exports contra el cluster
Deja en el repo lo que hoy destapó que argocd-redis, el daemon.json de gitea y
siete imágenes llevaban meses diciendo una cosa mientras el cluster hacía otra.

Compara cada manifiesto con el objeto vivo, en las dos direcciones (el fichero
afirma algo falso / hay algo desplegado que el fichero no menciona / el objeto no
existe). Sólo mira los directorios fuera de ArgoCD, que es donde no hay nadie
comprobando: en los demás ArgoCD ya marca OutOfSync cada 3 minutos. La lista de
directorios se deduce preguntando a ArgoCD por los paths de sus Applications, así
que si mañana un namespace entra en GitOps el script se ajusta solo.

Las excepciones conocidas van en excepciones-auditoria.yaml CON su motivo, para
que lo normal sea "hallazgos NUEVOS: 0" y cualquier cosa que asome merezca una
mirada. Un informe que siempre saca ruido deja de leerse — que es justo el fallo
que se ha estado corrigiendo estos días. El script también avisa cuando una
excepción ya no se dispara: se arregló y la entrada sobra.

Probado viéndolo fallar, no sólo pasar: inyectadas a propósito una avería de cada
tipo (imagen cambiada, env borrada del fichero, objeto inexistente) y las caza
las tres saliendo con código 1. Al probarlo apareció un fallo propio: con -d
marcaba como sobrantes las excepciones de los directorios no barridos; ahora sólo
lo afirma tras un barrido completo.

No toca nada (sólo lectura), nunca compara valores de Secret —sólo nombres de
clave— y se salta lo que ignora .gitignore.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:37:05 +00:00

3.5 KiB

k8s-manifests

Manifests de Kubernetes gestionados por ArgoCD para el cluster chemavx.

Ojo: no todo lo de aquí lo aplica ArgoCD. Unos 11 directorios (monitoring, argocd, authentik, gitea, homarr, vaultwarden, cloudflare-ddns, cluster-wide…) se gestionan a mano: ahí un commit no despliega nada, hay que editar el fichero y hacer kubectl apply. Para comprobar que esos ficheros siguen describiendo lo desplegado: python3 tools/audita-exports.py (ver tools/README.md).

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