diff --git a/README.md b/README.md index 468577e..47dee84 100644 --- a/README.md +++ b/README.md @@ -20,27 +20,7 @@ The proxy sits between the ingress controller and workspace pods, handling: ## Architecture -``` -Browser - │ - ▼ -Ingress (/proxy/*) - │ - ▼ -┌─────────────────────────────────────────────────┐ -│ Proxy Service (:8080) │ -│ │ -│ Request Logging → CORS → Auth → Routing │ -│ │ -│ /healthz, /readyz → 200 OK │ -│ /sw.js → no-op ServiceWorker │ -│ /proxy/{ns}/{name} → reverse proxy handler │ -└────────────────────────┬────────────────────────┘ - │ - ▼ - {name}.{namespace}.svc.cluster.local:80 - (Workspace Pod) -``` +[![Architecture diagram](docs/architecture.svg)](docs/architecture.svg) ## Request Flow diff --git a/docs/architecture.svg b/docs/architecture.svg new file mode 100644 index 0000000..d4a9109 --- /dev/null +++ b/docs/architecture.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ingress / Routing + + + + Ingress + /proxy/* + + + + + + + Proxy Service (:8080) + + + + Request Logging → CORS → Auth → Routing + + + /healthz, /readyz + + /sw.js (no-op) + + + /proxy/{ns}/{name}/... → reverse proxy + + + + + + + Workspace Pod + {name}.{namespace}.svc.cluster.local:80 + HTTP / WebSocket / SSE + + + + + + Browser + workspace web UI + + + + API + Goa / Go + + + + Dex / OIDC + optional IdP + + + + + + + + + + + + + + + LEGEND + + + Proxy / data flow + + + Browser → ingress traffic + + + Auth / token flow + +