feat(apps): add Crossview Crossplane dashboard behind SSO + Headlamp plugin#2153
Merged
Conversation
…plugin
Adds the Crossview (crossplane-contrib) web dashboard as a Hetzner-only
Flux app so the cluster's Crossplane resources get a UI — surfaced both as
a Homepage tile and inside Headlamp via the crossview-headlamp plugin.
- apps/crossview: HelmRelease (chart 4.4.0), HelmRepository, SSO HTTPRoute
(oauth2-proxy/Dex, like coroot/longhorn), CiliumNetworkPolicy, namespace.
Bundled Postgres runs ephemeral (no Longhorn PVC) for a read-only,
SSO-fronted dashboard.
- auth-proxy + oauth2-proxy ReferenceGrant: crossview.${domain} routing
(inert on local/CI, mirroring the longhorn precedent).
- headlamp: add the crossview-headlamp plugin (embeds the Flux-managed
Crossview; its Install/Uninstall actions are intentionally unused).
Hetzner-only via bases/apps (the docker provider deploys no apps).
Validated: ksail workload validate (local + prod) and kubectl kustomize
of both overlays.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
|
🎉 This PR is included in version 1.67.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds the Crossview (
crossplane-contrib) web dashboard as a Hetzner-only Flux app so the cluster's Crossplane resources get a UI — surfaced both as a Homepage tile and inside Headlamp via thecrossview-headlampplugin. Crossplane landed on the platform in #2039; this gives it a frontend.What's included
k8s/bases/apps/crossview/helm-release.yaml— chartcrossview4.4.0(latest stable;4.5.0-rc.1skipped as an RC) fromhttps://crossplane-contrib.github.io/crossview/helm-repository.yaml,namespace.yaml(PSSrestricted),httproute.yaml,networkpolicy.yamlcrossview.${domain}fronted by oauth2-proxy/Dex, mirroring coroot/opencost/longhorn:auth-proxyConfigMap router + service →crossview-service.crossview.svc:80ReferenceGrantentry for thecrossviewnamespaceoauth2-proxywithX-Auth-Request-Redirect+ HSTS filterscrossview-headlampplugin0.1.4added to thepluginsManagerlistbases/apps/kustomization.yaml; Homepage tile viagethomepage.dev/*annotations (groupKubernetes)Key decisions
Install/Update/Uninstallbuttons run acluster-adminHelm Job — intentionally unused (noted in-code). Don't click them.database.persistence.enabled: falseruns it ephemeral so we don't place a stateful Longhorn volume on prod (the autoscaler-node data-loss footgun). Acceptable for a read-only, SSO-fronted dashboard — session/user rows reset on restart.bases/apps, which only the hetzner provider includes (docker deploys no apps). Theauth-proxy/ReferenceGrantentries live in the controllers layer (both providers) but are inert on local/CI — no local HTTPRoute routescrossview.${domain}— mirroring the existing longhorn precedent.Validation
ksail workload validateandksail --config ksail.prod.yaml workload validate→ 347 files validated, exit 0 (all 5 crossview manifests included).kubectl kustomizeofclusters/local+clusters/prod, plus theproviders/{hetzner,docker}/{apps,infrastructure/controllers}paths → all build; Crossview present in hetzner/apps, absent from docker/apps; auth-proxy router present in both (inert on local).Note: static validation doesn't render HelmRelease values against the chart (Flux does that at runtime); values keys were taken from the chart's
values.yaml.Runtime-verify / follow-ups (can't be checked statically)
auth.mode: session+trustedHeader: X-Auth-Userseamlessly adopts the proxy identity may need header mapping (oauth2-proxy emitsX-Auth-Request-*).frame-ancestorstuning given the SSO redirect.postgres:latestunder PSSrestricted+ ephemeral should run but is unverified on this cluster; pin a real tag if it misbehaves.admin/password, empty session secret) are used; recommend a SOPS-encrypted override ofsecrets.adminPassword/sessionSecret/dbPassword.🤖 Generated with Claude Code