A small but important patch release that closes the two known issues we documented in v0.23.4. Hubs that drop ALL capabilities now exec cleanly without the binary's file capability tripping the kernel's bounding-set check, and the chart's /data path is always mounted so any Caddy module that writes under caddy.AppDataDir() (notably rate_limit) works under readOnlyRootFilesystem: true out of the box. With v0.23.5 you can drop every capability, mount nothing extra, and the chart just works.
🐛 Bug Fixes
- Helm: Mount
/dataunconditionally (emptyDirwhen persistence is off, PVC when on). Fixes pods crashing withread-only file systemwhenreadOnlyRootFilesystem: trueand a Caddy module needs to write under/data(e.g.rate_limitwriting its instance UUID to/data/caddy/instance.uuid). Previously/dataonly mounted whenpersistence.enabled: true, which forced PVCs on every Redis/Postgres/Kafka/Pulsar deployment that wanted a hardened rootfs by @dunglas in #1233 - Docker: Drop the
RUN setcap cap_net_bind_service=+ep /usr/bin/caddyline. Modern container runtimes (containerd 1.5+, cri-o, Docker 20.10+) setnet.ipv4.ip_unprivileged_port_start=0inside the container, so any unprivileged process can bind any port without that capability. The setcap was load-bearing on older runtimes but moot today, and the file capability collided with restrictive KubernetessecurityContexts that drop ALL capabilities: the kernel refuses toexeca binary whose file permitted caps are not a subset of the process's bounding set, sodrop: [ALL]without a matchingaddcrash-looped pods withexec /usr/bin/caddy: operation not permitted. Removing setcap removes that footgun by @dunglas in #1234
📖 Documentation
- Helm and install.md: Update the rootless deployment example to recommend the simplest config (drop ALL caps, run non-root, RO rootfs, no
targetPorttweak).service.targetPort: 8080stays documented as a fallback for older runtimes whereip_unprivileged_port_startis still1024. Bundled into #1234.
Mercure Cloud tenants are already running on this release, because we manage the cluster on their behalf, alongside the production transports (Redis, Kafka, Pulsar, Postgres) and an SLA-backed managed offering. Mercure Enterprise brings the same hardening on-premise plus the HA transports and priority support. Contact contact@mercure.rocks for the managed cloud offering, on-premise licenses, custom development, consulting, and training.
Full Changelog: v0.23.4...v0.23.5