Grafana-opinionated authenticating and authorizing reverse proxy
1.7K
Grafana-opinionated authenticating and authorizing reverse proxy
Multipass is an opinionated authenticating and authorizing reverse proxy for Grafana and the observability systems around it. It puts login, access control, and auditability at the edge, so Grafana and upstream backends do not each need their own authentication and authorization setup.
It handles browser authentication with OIDC, evaluates authorization from centrally managed identity data, and forwards the headers or tokens each backend expects. In front of Grafana, Prometheus, Loki, OpenSearch, Kibana, VictoriaMetrics, and similar systems, Multipass becomes the single control point for access.
It runs in two modes:
Single sign-on. Tenant isolation. Full audit trail. Zero backend changes.
Observability and operations tools rarely agree on how access should work. One wants OIDC, another expects headers, another wants JWTs. The result is duplicated setup, uneven access control, and too much backend-specific glue.
Multipass solves that at the edge:
Authorization is designed in two layers:
admin, devops, dev, and manMultipass sits both in front of Grafana for browser sign-in and on the datasource path between Grafana or API clients and the LGTM backends.
Browser users
|
| web login + session
v
+-----------------+ +---------------+
| Multipass |------->| OIDC provider |
| browser edge | +---------------+
+-----------------+
|
| trusted user headers
v
+---------+
| Grafana |
+---------+
|
| datasource proxy
v
+-------------------+ +------------+
| Multipass |------->| Audit sink |
| datasource edge | +------------+
+-------------------+
v v v
+------+ +-------+ +-------+
| Loki | | Mimir | | Tempo |
+------+ +-------+ +-------+
See config.example.yaml for complete examples.
For a realistic local profile backed by an external OIDC provider, use
config.oidc.yaml. This keeps Multipass on oidc and
token, so moving from local OIDC to production OIDC is mostly an issuer and client
configuration change instead of a provider swap.
Start Multipass by passing exactly one config file argument:
./multipass config.oidc.yaml
go run ./cmd/multipass config.oidc.yaml
Requests are routed by backend name: http://multipass:8080/<backend>/<path>
http://multipass:8080/loki/loki/api/v1/query → http://loki:3100/loki/api/v1/queryhttp://multipass:8080/grafana/api/dashboards → http://grafana:3000/api/dashboardsConfigure backends: Edit k8s/configmap.yaml with your backend endpoints:
backends:
loki:
type: prometheus
endpoint: http://loki.monitoring.svc.cluster.local:3100
opensearch:
type: jwt
endpoint: https://opensearch.logging.svc.cluster.local:9200
Deploy to cluster:
kubectl apply -f k8s/
Deploy with in-cluster OIDC provider:
kubectl apply -k k8s/oidc/
This overlay keeps Multipass on oidc and token while pointing OIDC at
oidc-provider.monitoring.svc.cluster.local:8081.
This creates:
Verify:
kubectl get pods -n monitoring -l app=multipass
kubectl logs -n monitoring -l app=multipass
See doc/DEV.md for local development, testing, build modes, and release instructions.
Use the external OIDC profile when you want Multipass to behave like production integrations.
MIT
Content type
Image
Digest
sha256:eab50619e…
Size
20.5 MB
Last updated
7 months ago
docker pull karloie/multipass