feat(netbird)!: controller-agnostic ingressGrpc annotations; bump netbird 0.77.1, keycloak 26.7.2 - #136
Conversation
…bird 0.77.1, keycloak 26.7.2 Fixes #134: server.ingressGrpc.annotations carried four nginx-specific annotations by default even though server.ingressGrpc.className is configurable, so they were applied verbatim to Ingresses managed by HAProxy, Traefik, and other controllers where they are meaningless. Annotations now default to {} and the nginx set remains in values.yaml as a commented example. Because ingress-nginx genuinely requires backend-protocol: GRPC (without it the controller proxies the backend as HTTP/1.1 and gRPC fails), simply dropping the defaults would silently break existing nginx users on upgrade. The chart therefore fails at template time when className contains "nginx" and that annotation is missing, listing the exact annotations to add — matching the existing fail-fast guard for ingressGrpc without TLS. Non-nginx controllers need no annotations. Version bumps, consolidating the open upstream-update issues: - netbird appVersion 0.73.2 -> 0.77.1 (covers 0.74.x-0.77.x). Upstream adds Agent Network, a rewritten desktop client, relay X-Real-Ip restricted to configured trusted proxies, and privileged-caller checks for local SSH daemon settings. No config key, env var, port, or protocol used by this chart changed; no manual DB migration. - netbird dashboard image v2.39.0 -> v2.91.0 to stay paired with server 0.77.x. Verified the dashboard env contract is unchanged: every variable the chart sets is still rendered by upstream's dashboard.env. - keycloak appVersion 26.6.3 -> 26.7.2. Fixes CVE-2026-59888/59889 and CVE-2026-9796; 26.7.2 also fixes an upgrade failure in the stateless cluster provider, which is why this goes straight to .2. No KC_* option used by this chart changed, and the options removed in 26.7.0 are not used here. Also switches the initial admin to KC_BOOTSTRAP_ADMIN_USERNAME / KC_BOOTSTRAP_ADMIN_PASSWORD; upstream deprecated KEYCLOAK_ADMIN* and logs KC-SERVICES0110 on every start. No values change — admin.username and admin.password are unchanged, only the emitted env var names. Closes #115, #116, #117, #118, #119, #120, #121, #122, #123, #124, #125, #126, #127, #128, #129, #130, #131, #132, #133, #134, #135 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Format Check job installed helmfmt with @latest, which is not reproducible. helmfmt v0.6.1 was published after the last green run on main and does not build: format.go:54:34: undefined: sprigStubNames so the job now fails on every PR regardless of content. Pin to v0.6.0, the newest version that builds. v0.6.0 indents template control flow differently from the v0.6.1 output currently committed, so this also reapplies formatting across 15 templates. The change is whitespace only: `helm template` output for both charts is byte-identical before and after (verified for default values, netbird with Gateway API routes enabled, and keycloak with admin credentials and 2 replicas), ignoring the auto-generated secrets that are randomised on every render by design. Kept as a separate commit so the functional changes stay reviewable. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Heads-up on an unrelated CI breakage this PR also had to fix. Format Check was failing for every PR, not just this one. The job ran Reproduced locally. Pinned to v0.6.0, the newest version that builds (per the repo's own "pinned versions, no download-latest-at-build-time" rule). v0.6.0 indents template control flow differently from the v0.6.1 output currently committed, so the pin also reapplies formatting across 15 templates. That's whitespace only — I verified If you'd rather track helmfmt's newer style, the alternative is waiting for an upstream fix to v0.6.1+ and pinning that instead — happy to swap. |
Sync chart version with upstream appVersion 26.7.2 (already bumped on main via #136). - Security: Keycloak 26.6.3 -> 26.7.2, fixing CVE-2026-59888/59889 (jackson-databind) and CVE-2026-9796 (admin role rename TOCTOU) - Changed: initial admin now uses KC_BOOTSTRAP_ADMIN_USERNAME / KC_BOOTSTRAP_ADMIN_PASSWORD instead of the deprecated KEYCLOAK_ADMIN variables; no values change required Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Folds in every open issue: the 21
autoreleaseupstream bumps plus theingressGrpcannotations report.1. Fix #134 — nginx-specific annotations were applied to every controller
server.ingressGrpc.annotationsshipped fournginx.ingress.kubernetes.io/*keys by default, butserver.ingressGrpc.classNameis configurable — so HAProxy/Traefik users got irrelevant nginx annotations on their Ingress. Annotations now default to{}, with the nginx set kept invalues.yamlas a commented example.One addition beyond the issue's suggestion. The issue notes "no template changes should be required", which is true for rendering — but dropping the defaults outright would silently break existing ingress-nginx users, since without
backend-protocol: GRPCthe controller proxies the backend as HTTP/1.1 and gRPC fails with no obvious error. So the chart now fails at template time whenclassNamecontainsnginxand that annotation is missing, printing the exact block to add. This mirrors the existing fail-fast guard foringressGrpcwithout TLS. Non-nginx controllers need no annotations and are unaffected.CHANGELOG.md.2. Upstream version bumps
X-Real-Iprestricted to trusted proxies, privileged-caller checks for local SSH settings. No config key, env var, port, or protocol used by this chart changed; no manual DB migration.dashboard.env..2because 26.7.2 fixes an upgrade failure in the stateless cluster provider. NoKC_*option used here changed; the options removed in 26.7.0 (persistent-session batching,token-exchange-external-internal:v2) are not used by this chart.3. Drive-by: drop deprecated Keycloak admin env vars
The e2e surfaced
KC-SERVICES0110on every Keycloak start — the chart was still usingKEYCLOAK_ADMIN/KEYCLOAK_ADMIN_PASSWORD, deprecated upstream in favour ofKC_BOOTSTRAP_ADMIN_USERNAME/KC_BOOTSTRAP_ADMIN_PASSWORD. Switched. No values change —admin.usernameandadmin.passwordare untouched; only the emitted env var names differ. Called out separately here in case you'd rather split it out.Closes #115, #116, #117, #118, #119, #120, #121, #122, #123, #124, #125, #126, #127, #128, #129, #130, #131, #132, #133, #134, #135
How to verify
New unit tests cover: no annotations by default, user-supplied nginx annotations rendered verbatim, a non-nginx controller with its own annotations, the nginx guard firing,
annotations: nullproducing the actionable error rather than a type error, and non-nginx classNames passing without annotations.The keycloak e2e was re-run after the
KC_BOOTSTRAP_ADMIN_*switch so all three scenarios exercise the final template.🤖 Generated with Claude Code