Why Kubernetes Dashboard Was Deprecated — Switching to Headlamp as an Alternative

For those new to Kubernetes, Kubernetes Dashboard was a familiar tool. It was a good starting point for users unfamiliar with kubectl, allowing them to check Pod and Deployment status on a web interface, view logs, or modify YAML.

However, the situation has changed. The official Kubernetes documentation now explicitly states that the Dashboard is deprecated and unmaintained, meaning it’s a project slated for discontinuation and no longer actively maintained. The project repository was also archived on January 21, 2026, becoming read-only.

The tool recommended by the official documentation as an alternative for new installations is Headlamp. Headlamp is not just a re-creation of the old Dashboard interface; it’s a modern Kubernetes UI that supports multi-cluster management, plugins, desktop execution, and in-cluster deployment.

This article outlines what the deprecation of Dashboard means for production environments, what improvements Headlamp offers, and how to design authentication and RBAC during the actual transition process.

Transitioning from an old single-cluster management screen to a modern multi-cluster UI


What Happened to Kubernetes Dashboard?

The official Kubernetes Dashboard documentation now clearly states the following:

Kubernetes Dashboard is deprecated and unmaintained.

This doesn’t just mean that new features will be added slowly. With the repository archived and active maintenance ceased, it means that compatibility with new Kubernetes versions, responses to security vulnerabilities, and dependency updates are unlikely.

Category Current Status
Kubernetes Dashboard Documentation Explicitly stated as deprecated and unmaintained
GitHub Repository Archived on January 21, 2026, read-only
Recommendation for New Installations Consider Headlamp
Existing Installations Plan migration after assessing current usage, rather than immediate discontinuation

Deprecation does not immediately mean all existing installations will stop working. Existing Dashboard Pods and Services may continue to run. However, over time, the burden of having an unsupported management interface connected to the cluster API increases.

Specifically, Dashboard can provide sensitive functionalities such as:

  • Cluster resource viewing
  • YAML creation and modification
  • Pod log viewing
  • Executing commands inside Pods
  • Accessing configuration resources, including Secrets
  • Scaling and restarting Deployments

Exposing an unmaintained UI with a highly privileged ServiceAccount is not a good operational choice.

Why Kubernetes Dashboard Reached Its Limits

Kubernetes Dashboard started as a simple web UI running within a single cluster. While sufficient for small-scale lab environments, its limitations became clear as Kubernetes operational practices evolved.

Single-Cluster View Architecture

Dashboard is typically installed separately for each cluster. If you have multiple development, staging, and production clusters, you’ll end up managing separate Dashboard URLs and authentication tokens for each.

As the number of clusters increases, the following issues arise:

  • Need to deploy and upgrade Dashboard for each cluster
  • Managing multiple URLs and Ingress policies
  • Duplication of ServiceAccounts and RoleBindings
  • User confusion about which cluster they are currently viewing
  • Difficulty comparing resources across environments

Inconvenient Bearer Token-Centric Login

Dashboard was primarily used by entering a ServiceAccount’s Bearer Token to log in. While simple, in an organizational environment, issuing, distributing, storing, and revoking tokens can be cumbersome.

For convenience, sharing long-lived tokens or cluster-admin privileged accounts increases security risks. Tokens might also be left in browser history, messengers, documents, or terminal outputs.

Fixed UI, Difficult to Extend

Modern Kubernetes platforms are not sufficient with just displaying basic resources.

  • Deployment status of Argo CD and Flux
  • Prometheus metrics
  • Security results from Trivy and Kubescape
  • OpenCost cost information
  • KubeVirt virtual machines
  • Organization-specific CRDs and operational workflows

Dashboard struggled to extend these tools into a unified user experience.

What is Headlamp?

Headlamp is an easy-to-use and extensible Kubernetes Web UI. It is currently being developed as an official Kubernetes sub-project under Kubernetes SIG UI.

Headlamp can be run in two forms:

