No health surface a monitoring probe can reach without the admin Host #67
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Raised by Roku while reviewing v2.0.0 for a greenfield deploy.
/healthlives insession_routesand/readyinadmin_routes, and both routers sit behindadmin_host_gate(src/main.rs:106). So a probe must sendHost: <configured admin host>to reach either, and with no[[admin]]entry neither is served at all — every request falls through to the reverse proxy./healthwas introduced as a liveness probe needing no key, which it is; what it also needs, and does not have, is a way to be addressed without knowing and spoofing the admin hostname. A container runtime health check, a systemd watchdog or a node-level monitor all want to hit127.0.0.1:<port>/health, and that currently returns whatever the proxy fallback decides.Workaround today: configure an
[[admin]]entry and have the probe set the Host header explicitly. That works but couples liveness monitoring to admin configuration, and a deployment with no admin host has no health surface at all.Options
127.0.0.1/::1serving/healthand optionally/ready, independent of[[admin]]. Cleanest for the probe use case, and loopback is its own access control./healthfrom the admin Host gate and serve it on any binding. Simplest change, but it becomes a public endpoint on every listener, which is an information disclosure decision (it reveals a process is alive and which software it is) rather than an obvious yes.Option 1 is probably right, and it pairs with the fact that there is currently no way to reach the API on loopback at all without naming an admin host.
Not for v2.0.0 — this is a feature rather than a defect fix. Filed so the gap is recorded against the release rather than discovered per deployment; the release notes name it as a known limit.
Taken out of v2.1 and left open. Decided by the Axianthe PM on the grounds that this guards a use case nobody has: James has rejected monitoring, no host needs a health surface today, and nothing has hung.
Checked before accepting that, since the issue describes container runtime health checks rather than monitoring alone: devinfra's compose defines
healthcheckblocks for postgres, mongodb and others, and none foredge-router. So nothing in the fleet currently probes/health, and this is not latent breakage.One caveat for whoever picks this up: the absence of an ER healthcheck is weak evidence of no need, because the gap described here is a plausible reason nobody wrote one. If a container healthcheck or a systemd watchdog is ever wanted for Edge Router, this issue is the blocker to clear first, and option 1 (a loopback-only health socket) remains the right shape — loopback is its own access control, it works inside a container where a Docker
HEALTHCHECKruns, and it needs no[[admin]]entry.It does not serve an external monitor on another host; that case is the admin host plus an access rule, which is correct.
Also relevant to #70: whatever shape this eventually takes decides what an app-wide HTTP→HTTPS redirect has to exempt. The two should be settled together rather than separately.