fix(dns): coredns-custom — importer les blocs *.server à la racine du Corefile (sinon CoreDNS crash) #40

Merged
arcodange merged 1 commits from arcodange/coredns-custom-import into main 2026-07-24 12:44:34 +02:00
Owner

Incident du matin (2026-07-24, ~09h44) : « le https ne fonctionne plus »

Le certificat wildcard *.arcodange.lab (durée 24 h, chaîne cert-manager → step-issuer → step-ca) a expiré sans être renouvelé : step-issuer ne résolvait plus ssl-ca.arcodange.lab depuis le cluster.

Cause DNS : le CoreDNS du cluster forwardait vers le resolv.conf des nœuds, qui liste la Pi-hole et la box en IPv6 (RDNSS) — la box répond NXDOMAIN pour .arcodange.lab → roulette russe sur chaque résolution .lab in-cluster. Les renouvellements quotidiens ne tenaient que parce que le provisioner de step-issuer restait initialisé en mémoire ; les ~90 crashs de la nuit (incident pi1) ont forcé une ré-init → blocage.

Le remède existait déjà… mais jamais appliqué, et buggé

k3s_dns.yml (zone dédiée arcodange.lab:53 → Pi-holes via le ConfigMap coredns-custom, mécanisme officiel k3s) n'avait jamais été appliqué (coredns-custom absent du cluster). En l'appliquant : CoreDNS part en CrashLoopBackOff — le playbook importait custom/*.server à l'intérieur du bloc .:53 {}, or ces fichiers contiennent des blocs serveur complets qui ne se parsent qu'à la racine (Unknown directive 'arcodange.lab:53').

Changements

  • import /etc/coredns/custom/*.server déplacé à la racine du Corefile (avec commentaire explicatif dans le rendu).
  • Restauration du plugin loadbalance (présent dans le Corefile stock k3s, perdu par le playbook).

Déjà appliqué en live

ConfigMaps patchés le 2026-07-24 (~10h10), CoreDNS Ready, step-issuer reparti : wildcard renouvelé en 36 s (valide jusqu'au 25/07 08:11 UTC), openssl verify → OK, curl strict (sans -k) vert sur gitea/argocd/grafana. Un --check --diff du playbook corrigé confirme la parité avec l'état live (seuls les commentaires diffèrent).

🤖 Generated with Claude Code

## Incident du matin (2026-07-24, ~09h44) : « le https ne fonctionne plus » Le certificat wildcard `*.arcodange.lab` (durée 24 h, chaîne cert-manager → step-issuer → step-ca) a **expiré sans être renouvelé** : step-issuer ne résolvait plus `ssl-ca.arcodange.lab` depuis le cluster. **Cause DNS** : le CoreDNS du cluster forwardait vers le `resolv.conf` des nœuds, qui liste la Pi-hole **et la box en IPv6 (RDNSS)** — la box répond NXDOMAIN pour `.arcodange.lab` → roulette russe sur chaque résolution `.lab` in-cluster. Les renouvellements quotidiens ne tenaient que parce que le provisioner de step-issuer restait initialisé en mémoire ; les ~90 crashs de la nuit (incident pi1) ont forcé une ré-init → blocage. ## Le remède existait déjà… mais jamais appliqué, et buggé `k3s_dns.yml` (zone dédiée `arcodange.lab:53 → Pi-holes` via le ConfigMap `coredns-custom`, mécanisme officiel k3s) n'avait **jamais été appliqué** (`coredns-custom` absent du cluster). En l'appliquant : **CoreDNS part en CrashLoopBackOff** — le playbook importait `custom/*.server` **à l'intérieur** du bloc `.:53 {}`, or ces fichiers contiennent des blocs serveur complets qui ne se parsent qu'à la racine (`Unknown directive 'arcodange.lab:53'`). ## Changements - `import /etc/coredns/custom/*.server` déplacé **à la racine** du Corefile (avec commentaire explicatif dans le rendu). - Restauration du plugin `loadbalance` (présent dans le Corefile stock k3s, perdu par le playbook). ## Déjà appliqué en live ConfigMaps patchés le 2026-07-24 (~10h10), CoreDNS Ready, step-issuer reparti : **wildcard renouvelé en 36 s** (valide jusqu'au 25/07 08:11 UTC), `openssl verify → OK`, curl strict (sans `-k`) vert sur gitea/argocd/grafana. Un `--check --diff` du playbook corrigé confirme la parité avec l'état live (seuls les commentaires diffèrent). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
arcodange added 1 commit 2026-07-24 10:14:09 +02:00
The never-yet-applied k3s_dns.yml placed 'import /etc/coredns/custom/*.server'
INSIDE the .:53 server block. *.server files hold full server blocks
(arcodange.lab:53 {…}), which only parse at Corefile root — inside a block
CoreDNS dies at startup with "Unknown directive 'arcodange.lab:53'"
(CrashLoopBackOff, cluster DNS fully down; lived it on 2026-07-24 while
restoring the expired *.arcodange.lab certificate).

Also restores the stock 'loadbalance' plugin dropped by the playbook.

Context: cluster CoreDNS forwarded to the node's resolv.conf, which lists the
ISP box's IPv6 RDNSS next to the Pi-holes — NXDOMAIN roulette for *.lab names.
That's what left step-issuer unable to reach ssl-ca.arcodange.lab:8443 and let
the 24h wildcard cert expire this morning. The (fixed) playbook pins .lab
resolution to the Pi-holes via the coredns-custom ConfigMap; applied live on
2026-07-24, wildcard renewed, strict TLS verified on gitea/argocd/grafana.

Co-Authored-By: Claude Fable 5 <[email protected]>
arcodange merged commit 1ed3154668 into main 2026-07-24 12:44:34 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: arcodange-org/factory#40