Execution Method Connection Method Suitable Use Cases
Desktop App User’s kubeconfig Individual operators, multiple clusters, quick adoption
In-cluster Web UI ServiceAccount or OIDC Team common UI, central URL, organizational authentication integration

The desktop app does not require deploying the UI within the cluster. It allows users to switch between multiple clusters registered in their existing kubeconfig from a single application.

Official screen showing switching between multiple Kubernetes clusters in Headlamp

Figure: Flow extending from single-cluster-centric Dashboard to multi-cluster Headlamp · Source: Kubernetes Official Transition Document (CC BY 4.0)

The in-cluster method involves deploying Headlamp in Kubernetes, similar to Dashboard, and accessing it via a browser. This is suitable when you want to provide a common URL for a team or integrate OIDC login.

Dashboard vs. Headlamp Comparison

Item Kubernetes Dashboard Headlamp
Project Status Deprecated, repository archived Actively developed Kubernetes SIG UI project
Deployment Method In-cluster Desktop or In-cluster
Multi-cluster Separate access per cluster kubeconfig-based switching on desktop
Authentication Primarily ServiceAccount token kubeconfig, token, client certificate, OIDC
Authorization Control Kubernetes RBAC Kubernetes RBAC
Extensibility Limited Plugin support
Application Perspective Resource-centric Extended perspectives like Projects and Map View
Ecosystem Integration Limited Plugins for Flux, Prometheus, Trivy, OpenCost, etc.

Headlamp does not create a separate authorization system. The resources a user can view and the operations they can perform follow the results of Kubernetes API’s RBAC.

Official screen visualizing workload and service relationships in Headlamp Map View

Figure: Headlamp Map View visualizing workload and service relationships · Source: Kubernetes Official Transition Document (CC BY 4.0)

This point is crucial:

Installing Headlamp does not inherently make permissions secure; rather, the security is determined by what authentication information and RBAC permissions are connected to Headlamp.

Simplest Transition: Headlamp Desktop App

For environments used by individual operators or platform engineers, the desktop app is the simplest option.

On macOS, you can install it with Homebrew.

brew install --cask headlamp

On Windows, you can use WinGet.

winget install headlamp

On Linux, a Flatpak package is provided.

flatpak install flathub io.kinvolk.Headlamp

The Headlamp desktop app reads the user’s kubeconfig by default. If you use multiple kubeconfigs, you can specify them with the KUBECONFIG environment variable.

KUBECONFIG=~/.kube/dev:~/.kube/staging:~/.kube/prod headlamp

The advantages of the desktop approach are as follows:

  • No need to deploy a new Web UI to the cluster
  • No Ingress or public Service required
  • Reuses existing kubeconfig and user authentication
  • Switch between multiple clusters on one screen
  • Applies each user’s Kubernetes permissions as-is

On the other hand, you need to manage the security of the user’s PC’s kubeconfig and app deployment/updates. For the purpose of providing a common operational interface, the in-cluster method might be more suitable.

Team Common UI: In-cluster Installation with Helm

Add the official Headlamp Helm repository.

helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
helm repo update

Create a separate Namespace and install Headlamp.

kubectl create namespace headlamp

helm upgrade --install headlamp headlamp/headlamp 
  --namespace headlamp

Check the Pod and Service status.

kubectl get pods,svc -n headlamp

When testing features for the first time, it’s safer to use port-forward rather than exposing it externally.

kubectl port-forward -n headlamp svc/headlamp 8080:80

Access it in your browser at the following address:

http://127.0.0.1:8080

In a production environment, do not expose Helm default values as-is; configure Ingress, TLS, authentication, NetworkPolicy, and resource limits according to organizational standards.

Considerations Before Creating a cluster-admin Token

The official Headlamp installation documentation shows how to connect cluster-admin to a ServiceAccount as a quick test example. While convenient for feature verification, it should not be used as the default design for production environments.

The following configuration has powerful privileges:

kubectl create serviceaccount headlamp-admin -n headlamp

kubectl create clusterrolebinding headlamp-admin 
  --serviceaccount=headlamp:headlamp-admin 
  --clusterrole=cluster-admin

