A web application with a Go Gin backend and Svelte frontend for managing Kubernetes rollouts with gate controls.
The dashboard provides comprehensive gate management for Kubernetes rollouts:
- Gate Status Display: Shows the status of all gates for each rollout
- Bypass Gates: Ability to temporarily bypass gate checks for emergency deployments
- Gate History: Track which versions have passed through gates
Kustomizations can be associated with rollouts using the annotation format:
rollout.kuberik.com/substitute.<variable>.from: <rollout>
This allows the dashboard to find related kustomizations that reference a specific rollout for variable substitution.
Example:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: hello-world
annotations:
rollout.kuberik.com/substitute.HELLO_WORLD_VERSION.from: "hello-world-app"In this example, the kustomization hello-world is associated with the rollout hello-world-app and will receive the HELLO_WORLD_VERSION variable from that rollout.
You can allow the rollout controller to bypass gate checks for a specific version by adding the rollout.kuberik.com/bypass-gates annotation with the version as the value:
# Allow gate bypass for a specific version
kubectl annotate rollout <rollout-name> rollout.kuberik.com/bypass-gates="v1.2.3"
# Remove gate bypass permission
kubectl annotate rollout <rollout-name> rollout.kuberik.com/bypass-gates-How it works: When this annotation is set, the rollout controller will be allowed to deploy the specified version without waiting for gates to pass. This is useful for emergency deployments or testing scenarios where you need to bypass normal gate checks.
Warning: Use this feature carefully as it allows the rollout controller to bypass important safety checks for the specified version. The dashboard provides a UI to manage this annotation safely, allowing you to select which specific version should be allowed to bypass gates.
.
├── frontend/ # Svelte frontend
├── main.go # Go backend entry point
├── pkg/ # Go packages
│ └── kubernetes/ # Kubernetes client utilities
└── go.mod # Go module file
- Install Go dependencies:
go mod tidy- Run the backend server:
go run main.goThe backend server will run on http://localhost:8080
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Run the development server:
npm run devThe frontend development server will run on http://localhost:5173
- Build the frontend:
cd frontend
npm run build- The built files will be in
frontend/distand will be served by the Go backend.
GET /api/health- Health check endpointGET /api/rollouts- List all rolloutsGET /api/rollouts/:namespace/:name- Get specific rollout detailsPOST /api/rollouts/:namespace/:name/pin- Pin a version to a rolloutPOST /api/rollouts/:namespace/:name/bypass-gates- Add bypass-gates annotation
- The dashboard
Servicenow remainsClusterIPand traffic is routed through Gateway API resources (GatewayandHTTPRoute) defined indeploy/base/gateway.yaml. TLS is terminated by the Gateway, so make sure a secret namedrollout-dashboard-tlsexists in thekuberik-systemnamespace:
kubectl create secret tls rollout-dashboard-tls \
--namespace kuberik-system \
--cert tls.crt \
--key tls.key-
Update the hostnames inside
deploy/base/gateway.yaml(or patch them per environment) so they match the certificate's Subject Alternative Names. -
For local testing with Kind, run
scripts/setup-dev-environment.sh. The script installs Envoy Gateway which implements the Gateway API and exposes the dashboard via Gateway resources. Add the chosen hostname to/etc/hostsif it is not already resolvable.