Management overview — MijnBureau

Management Paper: MijnBureau — Ervaringen en Aandachtspunten

1. Inleiding

Deze paper beschrijft de installatie-ervaringen met MijnBureau, een applicatiesuite ontwikkeld in opdracht van het Ministerie van Binnenlandse Zaken (MinBZK). De broncode is beschikbaar via github.com/MinBZK/mijn-bureau-deploy-demo. Het doel is om een overzicht te geven van de technische opzet, de knelpunten tijdens installatie en configuratie, en de lessen die hieruit getrokken kunnen worden.

2. Architectuuroverzicht

MijnBureau is een verzameling containerapplicaties die draaien op Kubernetes. De suite omvat onder andere:

De applicaties worden ontsloten via een centrale ingress-controller en delen één Keycloak-authenticatie.

3. Installatietraject

3.1 Eerste poging: Volledige Kubernetes + Traefik

Initieel is geprobeerd om MijnBureau te installeren op een handmatig geconfigureerde Kubernetes-cluster met Traefik als ingress-controller. Dit traject kende aanzienlijke problemen:

Het gebrek aan reproduceerbaarheid en de vele handmatige ingrepen maakten deze aanpak onhoudbaar.

De installatie werd uitgevoerd op Nixos, het grote voordeel van deze linux-variant is een centraal configuratiebestand. Dus in theorie zou je dan aan 2 scripts voldoende hebben om mijnbureau op te zetten.

3.2 Tweede poging: KIND (Kubernetes in Docker)

Na de problemen met de volledige Kubernetes-setup is overgestapt op KIND (Kubernetes in Docker). KIND biedt een lichtgewicht Kubernetes-omgeving die eenvoudig lokaal op te zetten en te verwijderen is. Dit verlaagde de drempel aanzienlijk.

3.3 Centraal Installatiescript (Go Template)

Een belangrijk kenmerk van MijnBureau is het centrale installatiescript op basis van Go-templates (mijnbureau.yaml.gotmpl). In dit script kan men specificeren welke modules worden geactiveerd. Het script haalt vervolgens zelfstandig alle benodigde componenten van het internet en installeert deze.

Voordelen

Nadelen

4. Technische Knelpunten en Oplossingen

Tijdens het installatie- en configuratietraject zijn talrijke problemen ondervonden. Hieronder een samenvatting.

4.1 OIDC/Authenticatie

De centrale uitdaging was het werkend krijgen van OIDC-authenticatie. Het principe is:

  1. Browser redirect naar Keycloak (HTTPS, extern)
  2. Backend (server-side) wisselt autorisatiecode om voor tokens (HTTP, intern)

Dit bracht meerdere problemen met zich mee:

ProbleemOorzaakOplossing
OIDC callback 500Backchannel-endpoints gebruikten HTTPS via externe hostname die van binnenuit niet bereikbaar wasBackchannel-endpoints gewijzigd naar interne HTTP (http://keycloak-keycloak/...)
NetworkPolicy blokkeert KeycloakEgress-regel stond poort 80 toe, maar Keycloak luistert op 8080Poort gewijzigd naar 8080 (post-DNAT)
Self-signed certificate foutenmkcert-CA niet vertrouwd in containersNODE_TLS_REJECT_UNAUTHORIZED=0 (Grist) of interne HTTP gebruiken
Keycloak frontend/backchannel gemengdKeycloak genereert URLs op basis van binnenkomend verzoekKC_HOSTNAME_BACKCHANNEL_DYNAMIC=true ingesteld
Nextcloud OIDC faaltDiscovery-URL gebruikte HTTPS, pod vertrouwt cert nietDiscovery via interne HTTP (http://keycloak-keycloak/...)

4.2 Resourcebeheer

Diverse pods vielen in CrashLoopBackOff door ontoereikende resources:

ApplicatieProbleemOplossing
Conversations-backendOOMKilled (384Mi limiet)Resource preset micro → small (768Mi)
Drive-backend-celeryLiveness/Readiness timeout (2s)timeoutSeconds verhoogd naar 15s, meer geheugen
Docs-backendLiveness-probe startup te traagstartupProbe toegevoegd met 120s window
Docs-celeryOOMKilled (384Mi)Limiet verhoogd naar 720Mi

4.3 Database Credential Drift

Een structureel probleem: elke helmfile sync kan de database-Secrets regenereren, maar de database zelf behoudt het oude wachtwoord. Dit leidde tot herhaaldelijke password authentication failed-fouten. De oplossing was steeds handmatig ALTER USER uitvoeren of Secrets patchen.

4.4 Gestripte Functionaliteit

Sommige applicaties bieden minder functionaliteit dan de originele versie. Nextcloud is hiervan het duidelijkste voorbeeld:

5. Beoordeling

Sterke punten

Zwakke punten

Aanbevelingen

  1. Vast pinnen van wachtwoorden: Gebruik een statisch, eenmalig gegenereerd wachtwoord per applicatie in plaats van deterministische afleiding, zodat herinstallatie veilig is.
  2. Uninstall-script: Ontwikkel een script dat alle resources (PVCs, Secrets, ConfigMaps) volledig opschoont.
  3. Gestandaardiseerde netwerkpolicy: Ontwerp één generieke policy per namespace in plaats van per-app policies.
  4. Productieklare TLS: Vervang mkcert door een echte PKI (Let’s Encrypt of interne CA) met automatische certificaatvernieuwing.
  5. Bitnami-alternatieven: Overweeg voor productie andere PostgreSQL-opties (bv. CloudNativePG) die beter omgaan met wachtwoordrotatie.

6. Conclusie

MijnBureau is een ambitieuze en professioneel opgezette applicatiesuite die een breed scala aan functionaliteit biedt. De gekozen architectuur (Kubernetes, Keycloak, microservices) is modern en schaalbaar. Het centrale installatiescript met Go-templates is een krachtig concept voor het beheren van een complexe multi-applicatieomgeving.

Tegelijkertijd is de installatie- en configuratie-ervaring weerbarstig. Het product is niet “plug-and-play”: elke component vereist aanpassingen, debugging en maatwerk. Het deterministische credential-systeem, hoewel elegant in theorie, veroorzaakt in de praktijk problemen bij herinstallatie. De afhankelijkheid van Bitnami-charts brengt eigen beperkingen met zich mee.

Voor organisaties die MijnBureau overwegen: reserveer voldoende tijd en expertise voor de initiële installatie. Een team met Kubernetes-ervaring is essentieel. Het product is veelbelovend maar bevindt zich nog in een fase waarin aanzienlijk technisch maatwerk nodig is.