kubectl create token headlamp-admin -n headlamp

If this token is exposed, the entire cluster can be controlled. If you simply rename and transfer the cluster-admin token used in Dashboard to Headlamp, the UI will be replaced, but the security issues will remain.

The following principles are necessary in a production environment:

  1. Use individual identities for each person.
  2. Log in with organizational accounts via OIDC if possible.
  3. Define Role·ClusterRole appropriate for Namespace and job function.
  4. Separate read-only users from users with modification privileges.
  5. Separately review Secret viewing and Pod exec permissions.
  6. Minimize the use of shared ServiceAccount tokens.
  7. Enable tracking of user-specific actions in audit logs.

Example Starting with Read-Only Permissions

If you need an account that can view the entire cluster but cannot make changes, you can utilize the default Kubernetes view ClusterRole.

kubectl create serviceaccount headlamp-viewer -n headlamp

kubectl create clusterrolebinding headlamp-viewer 
  --serviceaccount=headlamp:headlamp-viewer 
  --clusterrole=view

kubectl create token headlamp-viewer -n headlamp

However, the view permission is not suitable for all organizations as-is. If only specific Namespaces should be visible, use Namespace-scoped RoleBinding instead of ClusterRoleBinding.

kubectl create rolebinding headlamp-team-a-view 
  --namespace team-a 
  --clusterrole view 
  --serviceaccount headlamp:headlamp-viewer

Verify actual permissions with kubectl auth can-i before deployment.

kubectl auth can-i --list 
  --as system:serviceaccount:headlamp:headlamp-viewer

Also check for specific high-risk operations separately.

kubectl auth can-i get secrets 
  --all-namespaces 
  --as system:serviceaccount:headlamp:headlamp-viewer

kubectl auth can-i create pods/exec 
  --all-namespaces 
  --as system:serviceaccount:headlamp:headlamp-viewer

Do not just check if buttons are hidden in the UI; you must verify that the Kubernetes API actually denies the operations.

What are the Benefits of Integrating OIDC?

If your team uses an in-cluster Headlamp, integrating OIDC is highly worthwhile.

Using OIDC allows you to create the following operational model:

사용자
  → 조직 Identity Provider
  → Headlamp
  → Kubernetes API
  → 사용자·그룹 기반 RBAC

The advantages are clear:

  • No need to pass shared tokens
  • Handle resignations and department transfers from a central account
  • Map users and groups to Kubernetes RBAC
  • Distinguish human identities in audit logs
  • Enable MFA and conditional access policies

For OIDC configuration, the Redirect URI, Client ID, Client Secret storage method, and Kubernetes API Server’s OIDC settings must be aligned. If the Headlamp URL changes, the Redirect URI must also be updated.

Headlamp Plugins: A Benefit and a New Supply Chain Boundary

A major differentiator for Headlamp is its plugins. It allows integrating not only basic Kubernetes resources but also tools used by your organization into the UI.

The official documentation and project materials introduce the following ecosystem integrations:

  • Flux
  • Prometheus
  • Trivy
  • Kubescape
  • OpenCost
  • KubeVirt
  • Backstage

Plugins significantly improve the operational experience but also expand the trust boundary.

  • Plugin source and maintenance status
  • Requested Kubernetes permissions
  • Data accessed by the frontend
  • External API and network communication
  • Version compatibility and update procedures
  • Package integrity and supply chain security

Before installing plugins, you should review their source, release signatures, permissions, and network behavior. It’s best not to add plugins indiscriminately if they are not used.

Realistic Steps for Migrating from Dashboard to Headlamp

There’s no need to immediately delete the existing Dashboard upon installing the new UI. It’s safer to run them in parallel for a period, comparing core functionalities and permissions.

Step 1: Investigate Current Dashboard Usage

  • Who uses Dashboard?
  • Which Namespaces and clusters are accessed?
  • Which features are used among logs, exec, and YAML modification?
  • Which ServiceAccounts and RoleBindings are connected?
  • Are there Ingress and external access paths?

