Weave GitOps¶
Weave GitOps is a lightweight web dashboard purpose-built for Flux CD clusters. Unlike general-purpose Kubernetes dashboards (Lens, Rancher, the Kubernetes Dashboard), Weave GitOps understands the Flux resource model natively — it renders HelmReleases, Kustomizations, GitRepositories, and their reconciliation status as first-class objects rather than opaque custom resources.
The UI operates in read-only mode against the cluster, surfacing Flux reconciliation state, dependency graphs, and event timelines without requiring direct kubectl access. It authenticates users via a local admin account and uses Kubernetes RBAC impersonation to scope API access, meaning the dashboard itself holds elevated privileges but delegates authorization decisions to the cluster's native RBAC layer.
Overview¶
| Property | Value |
|---|---|
| Namespace | weave-gitops |
| Type | HelmRelease (chart: weave-gitops v4.0.36) |
| Layer | Foundation services |
| Chart | weave-gitops v4.0.36 |
| Status | Enabled |
| Source | apps/base/weave-gitops/ |
Dependencies¶
Upstream — required before Weave GitOps starts¶
No upstream Flux dependencies — starts immediately.
Downstream — services that depend on Weave GitOps¶
No known downstream Flux dependencies.
Purpose¶
Weave GitOps provides a visual reconciliation monitor for the platform's 25-service Flux deployment. When a service fails to reconcile — chart pull timeout, variable substitution error, health check deadline exceeded — the dashboard surfaces the failure context (events, conditions, source status) without requiring CLI access to the cluster. This is the primary observability path for GitOps deployment state, complementing Prometheus metrics with human-readable Flux object inspection.
Features¶
| Feature | Detail |
|---|---|
| Local admin authentication | Bcrypt-hashed admin credential baked into the HelmRelease values, providing immediate access without external identity provider dependencies. |
| RBAC impersonation | The service account impersonates the "admin" user for API calls, decoupling dashboard permissions from the service account's own privileges and enabling future multi-tenancy via additional impersonation subjects. |
| Security-hardened pod | Read-only root filesystem, all capabilities dropped, non-root execution (UID 1000/GID 2000), and pod-level fsGroup — minimizing attack surface for a network-exposed UI. |
| Traefik IngressRoute exposure | Exposed via Traefik IngressRoute on Host(weave.local) routing to the ClusterIP service on port 9001, using the web entrypoint (HTTP). |
| Prometheus metrics | Metrics endpoint enabled, exposing request latency, reconciliation polling stats, and Go runtime metrics for the dashboard process. |
| Flux-aware health checking | The parent Kustomization health-checks the ww-gitops-weave-gitops Deployment directly, blocking downstream dependents until the dashboard is serving. |
| Install/upgrade remediation | Both install and upgrade phases configured with 3 retries, preventing transient Helm failures from leaving the release in a failed state. |
Architecture¶
Deployment Topology¶
graph TD
subgraph "weave-gitops namespace"
POD["ww-gitops-weave-gitops<br/>Pod (UID 1000)"]
SVC["weave-gitops<br/>ClusterIP :9001"]
end
subgraph "flux-system namespace"
HR["HelmRelease<br/>weave-gitops"]
REPO["HelmRepository<br/>OCI ghcr.io/weaveworks/charts"]
KUST["Kustomization<br/>weave-gitops"]
CM["ConfigMap<br/>cluster-vars"]
end
subgraph "Traefik"
IR["IngressRoute<br/>Host: weave.local"]
EP["Entrypoint: web"]
end
KAPI["Kubernetes API"]
EP -->|"HTTP"| IR
IR -->|":9001"| SVC
SVC -->|":9001"| POD
POD -->|"impersonate: admin"| KAPI
HR -->|"pull chart"| REPO
KUST -->|"substituteFrom"| CM
KUST -->|"manages"| HR
Configuration¶
All values sourced from base/services/environment.env
(base); per-environment overrides in clusters/stages/dev/.../environment.env.
| Parameter | Dev | Prod |
|---|---|---|
WEAVE_GITOPS_CHART_VERSION |
4.0.36 |
4.0.36 |
WEAVE_GITOPS_CPU_LIMIT |
100m |
500m |
WEAVE_GITOPS_CPU_REQUEST |
100m |
100m |
WEAVE_GITOPS_MEMORY_LIMIT |
128Mi |
512Mi |
WEAVE_GITOPS_MEMORY_REQUEST |
128Mi |
256Mi |
Operations¶
HelmRelease stuck in upgrade — chart pull failure¶
Symptoms: kubectl get helmrelease weave-gitops -n flux-system shows upgrade retries exhausted. Events show failed to pull chart: oci://ghcr.io/weaveworks/charts/weave-gitops with authentication or network errors. Dashboard remains on previous version.
kubectl describe helmrelease weave-gitops -n flux-system | grep -A5 'Status:'
kubectl get helmrepository weave-gitops -n flux-system -o yaml | grep -A10 'status:'
kubectl logs -n flux-system deploy/helm-controller --since=10m | grep weave-gitops
flux reconcile source helm weave-gitops
flux reconcile helmrelease weave-gitops
Dashboard unreachable via IngressRoute¶
Symptoms: Browser shows 404 or connection refused when accessing http://weave.local. Other IngressRoutes (e.g. other services) work normally.
kubectl get ingressroute weave-gitops -n weave-gitops -o yaml
kubectl get svc -n weave-gitops
kubectl get endpoints -n weave-gitops
kubectl port-forward -n weave-gitops svc/weave-gitops 9001:9001
curl -s http://localhost:9001 | head -20
kubectl logs -n traefik deploy/traefik --since=5m | grep weave
Pod CrashLoopBackOff — RBAC or permission denied¶
Symptoms: kubectl get pods -n weave-gitops shows CrashLoopBackOff. Pod logs contain cannot impersonate resource or forbidden: User "system:serviceaccount:weave-gitops:..." cannot create resource "subjectaccessreviews".
kubectl logs -n weave-gitops deploy/ww-gitops-weave-gitops --previous
kubectl get clusterrolebinding | grep weave
kubectl get clusterrole | grep weave
kubectl auth can-i impersonate users --as=system:serviceaccount:weave-gitops:ww-gitops-weave-gitops
kubectl describe clusterrole ww-gitops-weave-gitops | grep -A5 impersonate
Authentication failure — admin login rejected¶
Symptoms: Dashboard loads but login with admin / expected password returns "Invalid credentials". No pod crashes — purely an application-level auth rejection.
kubectl get secret -n flux-system cluster-vars -o yaml | grep WEAVE
kubectl get helmrelease weave-gitops -n flux-system -o jsonpath='{.spec.values.adminUser}'
kubectl exec -n weave-gitops deploy/ww-gitops-weave-gitops -- env | grep -i admin
htpasswd -nbBC 5 admin 'your-password' | cut -d: -f2
Kustomization health check timeout¶
Symptoms: flux get kustomizations weave-gitops shows Health check failed after 3m0s despite the HelmRelease reporting as ready. The Deployment ww-gitops-weave-gitops exists but readiness probe is failing.
kubectl get deploy ww-gitops-weave-gitops -n weave-gitops -o yaml | grep -A10 readinessProbe
kubectl describe deploy ww-gitops-weave-gitops -n weave-gitops | grep -A5 Conditions
kubectl get events -n weave-gitops --sort-by=.lastTimestamp | tail -20
kubectl top pod -n weave-gitops
flux reconcile kustomization weave-gitops
Related¶
apps/base/weave-gitops/— Kubernetes manifestsbase/services/weave-gitops.yaml— Flux Kustomizationbase/services/environment.env— environment variables
Generated from service-catalog.json at commit 165b485 · catalog sha 4d088b0b3a67b4c4