<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Intermediate on Tom Meurs</title>
    <link>https://tommeurs.nl/nl/level/intermediate/</link>
    <description>Recent content in Intermediate on Tom Meurs</description>
    <generator>Hugo</generator>
    <language>nl</language>
    <copyright>© Tom Meurs</copyright>
    <lastBuildDate>Tue, 06 Oct 2026 09:00:00 +0200</lastBuildDate>
    <atom:link href="https://tommeurs.nl/nl/level/intermediate/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Vendor lock-in bij Talos Linux: vijf vragen, op m&#39;n eigen nodes</title>
      <link>https://tommeurs.nl/nl/posts/talos-linux-vendor-lock-in/</link>
      <pubDate>Tue, 06 Oct 2026 09:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/talos-linux-vendor-lock-in/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; De vijf vragen uit m&amp;rsquo;n licentiepost heb ik eens losgelaten op het OS onder m&amp;rsquo;n eigen cluster. De licentie houdt stand. De vendor lock-in van &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Een Linux-distributie zonder shell, zonder SSH en zonder package manager, volledig beheerd via een API. De node is configuratie in plaats van een machine waarop je inlogt.&#34;&gt;Talos&lt;/span&gt;&#xA; Linux zit in twee defaults die naar servers van Sidero wijzen, in de &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Business Source License 1.1: de broncode is gepubliceerd en vrij te gebruiken, behalve voor het gebruik dat de licentiegever uitsluit, meestal een hosted dienst die met de zijne concurreert. Elke release valt na een vast aantal jaren terug op een open source-licentie.&#34;&gt;BSL&lt;/span&gt;&#xA;-code die Sidero steeds naast de &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Mozilla Public License 2.0: een copyleft-licentie per bestand. Wijzigingen in MPL-bestanden blijven open als je ze verspreidt, terwijl code in andere bestanden elke licentie mag hebben.&#34;&gt;MPL&lt;/span&gt;&#xA;-kern zet, en in een bedrijf dat sinds 14 september van Yardi is.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Het verdienmodel van je dependency hoort in je threat model</title>
      <link>https://tommeurs.nl/nl/posts/license-change-supply-chain-risk/</link>
      <pubDate>Wed, 23 Sep 2026 19:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/license-change-supply-chain-risk/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Een leverancier die z&amp;rsquo;n gratis editie bevriest hoort in je risicoregister, naast het certificaat dat verloopt. Zesendertig gedateerde gevallen hieronder, drie soorten gebeurtenis, en vijf vragen om je eigen stack langs te leggen. In mijn eigen register ontbrak de Vault-regel. Drie jaar lang.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Op 11 september publiceerde de CEO van Portainer &lt;a href=&#34;https://www.portainer.io/blog/portainer-3-0-is-coming&#34;&gt;&amp;ldquo;Portainer 3.0 is coming, and here&amp;rsquo;s what it means for you&amp;rdquo;&lt;/a&gt;. Ik las hem de maandag erna en haalde m&amp;rsquo;n schouders op.&lt;/p&gt;</description>
    </item>
    <item>
      <title>KVM/QEMU scripts en aliases: maak virtualisatie echt bruikbaar</title>
      <link>https://tommeurs.nl/nl/posts/kvm-qemu-scripts-aliases/</link>
      <pubDate>Wed, 03 Jun 2026 21:17:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kvm-qemu-scripts-aliases/</guid>
      <description>&lt;p&gt;Ik draai de hele dag VMs. Een Kubernetes-deployment die ik wil testen, een distro waar ik over las, Windows voor die ene koppige applicatie, een experiment dat ik liever niet op m&amp;rsquo;n eigen machine loslaat. Daar is KVM/QEMU gewoon de juiste tool voor. Het zit in de Linux-kernel en draait bijna op native snelheid. Niks erin belt naar huis, en geen vendor die bepaalt wat ik met mijn eigen hardware mag.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infrastructure as Code voor mensen die moeten begrijpen</title>
      <link>https://tommeurs.nl/nl/posts/infrastructure-as-code-control/</link>
      <pubDate>Sat, 30 May 2026 19:45:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/infrastructure-as-code-control/</guid>
      <description>&lt;p&gt;Iemand opent een cloud console, klikt door een wizard, laat de defaults staan, en er verschijnt een resource. Het dashboard springt op groen en iedereen gaat door. Zo wordt er in 2026 nog steeds een hoop infrastructuur gebouwd, en ik heb er zelf ook zo gebouwd.&lt;/p&gt;&#xA;&lt;p&gt;Lang hou ik dat niet vol. Klik ik op een knop en verschijnt er infrastructuur, dan voelt het geleend. Ik wil de configuratie ergens opgeschreven hebben waar ik hem terug kan lezen, en ik wil weten waaróm iets bestaat, niet alleen dát het bestaat. De console geeft me een groen vinkje. Meer niet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backup-strategie voor je homelab: de 3-2-1-regel in de praktijk</title>
      <link>https://tommeurs.nl/nl/posts/homelab-backup-strategy/</link>
      <pubDate>Mon, 18 May 2026 19:30:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/homelab-backup-strategy/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Drie kopieën, twee soorten media, één ervan buiten de deur. Restic voor bestanden, Velero voor het cluster, een bucket bij Backblaze als offsite kopie, en een restore-test op een vast moment. Bij mij kost dat zo&amp;rsquo;n 5 euro per maand, en die restore-test is het onderdeel waar ik mezelf nog steeds toe moet zetten.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Stel dat de disk in je &lt;a href=&#34;https://tommeurs.nl/nl/posts/k3s-cluster-setup/&#34;&gt;homelab&lt;/a&gt; vannacht sterft. Niet corrupt raken, niet eerst een week SMART-waarschuwingen geven, gewoon weg. De git-server met elke repo waar je om geeft, de password vault, vijftien jaar familiefoto&amp;rsquo;s, de home automation die het huis aanstuurt. Allemaal op een drive die heeft besloten dat het mooi geweest is.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grafana-dashboards die daadwerkelijk gebruikt worden</title>
      <link>https://tommeurs.nl/nl/posts/grafana-dashboards-that-work/</link>
      <pubDate>Sat, 02 May 2026 20:15:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/grafana-dashboards-that-work/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Elk dashboard beantwoordt één vraag, en binnen vijf seconden weet ik of ik me druk moet maken. Vier soorten dashboards dekken alles, variabelen en links knopen ze aan elkaar, en de JSON staat in Git. M&amp;rsquo;n homelab draait er vijf, en wat een maand niet geopend wordt gooi ik weg.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Je hebt Grafana. Je hebt &lt;a href=&#34;https://tommeurs.nl/nl/posts/prometheus-thanos-metrics/&#34;&gt;Prometheus-metrics&lt;/a&gt;. Je hebt &lt;a href=&#34;https://tommeurs.nl/nl/posts/loki-kubernetes-logging/&#34;&gt;logs in Loki&lt;/a&gt; en &lt;a href=&#34;https://tommeurs.nl/nl/posts/tempo-distributed-tracing/&#34;&gt;traces in Tempo&lt;/a&gt;. De data staat er allemaal.&lt;/p&gt;&#xA;&lt;p&gt;Je hebt ook 47 dashboards die niemand opent.&lt;/p&gt;</description>
    </item>
    <item>
      <title>K3s cluster setup op refurbished mini-PCs</title>
      <link>https://tommeurs.nl/nl/posts/k3s-cluster-setup/</link>
      <pubDate>Fri, 24 Apr 2026 21:12:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/k3s-cluster-setup/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Drie refurbished mini-PCs, K3s met embedded etcd, kube-vip voor één API-adres dat een dode node overleeft, en daarbovenop MetalLB, Traefik en Longhorn. Zo&amp;rsquo;n €450 aan hardware en een middag. Hieronder staan de commando&amp;rsquo;s, in de volgorde waarin ik ze heb gedraaid.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Drie mini-PCs staan op een plank bij mij thuis. Samen draaien ze m&amp;rsquo;n GitLab, m&amp;rsquo;n monitoring-stack, home automation, file sync, een wachtwoordmanager en nog een stapel dingen die ik liever niet op andermans computer zet. De hele setup kostte minder dan één maand van de managed-Kubernetes-rekening voor hetzelfde, en ik weet wat elke laag doet omdat ik hem er zelf in heb gezet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cert-manager: automatische TLS certificaten in Kubernetes</title>
      <link>https://tommeurs.nl/nl/posts/cert-manager-kubernetes-tls/</link>
      <pubDate>Sun, 12 Apr 2026 21:38:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/cert-manager-kubernetes-tls/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; cert-manager houdt Certificate-resources in de gaten, haalt het certificaat bij Let&amp;rsquo;s Encrypt, je eigen CA of Vault, zet het in een Secret en vernieuwt het 30 dagen voor het verloopt. Ik draai één DNS-01 ClusterIssuer via Cloudflare en één wildcard-certificaat, kopieer die Secret naar de namespaces die hem nodig hebben, en laat twee Prometheus-alerts me vertellen wanneer een vernieuwing vastloopt. Niks meer om te onthouden.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Jarenlang vernieuwde ik m&amp;rsquo;n certificaten zoals de meeste mensen dat doen. Een agenda-reminder, een handmatige &lt;code&gt;certbot&lt;/code&gt;-run, en de hoop dat ik er op tijd bij was. Dat werkte. Tot de ochtend waarop een service me om de oren sloeg met certfouten en ik geen idee had waarom. De renewal-cron bleek al weken te falen. Stilletjes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Distributed tracing met Tempo en OpenTelemetry</title>
      <link>https://tommeurs.nl/nl/posts/tempo-distributed-tracing/</link>
      <pubDate>Sat, 04 Apr 2026 19:47:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/tempo-distributed-tracing/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Tempo is waar m&amp;rsquo;n traces heen gaan. De OpenTelemetry Collector ontvangt spans van elke service, tail sampling houdt elke error en elke trage request vast, en Tempo schrijft de rest naar MinIO met drie dagen retentie. Vanaf een span in Grafana klik ik door naar de Loki-regels met dezelfde trace ID. M&amp;rsquo;n productie-values staan onderaan.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Je &lt;a href=&#34;https://tommeurs.nl/nl/posts/prometheus-thanos-metrics/&#34;&gt;metrics&lt;/a&gt; zeggen dat iets traag is. Je &lt;a href=&#34;https://tommeurs.nl/nl/posts/loki-kubernetes-logging/&#34;&gt;logs&lt;/a&gt; zeggen dat er errors waren. Prima. Welke request faalde, waar kwam die latency vandaan, en welke service in de keten vrat de timeout op? Geen van beide kan je dat vertellen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Loki voor Kubernetes logging: de Prometheus-achtige aanpak</title>
      <link>https://tommeurs.nl/nl/posts/loki-kubernetes-logging/</link>
      <pubDate>Tue, 31 Mar 2026 21:15:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/loki-kubernetes-logging/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Loki indexeert labels en bewaart de logtekst als gecomprimeerde chunks, dus een maand logs past op commodity hardware. Wat je inlevert is full-text search. Hieronder de single-binary-install waar ik iedereen mee laat beginnen, dezelfde chart op MinIO met drie replicas, en de knoppen waar ik pas aan zat toen het volume echt was.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Je hebt &lt;a href=&#34;https://tommeurs.nl/nl/posts/prometheus-thanos-metrics/&#34;&gt;Prometheus voor metrics&lt;/a&gt;, dus je ziet al wat er in je clusters gebeurt. Metrics vertellen je dat de latency om 14:32 piekte. Ze vertellen je niet dat de payment service een null pointer gooide omdat iemand een config-wijziging met een typefout uitrolde. Daarvoor heb je de logregel nodig.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NixOS als hypervisor: KVM en QEMU kunnen alles</title>
      <link>https://tommeurs.nl/nl/posts/nixos-hypervisor-kvm-qemu/</link>
      <pubDate>Thu, 19 Mar 2026 21:52:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/nixos-hypervisor-kvm-qemu/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; KVM en QEMU zijn de motor in Proxmox en het grootste deel van de cloud die je huurt. Op NixOS, met libvirt erbovenop, is die motor één blok config, en live migratie, memory ballooning, GPU passthrough, SR-IOV en CPU pinning zijn elk één commando of één stukje XML verderop. Wat Proxmox toevoegt is het dashboard en de delegatie, en hieronder ben ik eerlijk over wat dat waard is.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Vraag eens rond hoe je thuis een &amp;ldquo;echte&amp;rdquo; hypervisor draait en je krijgt hetzelfde rijtje. VMware, Hyper-V, of op z&amp;rsquo;n minst Proxmox. Iets met een web-UI, een clustering-tab en een marketingpagina vol enterprise features. Dat rijtje zit er zo diep in dat VMs draaien zonder zo&amp;rsquo;n product voelt als bochten afsnijden. Ik neem het niemand kwalijk. De marketing is goed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch vs NixOS als werkstation: professioneel en privégebruik</title>
      <link>https://tommeurs.nl/nl/posts/arch-vs-nixos-workstation/</link>
      <pubDate>Tue, 03 Mar 2026 21:28:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/arch-vs-nixos-workstation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Arch en NixOS heb ik allebei als dagelijkse machine gedraaid, en vandaag is het Arch op beide desktops en NixOS op de servers. Arch z&amp;rsquo;n reputatie voor kapotgaan is meestal een ontbrekende snapshot. Met btrfs, Snapper, dotfiles in git en een packagelijst kost een rollback 2 minuten en is de angst voor updates weg. NixOS verdient z&amp;rsquo;n leercurve terug zodra meerdere machines identiek moeten blijven, en op een server zou ik niks anders meer willen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CTF en forensics skills die je een betere DevOps engineer maken</title>
      <link>https://tommeurs.nl/nl/posts/ctf-skills-for-devops/</link>
      <pubDate>Fri, 27 Feb 2026 19:52:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/ctf-skills-for-devops/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Ik zit &amp;rsquo;s avonds op Hack The Box en daar word ik beter van in m&amp;rsquo;n dagelijkse werk, en dat is platform engineering, geen pentesting. De eerste tien minuten op een &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Capture The Flag: een security-oefening waarin je inbreekt op een opzettelijk kwetsbaar systeem en dat bewijst door een verstopt token, de flag, op te halen.&#34;&gt;CTF&lt;/span&gt;&#xA;-box en de eerste tien minuten op een kapotte productieserver zijn dezelfde loop, met &amp;ldquo;flag&amp;rdquo; in plaats van &amp;ldquo;incident&amp;rdquo;. Hieronder de toolkit waar die loop op draait, van één host tot in een Kubernetes-pod, per commando met het CTF-gebruik en het werkgebruik naast elkaar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wanneer je Kubernetes niet moet gebruiken</title>
      <link>https://tommeurs.nl/nl/posts/when-not-to-use-kubernetes/</link>
      <pubDate>Sat, 17 Jan 2026 10:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/when-not-to-use-kubernetes/</guid>
      <description>&lt;p&gt;Ik schrijf veel over Kubernetes en ik draai het thuis elke dag. Ik vind het mooi spul.&lt;/p&gt;&#xA;&lt;p&gt;Dus het verbaast je misschien dat ik een flink deel van m&amp;rsquo;n tijd besteed aan mensen ervan afpraten.&lt;/p&gt;&#xA;&lt;p&gt;Het gaat steeds zo. Een klein team, één product, een roadmap vol features waar klanten op wachten, en iemand heeft besloten dat de eerste mijlpaal een Kubernetes-cluster is. Minimaal drie nodes, etcd, een &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Container Network Interface: het plugin-contract waarmee Kubernetes een pod zijn netwerk geeft. Cilium, Calico en Flannel zijn implementaties ervan.&#34;&gt;CNI&lt;/span&gt;&#xA;, een ingress controller, cert-manager, een monitoringstack. Weken werk voordat één klant iets ziet. Iedereen knikt mee, want zo hoort een serieuze setup er nu eenmaal uit te zien.&lt;/p&gt;</description>
    </item>
    <item>
      <title>YubiKey &#43; pass &#43; GPG &#43; SSH: één key om ze allemaal te beheren</title>
      <link>https://tommeurs.nl/nl/posts/yubikey-pass-gpg-ssh/</link>
      <pubDate>Tue, 13 Jan 2026 17:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/yubikey-pass-gpg-ssh/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Eén YubiKey draagt een GPG-key met een signing-, een encryption- en een authentication-subkey. gpg-agent geeft de authentication-subkey aan SSH, git signt met de signing-subkey en pass ontsleutelt met de encryption-subkey, dus één PIN &amp;rsquo;s ochtends en een touch per actie vervangen elk wachtwoord dat ik vroeger typte. Het SSH-deel alleen is drie stappen en op zichzelf al de moeite.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Elke ochtend plug ik m&amp;rsquo;n YubiKey in, typ één PIN, en dat is het laatste geheim dat ik typ tot ik hem er weer uittrek. SSH naar een server, geen wachtwoord. Een commit signen, geen passphrase. Een secret uit pass halen, key aanraken. Eén ding in een USB-poort, en de rest van de dag regelt m&amp;rsquo;n authenticatie zichzelf.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Onkapotbaar - mijn fascinatie.</title>
      <link>https://tommeurs.nl/nl/posts/unbreakable/</link>
      <pubDate>Tue, 23 Dec 2025 20:00:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/unbreakable/</guid>
      <description>&lt;p&gt;Als kind noemde ik de dingen die me fascineerden &lt;strong&gt;onkapotbaar&lt;/strong&gt;. Onverwoestbaar klopte nooit, want onverwoestbaar is iets dat nooit kapotgaat. Onkapotbaar is iets dat blijft werken &lt;em&gt;nadat&lt;/em&gt; het kapot is.&lt;/p&gt;&#xA;&lt;p&gt;Ik weet nog precies waar het begon. Een foto van een A-10 Thunderbolt II, terug van een missie met een halve vleugel weg, de staart aan flarden en de romp vol gaten. Dat ding bracht zijn piloot gewoon thuis.&lt;/p&gt;&#xA;&lt;p&gt;Geluk had daar niks mee te maken. Iemand heeft jaren voor die missie aan een tekentafel besloten dat dat vliegtuig er zo uit mocht zien en toch thuis moest komen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prometheus en Thanos: metrics op schaal</title>
      <link>https://tommeurs.nl/nl/posts/prometheus-thanos-metrics/</link>
      <pubDate>Sun, 31 Aug 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/prometheus-thanos-metrics/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Prometheus alleen bewaart een week of twee aan metrics op lokale schijf en kan geen vraag over meerdere clusters heen beantwoorden. Thanos zet een sidecar naast elke Prometheus, stuurt de blocks naar object storage en zet er een querier voor die alles terugleest via dezelfde PromQL. Hieronder de installatie, de vier componenten, de bedrading voor HA en multi-cluster, en de getallen die ik in productie draai.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;De eerste keer dat iemand me vroeg &amp;ldquo;was dit vorige maand trager dan nu?&amp;rdquo;, had ik geen antwoord. M&amp;rsquo;n Prometheus onthield twee weken. De data die ik nodig had was allang van de lokale schijf af en weg. Dat gat is de reden dat deze post bestaat.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes RBAC: least privilege in de praktijk</title>
      <link>https://tommeurs.nl/nl/posts/kubernetes-rbac-least-privilege/</link>
      <pubDate>Tue, 19 Aug 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kubernetes-rbac-least-privilege/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Kubernetes levert standaard een permissiemodel waarin elke pod een token krijgt en het default service account rechten verzamelt die niemand meer bewust heeft gegeven. Least privilege betekent een service account per workload, geen token tenzij de app met de API praat, en roles die de namespace, de resource en het verb bij naam noemen. Hieronder de vier RBAC-resources, de vijf instellingen die de blast radius begrenzen, de bindings die ik het vaakst kopieer, en hoe ik dat alles controleer en afdwing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vault voor beginners: secrets management in Kubernetes</title>
      <link>https://tommeurs.nl/nl/posts/vault-beginners-kubernetes/</link>
      <pubDate>Wed, 02 Jul 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/vault-beginners-kubernetes/</guid>
      <description>&lt;p&gt;De eerste keer dat ik &lt;code&gt;kubectl get secret myapp -o yaml&lt;/code&gt; draaide en de waarde base64-decodeerde, zakte mijn maag. Daar stond mijn database-wachtwoord, gewoon in etcd, leesbaar voor iedereen die met de juiste RBAC bij de API kon. Kubernetes Secrets zijn geen secrets. Het is base64-gecodeerde platte tekst met een mooie naam. Dat is de default, en het is precies het ding waar niemand je op dag één voor waarschuwt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Container image scanning met Trivy in je CI pipeline</title>
      <link>https://tommeurs.nl/nl/posts/trivy-container-scanning/</link>
      <pubDate>Sun, 08 Jun 2025 10:00:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/trivy-container-scanning/</guid>
      <description>&lt;p&gt;Een base image pullen, je code erin kopiëren, naar productie pushen. Die lus draaien de meesten van ons op de automatische piloot. Het stuk waar niemand naar kijkt is de base image zelf, die stilletjes een paar honderd packages meesleept die je nooit gekozen hebt. Eén ervan kan een bekende &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;Common Vulnerabilities and Exposures: de publieke aanduiding van één specifieke kwetsbaarheid, in de vorm CVE-2026-1234. De aanduiding zegt niets over de ernst.&#34;&gt;CVE&lt;/span&gt;&#xA; dragen, en je zou er geen flauw idee van hebben.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Semantic versioning automatiseren met GitLab CI</title>
      <link>https://tommeurs.nl/nl/posts/semantic-versioning-gitlab/</link>
      <pubDate>Tue, 27 May 2025 19:44:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/semantic-versioning-gitlab/</guid>
      <description>&lt;p&gt;Stel je eerst de eindsituatie voor. Je merget een branch naar main, loopt weg om koffie te halen, en tegen de tijd dat je terug bent heeft het project een nieuwe versie-tag, een verse changelog-entry, en een GitLab release met notes die uit je commits zijn geschreven. Niemand besloot &amp;ldquo;is dit 1.4.0 of 1.3.5?&amp;rdquo; omdat niemand dat hoefde. Het versienummer rolde uit het werk zelf.&lt;/p&gt;&#xA;&lt;p&gt;Daar wil ik in deze post naartoe. Ik draai een self-hosted GitLab en ik wil niet dat versioning iets is waar ik over nadenk. Een versienummer dat iemand met de hand kiest is een klein black box: het hangt ervan af of die persoon de regels onthield, oplette, en het met iedereen eens was over wat als een breaking change telt. Ik heb liever dat het nummer een consequentie van de commits is, iets dat ik kan inspecteren en reproduceren.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitLab CI voor Kubernetes: van commit tot deployment</title>
      <link>https://tommeurs.nl/nl/posts/gitlab-ci-kubernetes/</link>
      <pubDate>Thu, 15 May 2025 20:33:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/gitlab-ci-kubernetes/</guid>
      <description>&lt;p&gt;Lange tijd draaide mijn CI op de servers van iemand anders. Push code, wacht op een hosted runner, kijk hoe de minuten aftikken tegen een maandelijks quotum, hoop dat de provider de regels niet verandert volgend kwartaal. Het werkte, tot ik me begon af te vragen waar mijn broncode eigenlijk stond terwijl hij gebouwd werd, en wie er nog meer bij kon.&lt;/p&gt;&#xA;&lt;p&gt;Dus haalde ik GitLab in huis. Ik draai hem nu self-hosted, op eigen hardware, naast de clusters waarnaar hij deployt. Dat is &lt;a href=&#34;https://tommeurs.nl/nl/posts/sovereign-infrastructure/&#34;&gt;soevereiniteit&lt;/a&gt; toegepast op CI/CD: mijn code, mijn builds, mijn artifacts, geen vendor die prijzen kan veranderen, een feature kan deprecaten waar ik van afhankelijk ben, of mijn repositories kan lezen zonder dat ik het weet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArgoCD vs Flux: wanneer kies je wat</title>
      <link>https://tommeurs.nl/nl/posts/argocd-vs-flux/</link>
      <pubDate>Fri, 28 Mar 2025 21:33:00 +0200</pubDate>
      <guid>https://tommeurs.nl/nl/posts/argocd-vs-flux/</guid>
      <description>&lt;p&gt;&amp;ldquo;Moet ik ArgoCD of &lt;span class=&#34;def&#34; tabindex=&#34;0&#34; data-def=&#34;De andere GitOps-engine naast ArgoCD. Controllers in het cluster reconciliëren vanuit Git, zonder eigen UI, waar ArgoCD juist met een UI begint.&#34;&gt;Flux&lt;/span&gt;&#xA; gebruiken?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Ik krijg deze vraag bij de koffie, in Slack, in PR-comments, waarschijnlijk een keer per week. Mensen willen dat ik een winnaar aanwijs zodat ze er niet meer over hoeven na te denken en gewoon iets kunnen bouwen.&lt;/p&gt;&#xA;&lt;p&gt;Hier is mijn bias, vooraf, zodat je alles wat volgt kunt wegen: ik draai ArgoCD op mijn eigen clusters. Ik heb er een paar jaar mee onder de gordel en ik vind het prettig. Die voorkeur lekt overal doorheen hoe voorzichtig ik ook ben, dus ik zeg het nu maar in plaats van te doen alsof ik neutraal ben.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArgoCD voor beginners: je eerste GitOps deployment</title>
      <link>https://tommeurs.nl/nl/posts/argocd-beginners/</link>
      <pubDate>Sun, 16 Mar 2025 19:15:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/argocd-beginners/</guid>
      <description>&lt;p&gt;Dit wil ik nooit meer doen: een cluster vragen wat het draait en het antwoord niet vertrouwen. Jarenlang was dat normaal. Iemand draaide &lt;code&gt;kubectl apply&lt;/code&gt;, misschien vanaf een laptop, misschien vanuit een CI-job die niemand meer kon vinden, en de live staat dreef langzaam weg van alles wat ergens opgeschreven stond. Toen ik op GitOps overstapte, verdween die hele categorie onzekerheid. Ik push naar Git, en het cluster convergeert tot het matcht. Wil ik weten wat gedeployed is, dan lees ik een bestand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes Network Policies: een visuele handleiding voor pod security</title>
      <link>https://tommeurs.nl/nl/posts/kubernetes-network-policies-visual/</link>
      <pubDate>Sat, 08 Feb 2025 19:34:00 +0100</pubDate>
      <guid>https://tommeurs.nl/nl/posts/kubernetes-network-policies-visual/</guid>
      <description>&lt;p&gt;Stel je dit voor: een aanvaller kraakt één pod in je cluster, via een kwetsbare image of een gelekte token. Vanuit dat ene bruggenhoofd kan deze elke database, elke interne API en elke secret-ophalende sidecar bereiken die je draait. Niets houdt hem tegen, want standaard probeert niets dat.&lt;/p&gt;&#xA;&lt;p&gt;Network Policies zijn precies het ding dat hem tegenhoudt. Ze maken van &amp;ldquo;één gecompromitteerde pod&amp;rdquo; gewoon &amp;ldquo;één gecompromitteerde pod, en daar blijft het bij.&amp;rdquo; Iedereen weet dat ze ze zouden moeten gebruiken. Bijna niemand doet het echt, want de YAML ziet er eng uit en het gedrag is raar tot het mentale model klikt.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
