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).
## 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)
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]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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 plusssl-ca.arcodange.labdepuis le cluster.Cause DNS : le CoreDNS du cluster forwardait vers le
resolv.confdes 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.labin-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éearcodange.lab:53 → Pi-holesvia le ConfigMapcoredns-custom, mécanisme officiel k3s) n'avait jamais été appliqué (coredns-customabsent du cluster). En l'appliquant : CoreDNS part en CrashLoopBackOff — le playbook importaitcustom/*.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/*.serverdéplacé à la racine du Corefile (avec commentaire explicatif dans le rendu).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 --diffdu playbook corrigé confirme la parité avec l'état live (seuls les commentaires diffèrent).🤖 Generated with Claude Code
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]>