Repository navigation
Description
Summary
The bundle-service (OPA authorization policy bundles, #415) and token-broker (OAuth session/token management, #449) are both merged and present in the source tree at v0.4.0-rc.1, but neither is deployable from the release artifacts. Both ship as standalone binaries with hand-written manifests that are not templated into the Helm chart and are not built or published by CI.
Net effect for a user installing rossoctl v0.8.0-rc.1: they get the authorizationpolicies CRD and the cortex-side opa/tokenbroker plugins that consume policy bundles, but no bundle-service and no token-broker running to serve them. Testing either feature currently requires building from source.
Resolution (agreed with @davidhadas): fold both binaries into the existing operator image. The components were originally split out to accommodate Red Hat objections; Red Hat is no longer consuming this as their upstream, so the split now only carries cost. Keeping them opt-out is also inconsistent with the rest of the codebase, which is opt-in. Goal is that testing a feature does not require a source build.
What was verified
Both PRs are merged to main and their merge commits are ancestors of the v0.4.0-rc.1 tag:
| PR | Merge commit | In v0.4.0-rc.1 |
|---|---|---|
| #415 Bundle Service serving OPA authorization policy bundles | fb22549 |
yes |
| #449 Add token-broker service for OAuth session and token management | 7887e96 |
yes |
This is not a missing-code problem. It is a packaging and delivery gap.
Why documentation alone cannot fix this
The images do not exist. .github/workflows/release.yml builds exactly two images via its matrix — operator/Dockerfile and operator/cmd/agentcard-signer/Dockerfile. Neither component is included. The standalone manifests reflect that and cannot be applied as-is:
operator/config/bundleservice/deployment.yaml:23→ghcr.io/rossoctl/bundle-service:latest, never built or pushedtoken-broker/deploy/02-deployment.yaml:34→localhost/token-broker:latest, with the inline comment "REPLACE with the tag your build script produces"
There is also no feature gate today: charts/operator/values.yaml at v0.4.0-rc.1 contains no reference to either component. The featureGates block covers globalEnabled, envoyProxy, injectTools, perWorkloadConfigResolution, and skillDiscovery only.
Component detail
bundle-service — already part of the github.com/rossoctl/operator module (operator/cmd/bundle-service/main.go), with supporting code in operator/internal/bundleservice/. The agent.rossoctl.dev_authorizationpolicies.yaml CRD is already shipped in charts/operator/crds/. Not registered as a reconciler in operator/cmd/main.go (it is a standalone HTTP server, not a controller). Manifests in operator/config/bundleservice/ are not templated into the chart.
token-broker — a separate Go module (github.com/rossoctl/token-broker) under token-broker/, depending on github.com/rossoctl/cortex/authbridge/authlib at pseudo-version v0.0.0-20260619001334-ce3417655ee8. Manifests in token-broker/deploy/ are not templated into the chart.
Cortex side is already correct
The consuming plugins are shipped. include_plugin_opa and include_plugin_tokenbroker are gated build tags, and both opa and tokenbroker are members of the full, envoy, and cpex profiles in authbridge/scripts/profile-tags/profiles.go. Published authbridge images have them compiled in; only -lite excludes them. This confirms the gap is operator-side packaging only.
Work items
-
Fold
bundle-serviceinto the operator image. AddCOPY cmd/bundle-service/and a secondgo buildstage tooperator/Dockerfile, emitting abundle-servicebinary alongsidemanager. Same module, so no dependency work required. -
Fold
token-brokerinto the operator image. This requires merging modulegithub.com/rossoctl/token-brokerintogithub.com/rossoctl/operatorfirst:- The operator module will inherit a dependency on
cortex/authbridge/authlib, introducing a cross-repo build edge from operator to cortex. Confirm this is acceptable. - The existing
authlibpin (v0.0.0-20260619..., June) is roughly three months stale against cortexv0.7.0-rc.1. It must be reconciled during the merge, and anyauthlibAPI drift resolved. This is the main unknown in the estimate — worth timeboxing before committing to a release. - Suggest doing this as its own PR ahead of the Dockerfile change, so module surgery is reviewable separately from packaging.
- The operator module will inherit a dependency on
-
Set explicit
command:in both deployments. The operator image'sENTRYPOINTis["/manager"]on distroless. With multiple binaries in one image, each Deployment must specify its owncommand:to select the right one. -
Template both into the Helm chart. Port
operator/config/bundleservice/andtoken-broker/deploy/intocharts/operator/templates/, each behind an opt-invalues.yamlgate (suggestbundleService.enabledandtokenBroker.enabled, defaulting tofalse) to match the codebase's opt-in convention. Update image references to the operator image with the appropriatecommand:. -
Wire toggles through the rossoctl platform chart so the installer can enable them.
-
Add an E2E smoke test that applies an
AuthorizationPolicyand asserts bundle-service serves the composed bundle. -
Update documentation. Once installable from the chart, revise rossoctl#2139 — its manual pre-release instructions become obsolete.
Notes
- Verification of published images was indirect: the token used had no
read:packagesscope, so GHCR could not be queried directly. The absence of both components from therelease.ymlbuild matrix is strong evidence, but a direct registry check would confirm it. - Release scoping for
v0.8.0GA vs the following release is open — /cc @cwiklik (build owner for v0.8.0). Item 2's staleauthlibpin is the main schedule risk; items 1, 3, and 4 for bundle-service alone are small and low-risk.
Activity
davidhadas commentedon Sep 17, 2026
1..5 above makes sense.
Lets get the PR ready - regardless if it is in 0.8, 0.81 or 0.9.
[-]bundle-service and token-broker are in the source tree but not deployable from release artifacts[/-][+]Fold bundle-service and token-broker into the operator image so they ship in releases[/+]mrsabath commentedon Sep 17, 2026
Updated the issue to reflect the agreed approach: fold both binaries into the existing operator image rather than publishing separate images or leaving them as out-of-band components.
Context from @davidhadas — the original split existed to accommodate Red Hat objections. Red Hat is no longer consuming this as their upstream, so the split now only carries cost, and keeping these opt-out is inconsistent with the rest of the codebase being opt-in. The goal is that testing a feature does not require a source build.
Two practical notes captured in the work items:
bundle-serviceis straightforward — already in the operator Go module, so it is aCOPYplus a secondgo buildinoperator/Dockerfile.token-brokerneeds a module merge first. It is a separate module (github.com/rossoctl/token-broker) depending oncortex/authbridge/authlibat a June pseudo-version, roughly three months stale against cortexv0.7.0-rc.1. That pin has to be reconciled and any API drift resolved — the main unknown here. Suggest landing it as its own PR ahead of the packaging change.Also worth flagging: the operator image
ENTRYPOINTis["/manager"], so with multiple binaries in one image each Deployment needs an explicitcommand:.mrsabath commentedon Sep 17, 2026
Update on the
token-brokerschedule risk flagged in work item 2 — it is not a risk, and the underlying assumption was wrong.I tested the module bump rather than estimating it. There is no
authlibAPI drift:token-brokeruses exactly two symbols (validation.NewLazyJWKSVerifier,validation.Verifier), andauthbridge/authlib/plugins/jwtvalidation/validation/has a zero-line diff between the June pin and cortexv0.7.0-rc.1. Both signatures are byte-identical.What I found instead:
token-brokerdoes not build at all today. The June pin predates the Kagenti → Rossoctl rename, so the pinned commit'sgo.moddeclaresgithub.com/kagenti/kagenti-extensions/authbridge/authlibwhiletoken-broker/go.modrequiresgithub.com/rossoctl/cortex/authbridge/authlib. Go rejects the path mismatch outright. It went unnoticed because no CI job compiles this module.Filed separately as #537 (assigned to @cwiklik), since it is a defect independent of packaging.
Consequence for this issue: the fix is a one-line
go.modbump — verified with a cleango build ./...and all 8 test packages passing against520dc8a. Work item 2 is therefore comparable in size to item 1, and there is no reason to splitbundle-serviceandtoken-brokeracross releases on estimate grounds. Disregard the timeboxing suggestion in item 2.davidhadas commentedon Sep 18, 2026
Items 1–4 are done and pending review on #540
Done:
Remaining:
Limitation until item 5 lands: the components are installable from the operator chart but not reachable through the rossoctl platform installer. Testers must install the operator chart directly with the two --set flags.
Two notes on the work as landed:
Also removed as cleanup: operator/config/bundleservice/ (orphaned kustomize manifests), operator/cmd/bundle-service/Dockerfile and hack/bundle-service-kind.sh (a standalone image path that no longer ships). hack/kind-reload-all.sh is now the single dev script and renders everything from the chart, so the dev path exercises the same manifests and RBAC as a real install.