Skip to content

Report an unpullable image as its own cause, not as an isolation result - #4

Merged
btriapitsyn merged 2 commits into
mainfrom
fix/report-unpullable-image
Aug 5, 2026
Merged

Report an unpullable image as its own cause, not as an isolation result#4
btriapitsyn merged 2 commits into
mainfrom
fix/report-unpullable-image

Conversation

@btriapitsyn

Copy link
Copy Markdown
Collaborator

Problem

Two different problems with two different owners were reported identically as "network isolation could not be verified":

  • the cluster cannot download the workspace image;
  • the cluster's networking genuinely could not be characterised.

Observed live: a stale image reference pointing at a local registry that no longer runs produced a verdict reading as though something were wrong with the cluster's network. The actual fault was a setting the operator owns, and the message sent them looking in entirely the wrong place.

Change

An image pull failure (ErrImagePull, ImagePullBackOff, InvalidImageName) now travels as its own flag on the probe result, so a surface can name the setting at fault instead of relaying a networking message. CreateContainerConfigError keeps its existing treatment — it is a pod definition problem, not a registry one.

Also: RBAC preflight concurrency

From the same session, unrelated to the above.

Readiness ran 26 kubectl auth can-i probes one after another, each a process spawn and an API round trip, measured at 221 ms apiece — about six seconds before the settings page could display anything. That cost was paid even by someone using Docker, since readiness checks every provider the platform supports.

They now run eight at a time, and every denial is collected rather than only the first, so a single message names everything to request from a cluster administrator.

Measured on the same cluster: full Kubernetes validation 6.3 s → 3.9 s, with the remainder being the namespace, DNS and image checks rather than the permission loop.

…an isolation result

An image the cluster cannot download and a cluster whose networking cannot be
characterised are different problems with different owners, and the probe
reported them identically: "network isolation could not be verified". Observed
live, where a stale image reference pointing at a local registry that no longer
runs produced a verdict that read as though something were wrong with the
cluster's network, sending the reader to the wrong setting entirely.

An image pull failure now travels as its own flag, so a surface can name the
setting at fault instead of relaying a networking message.

Concurrency for the RBAC preflight, unrelated but from the same observation:
readiness ran twenty-six `auth can-i` probes one after another, each a process
spawn and a round trip, measured at 221 ms apiece — six seconds before the
settings page could say anything, paid even by someone using Docker, since
readiness checks every provider the platform supports. They now run eight at a
time, and every denial is collected rather than only the first, so one message
names everything to request from an administrator.
…the workspace one

The probe only needs a runtime that can open a TCP connection, but it ran the
workspace image: 1.32 GB, against the egress gateway's 329 MB. A cluster
meeting either for the first time downloads it before the check can answer, so
the check was four times slower than it needed to be on exactly the clusters
where someone is most likely to run it — a new one, being set up.

Managed egress already requires the gateway image, so nothing new is pulled in
the default configuration. External egress keeps the workspace image, which is
needed there regardless, and the reference is digest-validated either way.

Verified live: enforced verdict unchanged, sixteen seconds against a cluster
that already had both images.
@btriapitsyn
btriapitsyn merged commit 35aac9e into main Aug 5, 2026
7 checks passed
@btriapitsyn
btriapitsyn deleted the fix/report-unpullable-image branch August 5, 2026 21:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants