The Kubernetes Dashboard is a general-purpose, web-based UI for Kubernetes clusters that allows users to manage applications, inspect cluster resources, view logs, and troubleshoot issues without using the kubectl CLI. It provides a visual overview of all workloads in the cluster — deployments, pods, services, ingress rules, storage, and RBAC configuration — making it accessible to team members who are less familiar with the Kubernetes CLI. The Dashboard requires careful security configuration: it should never be exposed publicly without authentication, and cluster-admin access should be restricted to named user accounts. This guide covers installing the Kubernetes Dashboard on RHEL 9 using Helm, configuring a service account with appropriate permissions, and accessing the UI securely.
Prerequisites
- Kubernetes cluster running on RHEL 9
- Helm installed
Step 1 — Install the Kubernetes Dashboard
# Add the Dashboard Helm repository
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm repo update
# Install the Dashboard (v7+, which uses a new architecture)
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard
--create-namespace
--namespace kubernetes-dashboard
kubectl get pods -n kubernetes-dashboard
Step 2 — Create an Admin Service Account
# /tmp/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
kubectl apply -f /tmp/dashboard-admin.yaml
Step 3 — Generate a Login Token
# Generate a short-lived token (8 hours)
kubectl create token admin-user -n kubernetes-dashboard --duration=28800s
# For a long-lived token (not recommended for production):
kubectl create secret generic admin-user-token
--from-literal=token=$(kubectl create token admin-user -n kubernetes-dashboard)
-n kubernetes-dashboard
Step 4 — Access the Dashboard
# Method 1: kubectl proxy (only accessible from localhost)
kubectl proxy
# Access: http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard-kong-proxy:443/proxy/
# Method 2: NodePort (accessible from your network)
kubectl patch svc kubernetes-dashboard-kong-proxy
-n kubernetes-dashboard
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"nodePort":30443,"targetPort":8443,"protocol":"TCP"}]}}'
kubectl get svc -n kubernetes-dashboard
# Access: https://server-ip:30443
# Login with the token generated in Step 3
Step 5 — Restrict Dashboard Access
# For production: restrict NodePort 30443 to admin IPs only
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/8 port port=30443 protocol=tcp accept'
firewall-cmd --reload
# Alternatively, place behind an Nginx Ingress with IP allowlist:
# nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/8,192.168.0.0/16"
Conclusion
The Kubernetes Dashboard on RHEL 9 provides a valuable visual interface for cluster inspection and management, but it must be secured carefully. The cluster-admin ClusterRoleBinding grants full read/write access to every resource in the cluster — equivalent to unrestricted kubectl access. For teams with multiple users, create separate ServiceAccounts with namespace-scoped roles (as covered in the Kubernetes RBAC tutorial) so that each user can only see and modify resources in their assigned namespaces. Always use time-limited tokens (kubectl create token --duration) rather than long-lived tokens for Dashboard access.
Next steps: How to Configure Kubernetes RBAC on RHEL 9, How to Monitor Kubernetes with Prometheus on RHEL 9, and How to Install Jenkins on RHEL 9.