chemavxandClaude Opus 4.8 7b50e4f382 tools: la auditoría de manifiestos, en un temporizador semanal
Sábados 07:00 UTC como servicio de host en chemavx-k8, fuera del cluster, igual
que seo-watch y el canario de hermes. Separado a propósito de esos dos (domingo
06:00 y lunes 05:30): si algo falla, se sabe cuál sin desenredar tres avisos de
la misma mañana.

Callado por diseño: sólo escribe a Telegram si hay hallazgos nuevos Y cambian
respecto a la semana anterior. Si la deriva sigue igual porque aún no se ha
arreglado, no insiste — un aviso semanal que siempre llega deja de leerse, que
es el fallo que se ha estado corrigiendo estos días.

Rompen el silencio cuatro cosas: deriva nueva; el repo local por detrás de
origin (se habría comparado contra ficheros viejos); excepciones que ya no se
disparan; y que el propio auditor haya fallado, porque un vigilante roto no es
un "todo bien".

Probado viéndolo hacer las cuatro, no sólo la buena, y por el camino real
(systemctl start, con el entorno del unit, no desde mi shell). Dos cosas que
salieron de probarlo:

- La primera versión avisaba de "cambios sin commitear". Es estado de trabajo
  normal y la copia local es justo la intención que hay que comparar, así que
  habría mandado ruido cada semana. Ahora eso es contexto, no motivo.
- Un error de sintaxis en el auditor hace que Python salga con código 1, EL
  MISMO que "hay deriva": el aviso habría dicho "los ficheros no coinciden" con
  el volcado de una traza. Ya no basta el código de salida, se exige además que
  el informe traiga su línea de resumen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:46:46 +00:00
2026-07-18 14:57:46 +00:00
2026-07-18 14:57:46 +00:00

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

S
Description
Kubernetes manifests
Readme
1.4 MiB
Languages
Python 77.3%
JavaScript 19.6%
Shell 3.1%