Step 2: Choose Headlamp Execution Method

Requirement Recommended Starting Point
Individual operator managing multiple clusters Desktop App
Team requires a common URL In-cluster
Organizational account and MFA integration In-cluster + OIDC
Don’t want to add UI to the cluster Desktop App
Integrate platform features with plugins Both methods can be considered

Step 3: Verify Functionality with Minimum Privileges

  • Resource list and detailed information
  • Logs and events
  • YAML viewing and modification
  • Pod exec
  • Namespace switching
  • Multi-cluster switching
  • Custom Resource display
  • Required plugins

Each feature should be tested with both authorized users and users who should be denied access.

Step 4: Secure Headlamp Access Path

  • Use a separate host with TLS applied
  • Apply OIDC or approved authentication methods
  • Minimize exposure to the public internet
  • NetworkPolicy and firewall restrictions
  • Review CSP and security headers
  • Audit access and modification operations
  • Pin Helm Chart and image versions

Step 5: Remove Dashboard

After completing key tasks and permission verification with Headlamp, remove the existing Dashboard.

If installed with Helm, you can delete it as follows:

helm uninstall kubernetes-dashboard 
  -n kubernetes-dashboard

Check for remaining resources.

kubectl get all,sa,role,rolebinding 
  -n kubernetes-dashboard

Also check for Dashboard-specific ClusterRoleBindings.

kubectl get clusterrolebinding 
  -o custom-columns='NAME:.metadata.name,SERVICE_ACCOUNTS:.subjects[*].name' 
  | grep -i dashboard

Do not automatically delete all resources found here. Verify if other tools share these permissions, then remove only Dashboard-specific resources.

Headlamp Is Not the Answer to Every Situation

Headlamp is a natural alternative suggested by the official Kubernetes documentation, but it is not a platform that solves all operational requirements.

In the following cases, it should be used in conjunction with other tools:

  • Declarative deployment and change history: Argo CD, Flux
  • Metrics and alerts: Prometheus, Grafana
  • Log search: Loki, OpenSearch, Elasticsearch
  • Cost analysis: OpenCost
  • Security posture management: Trivy, Kubescape, etc.
  • Developer self-service portal: Backstage

Headlamp is closer to a UI for exploring the Kubernetes API and investigating issues. Its role becomes overly broad if it’s considered a replacement for monitoring, GitOps, cost, and security tools.

Transition Checklist

Area Check Item
Project Status Reflect Dashboard’s deprecated/archived status in operational documentation
Installation Method Choose between desktop and in-cluster based on purpose
Authentication Prioritize individual identities and OIDC over shared tokens
RBAC Prohibit default use of cluster-admin, verify minimum privileges
Network Review TLS, Ingress, NetworkPolicy, and external exposure
Functionality Test logs, events, YAML, exec, CRD, and multi-cluster
Plugins Review source, permissions, updates, and supply chain risks
Removal Clean up Dashboard-specific ServiceAccounts and Bindings
Operations Establish Headlamp version, image, and Chart update procedures

Conclusion: An Opportunity to Redesign Access Permissions, Not Just Replace the UI

The deprecation of Kubernetes Dashboard is not just news about a UI replacement. It’s an operational signal that requires deciding whether to continue connecting an unmaintained management UI to the cluster API.

Headlamp offers desktop and in-cluster execution, multi-cluster capabilities, OIDC, and plugin extensibility, demonstrating a suitable direction for Kubernetes UIs post-Dashboard.

However, the core of the transition is not merely the command to install Headlamp.

Instead of simply transferring the cluster-admin token used in Dashboard to Headlamp, you must redesign user-specific authentication and least-privilege RBAC.

Individual operators can start small with the desktop app and existing kubeconfig. If a common UI for the team is needed, consider in-cluster deployment and OIDC. After parallel verification of key functionalities and permissions, the transition can be completed by cleaning up Dashboard-specific ServiceAccounts, RoleBindings, and external access paths.


Official References


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *