|
| 1 | +# sam-mesh Helm chart |
| 2 | + |
| 3 | +Deploys a self-contained SAM mesh (control plane, router, console, and |
| 4 | +optionally an in-cluster Postgres + Dex) for local development, testing, or |
| 5 | +self-hosting your own hub. |
| 6 | + |
| 7 | +> For large-scale production deployments (GKE/EKS/AKS) using externally |
| 8 | +> managed Postgres/DNS/OIDC, see the |
| 9 | +> [Production Kubernetes Deployment guide](https://sam-mesh.dev/docs/user/kubernetes-deployment/), |
| 10 | +> which uses plain manifests instead of this chart. |
| 11 | +
|
| 12 | +## Install |
| 13 | + |
| 14 | +```bash |
| 15 | +helm upgrade --install sam-mesh ./charts/sam-mesh --namespace sam --create-namespace |
| 16 | +``` |
| 17 | + |
| 18 | +At the end of `helm install`/`helm upgrade`, the chart prints the exact |
| 19 | +`kubectl` command to retrieve your generated secrets (see below) — read the |
| 20 | +NOTES output before doing anything else. |
| 21 | + |
| 22 | +## Secrets: `controlPlane.adminToken` and `database.postgres.password` |
| 23 | + |
| 24 | +Both default to `""` in [values.yaml](values.yaml). When left blank, the chart |
| 25 | +**auto-generates** a random 32-character secret on first install and stores it |
| 26 | +in the `<release>-secrets` Kubernetes Secret; the same value is reused on |
| 27 | +`helm upgrade` (it is not rotated on every upgrade). Retrieve the admin token |
| 28 | +with: |
| 29 | + |
| 30 | +```bash |
| 31 | +kubectl get secret --namespace <namespace> <release>-secrets -o jsonpath='{.data.admin-token}' | base64 -d; echo |
| 32 | +``` |
| 33 | + |
| 34 | +You can also pin either value explicitly instead of letting the chart |
| 35 | +generate one, e.g. for reproducible dev environments or to match an |
| 36 | +existing secret: |
| 37 | + |
| 38 | +```bash |
| 39 | +helm upgrade --install sam-mesh ./charts/sam-mesh \ |
| 40 | + --set controlPlane.adminToken="$(openssl rand -hex 32)" \ |
| 41 | + --set database.postgres.password="$(openssl rand -hex 32)" |
| 42 | +``` |
| 43 | + |
| 44 | +## `controlPlane.insecureSkipTlsVerify` |
| 45 | + |
| 46 | +Defaults to `false`. Only set this to `true` when `controlPlane.oidcIssuer` |
| 47 | +points at an OIDC issuer served with a self-signed or otherwise untrusted |
| 48 | +certificate — for example the Kubernetes API server's own issuer |
| 49 | +(`https://kubernetes.default.svc.cluster.local`) used for ServiceAccount |
| 50 | +Workload Identity Federation in local `kind` clusters, or a local Dex/mock |
| 51 | +OIDC instance without a real cert. Leave it `false` for any real-world OIDC |
| 52 | +provider (Google, Okta, Dex behind a real TLS certificate, etc.). |
| 53 | + |
| 54 | +## `controlPlane.autoApproveEnrollment` |
| 55 | + |
| 56 | +Defaults to `true` (any node/router presenting a valid identity token is |
| 57 | +enrolled immediately, no manual step). Set to `false` if you want an |
| 58 | +administrator to approve each enrollment via `/admin/enrollments` before a |
| 59 | +node can join — see the |
| 60 | +[Control Plane Configuration guide](https://sam-mesh.dev/docs/user/control-plane-configuration/#6-headless-node-enrollment-bootstrap-token-flow). |
| 61 | + |
| 62 | +## Dex (`dex.enabled`) |
| 63 | + |
| 64 | +Disabled by default. The bundled Dex is only meant for local/dev OIDC login |
| 65 | +(username/password test users); real deployments should point |
| 66 | +`controlPlane.oidcIssuer` at your own identity provider instead of enabling |
| 67 | +this. |
0 commit comments