swarm-otel: keep the collector's OIDC secret on the host's /run, not in the container's root
swarm-bao-otel-oidc still reads the secret from bao under the collector's own leaf, but now writes it to /run/swarm-otel-oidc on the host (tmpfs), which the container bind-mounts read-only for the collector's LoadCredential. Before, it wrote it to /var/lib/nixos-containers/swarm-otel/var/lib/swarm-otel-oidc/<id>.secret on persistent disk, where a superseded secret stayed after rotation and went into backups of the container root. Host tmpfiles now removes that old file. Rotation is unchanged: the ten-minute timer rewrites the file when the value differs and refresh_consumer restarts the collector. After a reboot the secret is fetched again; until the store answers the collector starts on an empty file and the stores refuse its pushes and scrapes. Part of #4998 (slice 2a).
This commit is contained in:
parent
23807c5d0c
commit
7539ef82f7
3 changed files with 71 additions and 17 deletions
|
|
@ -105,6 +105,32 @@ let
|
|||
lib.hasInfix "secret/swarm/services/swarm-collector/oidc/client" s
|
||||
&& !(lib.hasInfix "secret/swarm/hives/" s);
|
||||
}
|
||||
{
|
||||
# A copy on persistent disk outlives the secret's rotation and lands in
|
||||
# backups of the container's root.
|
||||
name = "the collector's OIDC secret is written to the host's /run only, and the old copy removed";
|
||||
ok =
|
||||
let
|
||||
m = otelBaoRemoteAuthelia;
|
||||
script = m.systemd.services.swarm-bao-otel-oidc.script;
|
||||
mount = m.containers.swarm-otel.bindMounts."/run/swarm-otel-oidc";
|
||||
rules = m.systemd.tmpfiles.rules;
|
||||
in
|
||||
lib.hasInfix "atomic_write_secret 0400 root:root /run/swarm-otel-oidc/swarm-collector.secret" script
|
||||
&& !(lib.hasInfix "/var/lib/nixos-containers" script)
|
||||
&& !(lib.hasInfix "/var/lib/swarm-otel-oidc" script)
|
||||
&& mount.hostPath == "/run/swarm-otel-oidc"
|
||||
&& mount.isReadOnly
|
||||
&&
|
||||
m.services.hyperhive.deploy.swarm-otel.clientSecretFile
|
||||
== "/run/swarm-otel-oidc/swarm-collector.secret"
|
||||
&& lib.elem "d /run/swarm-otel-oidc 0700 root root -" rules
|
||||
&& lib.elem "f /run/swarm-otel-oidc/swarm-collector.secret 0400 root root -" rules
|
||||
&& lib.elem "r /var/lib/nixos-containers/swarm-otel/var/lib/swarm-otel-oidc/swarm-collector.secret" rules
|
||||
&&
|
||||
lib.any (c: c == "oidc-client-secret:/run/swarm-otel-oidc/swarm-collector.secret")
|
||||
m.containers.swarm-otel.config.systemd.services.opentelemetry-collector.serviceConfig.LoadCredential;
|
||||
}
|
||||
{
|
||||
# These exporters must not be gated on the stores' PER-HOST enables: a
|
||||
# collector that did not share a host with them would render none at all
|
||||
|
|
|
|||
Loading…
Reference in a new issue