Skip to content

Fix: 🐛 Use upstream ghcr.io/spiffe/spiffe-helper image for operator sidecar - #501

Merged
Alan-Cha merged 2 commits into
mainfrom
fix/use-upstream-spiffe-helper-image
Aug 3, 2026
Merged

Fix: 🐛 Use upstream ghcr.io/spiffe/spiffe-helper image for operator sidecar#501
Alan-Cha merged 2 commits into
mainfrom
fix/use-upstream-spiffe-helper-image

Conversation

@Alan-Cha

@Alan-Cha Alan-Cha commented Aug 3, 2026

Copy link
Copy Markdown
Member

Summary

The operator's own spiffe-helper sidecar (injected into rossoctl-controller-manager when spiffe.operatorAuth.enabled=true) points at ghcr.io/rossoctl/cortex/spiffe-helper:latest, which was never published (403 Forbidden on pull). The operator pod gets stuck at 1/2 Ready and never obtains a JWT-SVID, so operator SPIFFE auth never actually authenticates at runtime — even though the bootstrap Job (separately, in rossoctl/rossoctl) successfully registers the Keycloak client.

The container's CLI args (-config /etc/spiffe-helper/config.hcl) match the real upstream SPIFFE project tool exactly, and an earlier branch already used ghcr.io/spiffe/spiffe-helper:0.11.0 before this regressed to the broken rossoctl/cortex path.

Key changes:

  • charts/operator/templates/manager/manager.yaml:196 — swap ghcr.io/rossoctl/cortex/spiffe-helper:latestghcr.io/spiffe/spiffe-helper:0.11.0.

Pinned to a specific version rather than :latest: unlike authbridge/envoyProxy/authbridgeLite/proxyInit (rossoctl-built images that default to :latest at this chart level and get pinned downstream by the rossoctl/rossoctl consumer chart), spiffe-helper is a genuine third-party upstream dependency with no downstream pin step — so it's tagged directly here to the current latest stable release (0.11.0, confirmed via docker manifest inspect).

Verified via helm template that the rendered spiffe-helper container now uses the correct pinned image, and confirmed on a live Kind cluster (loading a substitute image manually) that the operator comes up 2/2 Ready and logs "SPIFFE ID authentication enabled: using JWT-SVID for client registration" once this image is resolvable.

Related issue(s)

Fixes rossoctl/rossoctl#2334

…ecar

The operator's own spiffe-helper sidecar (injected into rossoctl-controller-manager
when spiffe.operatorAuth.enabled=true) pointed at
ghcr.io/rossoctl/cortex/spiffe-helper:latest, which was never published (403
Forbidden on pull) -- the operator pod gets stuck at 1/2 Ready and never
obtains a JWT-SVID, so operator SPIFFE auth never actually authenticates at
runtime even though the bootstrap Job successfully registers the Keycloak
client.

The container's CLI args (-config /etc/spiffe-helper/config.hcl) match the
real upstream SPIFFE project tool exactly, and an earlier branch already used
ghcr.io/spiffe/spiffe-helper:0.11.0 before this regressed to the broken
rossoctl/cortex path. Point it back at the real upstream image.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Alan Cha <Alan.cha1@ibm.com>
@Alan-Cha
Alan-Cha requested a review from a team as a code owner August 3, 2026 17:27

@evaline-ju evaline-ju left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q - should we avoid "latest" tags for images, especially if they're upstream/out of our control?

@Alan-Cha

Alan-Cha commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

@evaline-ju Yes, you are correct, but I noticed that most of the images in the operator are using the latest tag like

envoyProxy: ghcr.io/rossoctl/cortex/authbridge-envoy:latest

However, as you mentioned, this is an external dependency so I think you're right to point out that we should tag this one.

Unlike authbridge/envoyProxy/authbridgeLite/proxyInit (rossoctl-built images
that default to :latest at the chart level and get pinned by the downstream
rossoctl/rossoctl consumer chart), spiffe-helper is a genuine third-party
upstream dependency with no downstream pin step for it. Tag it directly to
the current latest stable release (ghcr.io/spiffe/spiffe-helper:0.11.0,
confirmed to exist via docker manifest inspect) rather than tracking :latest.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Alan Cha <Alan.cha1@ibm.com>
@Alan-Cha

Alan-Cha commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

The plan is to remove this dependency soon, but as of now, it's pointing at the wrong image

@Alan-Cha Alan-Cha changed the title 🐛 Use upstream ghcr.io/spiffe/spiffe-helper image for operator sidecar Fix: 🐛 Use upstream ghcr.io/spiffe/spiffe-helper image for operator sidecar Aug 3, 2026
@Alan-Cha Alan-Cha added this to the Release v0.7.0 milestone Aug 3, 2026
@Alan-Cha
Alan-Cha requested a review from evaline-ju August 3, 2026 21:05

@evaline-ju evaline-ju left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

@Alan-Cha
Alan-Cha merged commit 5f4a8e3 into main Aug 3, 2026
16 of 17 checks passed
cwiklik pushed a commit that referenced this pull request Aug 4, 2026
…idecar (#501)

* fix: use upstream ghcr.io/spiffe/spiffe-helper image for operator sidecar

The operator's own spiffe-helper sidecar (injected into rossoctl-controller-manager
when spiffe.operatorAuth.enabled=true) pointed at
ghcr.io/rossoctl/cortex/spiffe-helper:latest, which was never published (403
Forbidden on pull) -- the operator pod gets stuck at 1/2 Ready and never
obtains a JWT-SVID, so operator SPIFFE auth never actually authenticates at
runtime even though the bootstrap Job successfully registers the Keycloak
client.

The container's CLI args (-config /etc/spiffe-helper/config.hcl) match the
real upstream SPIFFE project tool exactly, and an earlier branch already used
ghcr.io/spiffe/spiffe-helper:0.11.0 before this regressed to the broken
rossoctl/cortex path. Point it back at the real upstream image.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Alan Cha <Alan.cha1@ibm.com>

* fix: pin spiffe-helper to v0.11.0 instead of :latest

Unlike authbridge/envoyProxy/authbridgeLite/proxyInit (rossoctl-built images
that default to :latest at the chart level and get pinned by the downstream
rossoctl/rossoctl consumer chart), spiffe-helper is a genuine third-party
upstream dependency with no downstream pin step for it. Tag it directly to
the current latest stable release (ghcr.io/spiffe/spiffe-helper:0.11.0,
confirmed to exist via docker manifest inspect) rather than tracking :latest.

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Alan Cha <Alan.cha1@ibm.com>

---------

Signed-off-by: Alan Cha <Alan.cha1@ibm.com>
(cherry picked from commit 5f4a8e3)
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.

Operator SPIFFE auth: ghcr.io/rossoctl/cortex/spiffe-helper:latest sidecar image unpublished/inaccessible (403)

2 participants