docs(pm-agent): the registry cannot be pulled from yet — name both prerequisites where the operator reads them
pm-agent reconciled exactly as designed after #57: Flux applied main@sha1:95597bd to platform-config, pm-agent and apps-wave-0 (all Ready), the ClusterPolicy pm-agent-job-shape is live with Enforce + failurePolicy Fail and all six rules, SOPS decryption works through the new overlay patch (checked by key names and value lengths, never values), and pm-agent-worker really is bound to nothing. Measuring it turned up two prerequisites for the NEXT operator step that nothing in this repository declares, and that #57's handoff could not have known — it listed the image pull as unverified, and that is exactly where it bit: - the nodes cannot verify the registry's TLS certificate (containerd: 'x509: certificate is not valid for any names'), while the same name serves a healthy Let's Encrypt wildcard from the LAN. A correct digest fails identically; - an unauthenticated client gets nothing from this Gitea's registry (its anonymous token carries no access scope) and no imagePullSecret exists anywhere in the tree. Not specific to pm-agent: conformance-runner shares the registry path and has never been pulled either. The dispatcher is the first workload in the cluster ever to reference it. Documentation only — no manifest, no policy, no code. Both fixes need an operator action and one of them is a posture decision, so the docs present both rather than pick. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
1 parent
95597bd688
commit
6253d546f8
4 files changed
+159
-4
No files matched your search
@@ -31,6 +31,27 @@ Both are deliberate, and both fail **visibly** rather than silently:
|
||||
`infra/agent/build-image.sh` (which verifies it and refuses to push), push it as the
|
||||
operator, then update **both** places with the digest `podman push --digestfile` returned,
|
||||
in one pull request. Until then: `ImagePullBackOff`.
|
||||
|
||||
**Two things have to be true before any digest will pull, and neither is declared in this
|
||||
repository.** Both were measured after PR #57 merged — this service is the first workload
|
||||
in the cluster ever to reference the in-cluster registry, so nothing had exercised the
|
||||
path. Details and the exact commands:
|
||||
[`decisions/2026-10-05-pm-agent-registry-pull-prereq.md`](../../decisions/2026-10-05-pm-agent-registry-pull-prereq.md).
|
||||
|
||||
- **The nodes must be able to verify the registry's TLS certificate.** containerd
|
||||
currently fails with `x509: certificate is not valid for any names, but wanted to match
|
||||
gitea.home.keithjackson.dev`, while the same name from the LAN serves a healthy
|
||||
Let's Encrypt `*.home.keithjackson.dev`. Correcting the digest will not clear this.
|
||||
- **The pull must be authenticated.** An unauthenticated client gets nothing from this
|
||||
Gitea's registry (its anonymous token carries no access scope; every path 401s), and
|
||||
there is no `imagePullSecret` anywhere in the tree. Either add one — a
|
||||
`dockerconfigjson`, SOPS-encrypted like `pm-agent-credentials`, referenced from the
|
||||
Deployment *and* from the committed worker Job template — or allow anonymous reads of
|
||||
that package in Gitea, which makes the image readable to anything that can reach the
|
||||
host. That is a posture decision, so it is yours rather than an agent's.
|
||||
|
||||
The same two apply to `conformance-runner`: same registry path, same push-then-pin model,
|
||||
never pulled either.
|
||||
2. **The credentials are placeholders.** `pm-agent-credentials.sops.yaml` is encrypted to the
|
||||
repository's age recipient but holds `REPLACE-ME-…` strings. The hand-off —
|
||||
which Gitea account to create, which scopes, and why it must *not* be an administrator —
|
||||
|
||||
Reference in new issue
Block a user