nebari-dev / nebari-dev/data-science-pack
Field report: deploying on a keycloakx (/auth) + microk8s environment — 7 friction points
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 5
- Forks
- 7
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 13
Description
Deployed 0.1.4 successfully on a microk8s + nebari-operator v0.1.0 playground (Keycloak = codecentric keycloakx behind an /auth relative path, custom singleuser image). Everything works — hub-managed OAuth via the operator-provisioned client, per-user spawns, jhub-apps — but these cost time and may bite others:
- Path-prefixed Keycloak issuers unsupported: the
keycloak.hostnamederivation buildshttps://<host>/realms/...with no way to express keycloakx's standard/authprefix;rbac.bootstrap.kcHost's default likewise omits it. Workaround: leavekeycloak.hostnameempty and rely on the operator Secret's issuer-url. - Home-PVC size knob mismatch:
01-spawner.pyreadscustom.storage-capacityfor the home PVC but values.yaml only documentsworkspace-storage-capacity— home size is effectively an undocumented default. - nss-wrapper assumptions:
LD_PRELOAD=libnss_wrapper.sois applied to every image (foreign images without it log ld.so errors on each exec) and_generate_nss_fileshardcodes uid 1000 — custom images with other uids (ours: 999) don't match. - nebi coupling defaults-on: without nebari-nebi-pack the chart still derives a non-empty nebi-internal-url and pulls the nebi init container on every spawn; opting out requires discovering
nebi.image.tag: "". custom.profilesis replaced wholesale — adding one profile means copying the pack defaults verbatim (comment acknowledges it; still a trap).- Release-name-coupled Secret names are hardcoded in three places (extraVolumes, extraEnv, rbac job) — any release name other than the documented one silently falls back to dummy auth.
- Startup ordering: the oauth Secret mounts
optional: truebut the config unconditionally reads/etc/oauth/issuer-urlwhen a hostname is rendered — the hub crash-loops until the operator provisions the client (self-heals, but reads as a failure).
Happy to split any of these into their own issues / PRs.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Treat the seven findings as separate triage items before choosing implementation scope. Start with values.yaml, 01-spawner.py, and the chart locations for extraVolumes, extraEnv, and the rbac job; compare those paths with the reported Keycloak, PVC, nss-wrapper, nebi, profile, Secret-name, and startup-order behavior. Done means each selected issue has a focused change and a reproducible validation path.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- helm, jupyter, kubernetes, python
- Domain
- authentication, backend, devops, infrastructure
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100