fix(podman): pasta als default-netwerkmodus zodat Testcontainers werkt (#44, lost #82 op) - #88
Closed
ericwout-overheid wants to merge 2 commits into
Closed
Conversation
#44) netavark faalde in nested rootless podman met "failed to set autoconf sysctl: Permission denied": voor een bridge zet het een IPv6-sysctl op een interface in de outer container-netns, die door init_user_ns geowned wordt (geen userns-remap), dus rootless podman mag er /proc/sys/net niet schrijven. Dit blokkeerde alle Testcontainers-runs op een gehardende host. De entrypoint zet nu netns="pasta" in containers.conf. Pasta geeft elke container een eigen netwerk met port-forwarding naar localhost en vermijdt de bridge. Op een echte host bevestigd: smoke-test groen incl. PostgresSmokeTest (multi-uid). Geen testcode aangepast — de netns-default geldt ook voor containers die via de podman-Docker-API starten. Beperking: container-naar-container over netwerknamen (Testcontainers Network) werkt niet zonder userns-remap; dat blijft de userns-remap-spike. Bestaande volumes krijgen de netns-regel via een idempotente migratie in de entrypoint. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ericwout-overheid
requested review from
loek-rijksoverheid and
mreuvekamp
as code owners
August 3, 2026 16:44
…#44) Uit de reviewronde op deze PR: - containers.conf-migratie robuuster: de grep matcht nu ook een ingesprongen netns (geen duplicaat-key die podman's TOML-parser breekt), en bij een config zonder [containers]-sectie wordt die sectie geappend i.p.v. een sed die stil niets doet. Post-check waarschuwt als het toevoegen tóch faalt. - README-drift rechtgetrokken: twee plekken zeiden nog dat de entrypoint containers.conf "alleen aanmaakt als hij ontbreekt"; hij plaatst nu ook de netns-regel bij (overige drift blijft staan). - Openstaand-bullet toegevoegd voor de container-naar-container-beperking, en de vage "spike/#44"-verwijzing vervangen door het concrete ticket #82. - Egress-winst gedocumenteerd: nested pasta-egress loopt via de OUTPUT-chain en valt onder de allowlist, waar de bridge via FORWARD die allowlist kon omzeilen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Collaborator
Author
|
Samengevoegd in #46 en daar in één keer te reviewen. De gestapelde opzet zorgde ervoor dat werk dat verderop in de stack weer werd teruggedraaid alsnog gereviewd moest worden; in de samengevoegde diff valt dat weg. Geverifieerd dat |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lost #82 op voor de praktische use-case. Stapelt op de hardening-branch.
Probleem
Op een gehardende host faalde elke Testcontainers-run met een netavark-bridge:
Diagnose (host-verificatie, zie #82): niet de hardening (geen AppArmor-DENIED,
EACCES≠ seccomp-EPERM, faalt in single- én multi-uid). De echte oorzaak is netns-ownership: voor een bridge zet podman een IPv6-autoconf-sysctl op een interface in de outer container-netns, die doorinit_user_nswordt geowned (geen userns-remap), dus rootless podman mag er/proc/sys/netniet schrijven. Bevestigd metpodman unshare … echo > /proc/sys/net/ipv6/…/autoconf → Permission denied.Fix
De entrypoint zet
netns = "pasta"incontainers.conf. Pasta geeft elke container een eigen netwerk met port-forwarding naarlocalhosten vermijdt de bridge volledig. De default geldt ook voor containers die Testcontainers via de podman-Docker-API start, dus geen testcode hoeft aangepast.Bestaande
claude-home-volumes hebben al eencontainers.confzondernetns; de entrypoint voegt de regel idempotent bij (zonder een handmatig aangepaste config te overschrijven).Op een echte host bevestigd
Gehardende Tuxedo, multi-uid:
SmokeTest(alpine) énPostgresSmokeTest(postgres:16-alpine met published port) beide groen.Beperking
Container-naar-container over netwerknamen (Testcontainers
Network, meerdere containers die elkáár bereiken) werkt niet met pasta — elke container is geïsoleerd met alleen port-forwarding naar de host. Dat vereist userns-remap op de outer container, wat als aparte spike op #82 blijft staan. Voor het gros (DB, wiremock, Redis via published port) volstaat pasta.🤖 Generated with Claude Code