The Kubernetes Dashboard is a browser-based UI that allows you to visualize, manage, and troubleshoot workloads and resources inside your Kubernetes cluster. In this guide, we will deploy the Dashboard on a K3s High Availability (HA) cluster that is already running successfully on three Ubuntu 24.04 control-plane nodes.
This tutorial assumes:
- You already have a working K3s HA cluster
- All commands are executed on the primary node (CP1) unless otherwise specified
- You have kubectl and helm available from cp1 via K3s installation
If your cluster is not yet installed, refer to the K3s HA installation guide first.
Step 1: Install Helm (if not already installed)
Helm is required because Kubernetes Dashboard now supports only Helm-based installation.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Verify installation:
helm version
Step 2: Add Kubernetes Dashboard Helm Repository
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm repo update
Step 3: Deploy Kubernetes Dashboard
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--namespace kubernetes-dashboard \
--create-namespace
This will install:
- Dashboard UI
- Kong proxy for secure access
- Required RBAC components
To verify the deployment:
kubectl -n kubernetes-dashboard get pods
The Dashboard components should show status as Running.
Step 4: Expose the Dashboard for External Access
K3s does not provide LoadBalancer services by default for Metal deployments. To enable external access temporarily:
kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard-kong-proxy \
-p '{"spec":{"type":"NodePort"}}'
Check assigned NodePort:
kubectl -n kubernetes-dashboard get svc kubernetes-dashboard-kong-proxy
Example output:
kubernetes-dashboard-kong-proxy NodePort 10.43.190.83 <none> 443:31443/TCP 1m
Meaning:
- UI can be accessed via any control-plane node IP
- Port: 31443
Open in browser:
https://<ANY_CP_NODE_IP>:31443
Example for our setup:
https://10.11.12.11:31443
Your browser will show an untrusted certificate warning – proceed anyway.
Step 5: Create a Service Account for Login
By default, Dashboard requires a token authentication.
Create the YAML file:
cat <<EOF | sudo tee dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
Apply it:
kubectl apply -f dashboard-admin.yaml
Step 6: Retrieve Login Token
kubectl -n kubernetes-dashboard create token admin-user
Copy the output token and paste it into the Dashboard login page:
- Authentication Method: Bearer Token
You will now access the UI with full admin privileges.
Optional: Secure Access Using Reverse Proxy Manager
Since we have Nginx Proxy Manager, we can:
- Bind a clean domain like
https://k8s.syncbricks.com - Enable proper SSL certificate (LetsEncrypt)
- Protect Dashboard behind authentication
This improves usability and security for daily operations.
(A full configuration guide will be published in part 3 of this series.)
Dashboard Installed Successfully
You can now:
- View, scale, restart applications
- Monitor nodes, pods, workloads, jobs
- Deploy new apps using UI