Aanleiding
De pipeline blokkeerde op drie kritieke kwetsbaarheden in perl-base in de Redis-image. Een nieuwere Redis-versie loste dat niet op, want alle drie de versies hadden exact dezelfde bevindingen, terwijl Debian de fix al had. De officiële image was simpelweg niet herbouwd. De alpine-variant scande schoon, maar mist bash, en de chart gebruikt bash in de preStop-hooks die de gecontroleerde failover regelen. Die herschrijven is een groter risico dan de CVE's.
De oplossing: een eigen herbouw van dezelfde officiële image, met alleen de actuele Debian-updates. Zie Als upstream niet herbouwt. Dat was meteen het moment om de hele release te moderniseren.
Wat er veranderde
| Oud | Nieuw | |
|---|---|---|
| Chart | oudere community-chart | nieuwe versie, eigen repository |
| Image | officieel, niet herbouwd | geharde herbouw, gepind op digest |
| Toegang | één wachtwoord | ACL's per applicatie, secrets in Infisical |
| Geheugenbeleid | noeviction | volatile-lru, met een limiet |
| CI | — | Kustomize- en Helm-render, Kubeconform, Trivy op manifests en images |
De volgorde die ik omgooide
Het oorspronkelijke plan was: nieuw omhoog, oud omlaag, applicatie omzetten. Bij nader inzien was dat onveilig. De enige gebruiker van Redis bleek Infisical te zijn, de secrets-manager. En Infisical is ook de bron van de ACL-secrets. Wie de oude release eerst stopt, sluit zichzelf buiten.
Dat de secrets-manager de enige consument was, had ik vastgesteld door alle Deployments, StatefulSets en CronJobs in het cluster te scannen op verwijzingen naar de oude service.
De gevolgde volgorde:
- de nieuwe release naast de oude uitrollen (geen naamconflicten in services, PVC's of PDB's);
- de dataset migreren, ronde 1;
- Infisical omzetten en verifiëren;
- de delta migreren, ronde 2;
- pas dan de oude release stoppen, met de PVC's en een dump bewaard als terugweg.
Resultaat
- Nul seconden downtime.
- Na acht uur onder belasting: 69 actieve verbindingen, ~20.800 keys, nul geweigerde verbindingen, en de oude release volledig stil.
- Een migratieverslag met de commando's, de gemeten uitkomsten, de terugweg en de open punten.
- Documentatie om een nieuwe applicatie toegang te geven: ACL toevoegen en het bijbehorende secret in Infisical.
Les
Begin een migratie met de vraag wie de dienst eigenlijk gebruikt, en of een van die gebruikers jouw migratie zelf nodig heeft.