Woodpecker k8s runner: trust the internal CA so buildx can push to artifactapi #325
Reference in New Issue
Block a user
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?
Problem
The 12 open per-repo PRs (branch benvin/push-artifactapi) that repoint docker image pushes from the Gitea registry to artifactapi docker-internal will x509-fail on tag: plugin-docker-buildx builds via a nested moby/buildkit container that does not trust the internal unkin.net CA (PR CI is a false green — dry-run never contacts the registry). This is why nothing in the estate pushes to artifactapi via buildx.
Proposal
Acceptance
Assessment — not actionable in argocd-apps, recommend close
The x509 problem is still real:
artifactapi.k8s.syd1.au.unkin.netstill serves a vault-issuer (internal PKI) cert (gateway.yamlannotation + livekubectl get certificate artifactapi-tls→ issuerRef vault-issuer), no repo pushes there yet (11benvin/push-artifactapibranches still open; every buildx pipeline still targetsgit.unkin.net). But neither proposed fix is an argocd-apps change, and the one argocd-side enabler that is needed already exists:"Make the woodpecker k8s runner/buildkit trust the internal CA (estate-wide)" — not implementable here. Woodpecker's k8s backend has no global step-pod volume/secret/CA injection (volumes are per-step only; the chart's agent
extraVolumeMountsattach to the long-lived agent container, which does not perform the push — buildkit runs in the ephemeral privilegedplugin-docker-buildxpod). CA trust can therefore only be set per-repo in each pipeline, never via the runner. There is noWOODPECKER_BACKEND_K8S_*knob for it.Per-repo insecure buildx / skopeo — the only argocd-side enabler (the privileged
woodpeckerci/plugin-docker-buildx:latest-insecure) is already inWOODPECKER_PLUGINS_PRIVILEGED(present since the initial migration, #13). argocd-apps already provides everything the per-repo path needs; the remaining work is entirely in the 11 per-repo PRs.Durable alternative now on the table (post-#327/#331/#337) — but blocked on DNS, not argocd
Give artifactapi a publicly-trusted Let's Encrypt cert so buildkit trusts it natively — this deletes the internal CA from the picture for every client, not just woodpecker. Currently impossible for this host:
artifactapi.k8s.syd1.au.unkin.netis internal-only — no public A record;k8s.syd1.au.unkin.nethas no public SOA/NS (split-horizon)._acme-challengedelegation for it or a*.k8s.syd1.au.unkin.netwildcard — only_acme-challenge.unkin.netis CNAME'd intoacme.unkin.net.cnameStrategy: Follow→ rfc2136 to bind-external, authoritative foracme.unkin.netonly) would fall back to an UPDATE onk8s.syd1.au.unkin.net→ NOTAUTH, challenge fails.To unblock: add
_acme-challenge.artifactapi.k8s.syd1.au.unkin.net(or a*.k8s.syd1.au.unkin.netwildcard)CNAME _acme-challenge.acme.unkin.netin the public unkin.net view, then flip the artifactapiGatewayissuervault-issuer→letsencrypt(one-line argocd change). That gateway flip is the only future argocd-apps deliverable, and it is gated on the DNS record.Recommendation
Closing: there is no actionable argocd-apps change today (the insecure-plugin enabler is already present; runner-level CA trust is infeasible on the k8s backend). Track the push migration in the per-repo PRs; when the public
_acme-challengedelegation lands, theGateway→letsencryptflip is a fresh, correctly-scoped argocd-apps change.Reopening — this was closed without a resolving PR, but the assessment above confirms it's still required (the x509 blocker is real and ~11 per-repo push PRs remain blocked). Like #323, it's not fixable via an argocd-apps PR: estate-wide Woodpecker runner CA-trust isn't possible on the k8s backend, and the public-LE alternative is blocked on a missing public _acme-challenge delegation for the artifactapi host/wildcard. Keeping open and re-scoping to the per-repo push path + the DNS delegation, not closing until actually resolved.