<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Headlamp Blog</title>
        <link>https://headlamp.dev/blog</link>
        <description>Headlamp Blog</description>
        <lastBuildDate>Fri, 15 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Migrating from Kubernetes Dashboard to Headlamp: A Step-by-Step Guide]]></title>
            <link>https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration</link>
            <guid>https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A practical, step-by-step guide to moving from the archived Kubernetes Dashboard to Headlamp, covering install, RBAC, multi-cluster, daily workflows, and cleanup.]]></description>
            <content:encoded><![CDATA[<p>With Kubernetes Dashboard now archived, teams need a clear path forward that does not disrupt how they already work. This guide is written for that moment, so the switch feels routine instead of risky.</p>
<p>Kubernetes Dashboard has been a pillar of the Kubernetes world, helping teams both build and learn. It offered a way to see what was running, check a pod, and feel less lost. Now that Dashboard is archived, many teams are asking the same question:</p>
<p>What is the replacement, and how can the move happen without breaking workflows?</p>
<p>This guide walks through that move. It keeps the steps clear, but it also explains why each step matters. By the end, you'll have a working Headlamp setup and a clean exit from Dashboard.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-before-you-start-know-what-is-changing">1. Before You Start: Know What Is Changing<a class="hash-link" aria-label="Direct link to 1. Before You Start: Know What Is Changing" title="Direct link to 1. Before You Start: Know What Is Changing" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#1-before-you-start-know-what-is-changing">​</a></h2>
<p>Kubernetes Dashboard and Headlamp both show what is running in a cluster, but they work differently.</p>
<ul>
<li>When Headlamp runs on the desktop, it uses your existing kubeconfig to connect to one or more clusters and can be extended with plugins.</li>
<li>When Headlamp runs inside a cluster, it uses a Kubernetes ServiceAccount to access the API and follow RBAC rules.</li>
<li>Kubernetes Dashboard, in contrast, only runs in-cluster and always relies on ServiceAccount tokens.</li>
</ul>
<p>Understanding these models early helps you choose the right setup and permissions.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="to-recap">To recap:<a class="hash-link" aria-label="Direct link to To recap:" title="Direct link to To recap:" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#to-recap">​</a></h3>
<ul>
<li>Dashboard runs inside a cluster and is usually accessed through <code>port-forward</code> or Ingress. It often relies on ServiceAccount tokens.</li>
<li>Headlamp can run on your desktop or in-cluster.
<ul>
<li>On desktop, it reads your kubeconfig, like <code>kubectl</code> does.</li>
<li>In-cluster, it can use a ServiceAccount and follow RBAC like any other workload.</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="11-how-kubernetes-dashboard-works">1.1 How Kubernetes Dashboard Works<a class="hash-link" aria-label="Direct link to 1.1 How Kubernetes Dashboard Works" title="Direct link to 1.1 How Kubernetes Dashboard Works" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#11-how-kubernetes-dashboard-works">​</a></h3>
<p>Dashboard is a web app that runs inside your cluster.</p>
<ul>
<li>It is installed in the cluster, often with Helm.</li>
<li>A single Dashboard is typically run per cluster.</li>
<li>Access is usually through <code>kubectl port-forward</code> or an Ingress.</li>
<li>Login is done with a Bearer token, often from a ServiceAccount.</li>
<li>It includes forms that help create resources.</li>
<li>It leans on tables and lists for navigation.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="12-how-headlamp-works">1.2 How Headlamp Works<a class="hash-link" aria-label="Direct link to 1.2 How Headlamp Works" title="Direct link to 1.2 How Headlamp Works" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#12-how-headlamp-works">​</a></h3>
<p>Headlamp acts more like a Kubernetes client with a UI.</p>
<ul>
<li>It can run on your desktop or in a cluster.</li>
<li>It reads your kubeconfig, like <code>kubectl</code> does.</li>
<li>It can show more than one cluster in one place.</li>
<li>It favors YAML when creating or changing resources.</li>
<li>It includes list views and a visual map.</li>
<li>Features can be added with plugins.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="13-what-stays-the-same">1.3 What Stays the Same<a class="hash-link" aria-label="Direct link to 1.3 What Stays the Same" title="Direct link to 1.3 What Stays the Same" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#13-what-stays-the-same">​</a></h3>
<p>Many workflows will feel familiar:</p>
<ul>
<li>Browse workloads and resources</li>
<li>Filter by namespace</li>
<li>Inspect YAML, events, and status</li>
<li>View logs</li>
<li>Take actions your RBAC allows</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="14-what-changes">1.4 What Changes<a class="hash-link" aria-label="Direct link to 1.4 What Changes" title="Direct link to 1.4 What Changes" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#14-what-changes">​</a></h3>
<p>A few things will feel different:</p>
<ul>
<li>Login shifts from pasted tokens to kubeconfig (and sometimes SSO).</li>
<li>Creation shifts from forms to "apply YAML."</li>
<li>Multi-cluster becomes the norm, not a special case.</li>
<li>The map view shows how resources connect.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-pre-migration-checklist">2. Pre-Migration Checklist<a class="hash-link" aria-label="Direct link to 2. Pre-Migration Checklist" title="Direct link to 2. Pre-Migration Checklist" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#2-pre-migration-checklist">​</a></h2>
<p>This checklist is here to make the switch steady and predictable. It helps you catch the small surprises that slow teams down, like the wrong cluster context or missing permissions. It also keeps your security model intact. Headlamp should rely on the same identity and RBAC you already trust in Kubernetes. Once that is in place, you can move faster in a UI that is straightforward to navigate and works well as your clusters and workloads grow.</p>
<p>By the end of this section, you will have a way to prove the migration worked before turning off Dashboard.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="21-write-down-what-you-use-today">2.1 Write Down What You Use Today<a class="hash-link" aria-label="Direct link to 2.1 Write Down What You Use Today" title="Direct link to 2.1 Write Down What You Use Today" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#21-write-down-what-you-use-today">​</a></h3>
<p>List the basics:</p>
<ul>
<li>Which clusters you use (dev, staging, prod)</li>
<li>Which namespaces you touch most</li>
<li>What you do most often (view, edit, scale, delete, debug)</li>
<li>How you access Dashboard today (port-forward or Ingress)</li>
<li>How you log in (ServiceAccount token, and which RBAC bindings)</li>
</ul>
<p>This is your baseline.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="22-check-that-kubeconfig-works">2.2 Check That kubeconfig Works<a class="hash-link" aria-label="Direct link to 2.2 Check That kubeconfig Works" title="Direct link to 2.2 Check That kubeconfig Works" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#22-check-that-kubeconfig-works">​</a></h3>
<p>Headlamp relies on kubeconfig, especially on desktop. Confirm your kubeconfig works before installing anything.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl config current-context</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Then try:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get nodes</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If nodes cannot be listed, test in a namespace you can access:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get pods </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">namespace</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If these work, Headlamp can use the same identity and RBAC.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="23-pick-a-rollout-plan">2.3 Pick a Rollout Plan<a class="hash-link" aria-label="Direct link to 2.3 Pick a Rollout Plan" title="Direct link to 2.3 Pick a Rollout Plan" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#23-pick-a-rollout-plan">​</a></h3>
<p>There is no need to rush. Most teams choose one of these:</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="parallel-rollout-recommended">Parallel rollout (recommended)<a class="hash-link" aria-label="Direct link to Parallel rollout (recommended)" title="Direct link to Parallel rollout (recommended)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#parallel-rollout-recommended">​</a></h4>
<ul>
<li>Install Headlamp.</li>
<li>Let people try it.</li>
<li>Keep Dashboard for a short time.</li>
<li>Remove Dashboard after the team is ready.</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="cutover">Cutover<a class="hash-link" aria-label="Direct link to Cutover" title="Direct link to Cutover" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#cutover">​</a></h4>
<ul>
<li>Install Headlamp.</li>
<li>Switch docs and links.</li>
<li>Remove Dashboard soon after.</li>
</ul>
<p>Parallel rollout is safer for shared clusters.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="24-decide-where-headlamp-will-run">2.4 Decide Where Headlamp Will Run<a class="hash-link" aria-label="Direct link to 2.4 Decide Where Headlamp Will Run" title="Direct link to 2.4 Decide Where Headlamp Will Run" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#24-decide-where-headlamp-will-run">​</a></h3>
<p>Either option works. Many teams use both.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="desktop">Desktop<a class="hash-link" aria-label="Direct link to Desktop" title="Direct link to Desktop" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#desktop">​</a></h4>
<ul>
<li>Relies on your kubeconfig</li>
<li>Consumes no cluster resources</li>
<li>No port-forward needed</li>
<li>Multi-cluster works out of the box</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="in-cluster">In-cluster<a class="hash-link" aria-label="Direct link to In-cluster" title="Direct link to In-cluster" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#in-cluster">​</a></h4>
<ul>
<li>Works well for shared, browser access</li>
<li>Can be managed like other cluster apps</li>
<li>Often paired with Ingress and SSO</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="25-note-optional-dependencies">2.5 Note Optional Dependencies<a class="hash-link" aria-label="Direct link to 2.5 Note Optional Dependencies" title="Direct link to 2.5 Note Optional Dependencies" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#25-note-optional-dependencies">​</a></h3>
<p>These are common. They can be handled later.</p>
<ul>
<li><code>metrics-server</code> (for CPU and memory graphs)</li>
<li>Ingress (for an in-cluster URL)</li>
<li>OIDC / SSO (for browser sign-in)</li>
<li>Cleanup of old Dashboard ServiceAccounts and RBAC</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-choose-where-headlamp-will-run-desktop-or-in-cluster">3. Choose Where Headlamp Will Run (Desktop or In-Cluster)<a class="hash-link" aria-label="Direct link to 3. Choose Where Headlamp Will Run (Desktop or In-Cluster)" title="Direct link to 3. Choose Where Headlamp Will Run (Desktop or In-Cluster)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#3-choose-where-headlamp-will-run-desktop-or-in-cluster">​</a></h2>
<p>Headlamp offers two different methods of getting started. It can run on your desktop or inside a cluster — there is no rigid way to use it. The best choice depends on what you need day to day. For the quickest startup with the least setup, desktop is usually the most direct path. For a shared URL that a platform team can manage, running in-cluster is often the better fit.</p>
<p>This section helps you pick the option that matches your team, your access model, and how you want to operate going forward.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="option-a-desktop-user-managed">Option A: Desktop (User-Managed)<a class="hash-link" aria-label="Direct link to Option A: Desktop (User-Managed)" title="Direct link to Option A: Desktop (User-Managed)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#option-a-desktop-user-managed">​</a></h3>
<p>Desktop Headlamp runs on each user's machine. It reads the same kubeconfig you use with <code>kubectl</code>. This keeps access tied to each user's identity and RBAC.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="why-teams-pick-it">Why teams pick it<a class="hash-link" aria-label="Direct link to Why teams pick it" title="Direct link to Why teams pick it" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#why-teams-pick-it">​</a></h4>
<ul>
<li>No in-cluster service to deploy or expose.</li>
<li>It consumes no cluster CPU or memory.</li>
<li>It relies on your kubeconfig and RBAC.</li>
<li>It works with many clusters in one app.</li>
<li>No port-forward is needed for day-to-day use.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="option-b-in-cluster-best-for-shared-access">Option B: In-Cluster (Best for Shared Access)<a class="hash-link" aria-label="Direct link to Option B: In-Cluster (Best for Shared Access)" title="Direct link to Option B: In-Cluster (Best for Shared Access)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#option-b-in-cluster-best-for-shared-access">​</a></h3>
<p>In-cluster Headlamp is installed as a Kubernetes workload (often via Helm). This lets cluster admins manage it like other in-cluster apps.</p>
<ul>
<li>Cluster admins manage install, upgrades, and configuration through the Helm chart and standard Kubernetes tooling.</li>
<li>Admins control Ingress and can set up OIDC login for shared access.</li>
<li>It supports shared use in team environments.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-install-headlamp-desktop-and-in-cluster">4. Install Headlamp (Desktop and In-Cluster)<a class="hash-link" aria-label="Direct link to 4. Install Headlamp (Desktop and In-Cluster)" title="Direct link to 4. Install Headlamp (Desktop and In-Cluster)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#4-install-headlamp-desktop-and-in-cluster">​</a></h2>
<p>The goal here is to create a Headlamp setup that fits your workflow. Desktop will be up and running quickly because Headlamp uses your local kubeconfig and does not add anything to the cluster. In-cluster install runs like any other Kubernetes workload, so it can be managed, secured, and shared. Either way, you are setting up a UI that respects the same RBAC rules you already rely on.</p>
<p>By the end of this section, you should be able to open Headlamp and confirm that the same clusters and namespaces you use today are visible.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="41-desktop-install-fastest-way-to-start">4.1 Desktop Install (Fastest Way to Start)<a class="hash-link" aria-label="Direct link to 4.1 Desktop Install (Fastest Way to Start)" title="Direct link to 4.1 Desktop Install (Fastest Way to Start)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#41-desktop-install-fastest-way-to-start">​</a></h3>
<p>Install Headlamp on your machine. Then open it like any other app. Headlamp reads your kubeconfig and uses the same identity and RBAC rules as <code>kubectl</code>.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="windows">Windows<a class="hash-link" aria-label="Direct link to Windows" title="Direct link to Windows" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#windows">​</a></h4>
<p>Install with WinGet:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">winget install headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Or with Chocolatey:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">choco install headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="macos">macOS<a class="hash-link" aria-label="Direct link to macOS" title="Direct link to macOS" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#macos">​</a></h4>
<p>Install with Homebrew:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">brew </span><span class="token function" style="color:#cc3745">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:#257c7a">--cask</span><span class="token plain"> headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="linux">Linux<a class="hash-link" aria-label="Direct link to Linux" title="Direct link to Linux" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#linux">​</a></h4>
<p>Install with Flatpak (Flathub):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">flatpak </span><span class="token function" style="color:#cc3745">install</span><span class="token plain"> flathub io.kinvolk.Headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="quick-check">Quick check<a class="hash-link" aria-label="Direct link to Quick check" title="Direct link to Quick check" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#quick-check">​</a></h3>
<ol>
<li>Launch Headlamp.</li>
<li>Confirm a cluster context is visible.</li>
<li>Open a namespace you can access and confirm workloads are listed. Headlamp will only show actions your RBAC allows.</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="42-in-cluster-install-shared-access">4.2 In-Cluster Install (Shared Access)<a class="hash-link" aria-label="Direct link to 4.2 In-Cluster Install (Shared Access)" title="Direct link to 4.2 In-Cluster Install (Shared Access)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#42-in-cluster-install-shared-access">​</a></h3>
<p>Use this path for a shared UI that the platform team can manage. Headlamp supports in-cluster deployment with Helm or a YAML manifest.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="install-with-helm">Install with Helm<a class="hash-link" aria-label="Direct link to Install with Helm" title="Direct link to Install with Helm" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#install-with-helm">​</a></h3>
<p>Add the repo and update:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo </span><span class="token function" style="color:#cc3745">add</span><span class="token plain"> headlamp https://kubernetes-sigs.github.io/headlamp/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Create a namespace (example):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl create namespace headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Install the chart:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm </span><span class="token function" style="color:#cc3745">install</span><span class="token plain"> headlamp headlamp/headlamp </span><span class="token parameter variable" style="color:#257c7a">--namespace</span><span class="token plain"> headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="install-with-a-yaml-manifest-optional">Install with a YAML manifest (optional)<a class="hash-link" aria-label="Direct link to Install with a YAML manifest (optional)" title="Direct link to Install with a YAML manifest (optional)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#install-with-a-yaml-manifest-optional">​</a></h3>
<p>Headlamp also provides a YAML manifest that can be applied and then adjusted to fit your needs. See the canonical instructions in <a href="https://headlamp.dev/docs/latest/installation/in-cluster/#using-simple-yaml" target="_blank" rel="noopener noreferrer">Installing Headlamp in a cluster — Using simple YAML</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="check-the-install">Check the install<a class="hash-link" aria-label="Direct link to Check the install" title="Direct link to Check the install" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#check-the-install">​</a></h3>
<p>Confirm the pod is running:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get pods </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Confirm the service exists:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get svc </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="access-it-two-common-ways">Access it (two common ways)<a class="hash-link" aria-label="Direct link to Access it (two common ways)" title="Direct link to Access it (two common ways)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#access-it-two-common-ways">​</a></h4>
<p><em>Quick test with port-forward.</em> This is the fastest way to verify the service works:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl port-forward </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> headlamp svc/headlamp </span><span class="token number" style="color:#257c7a">8080</span><span class="token plain">:80</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Then open: <a href="http://localhost:8080/" target="_blank" rel="noopener noreferrer">http://localhost:8080</a></p>
<p><em>Shared access with Ingress.</em> For a stable URL, expose the service through your Ingress controller. The exact Ingress YAML depends on your setup. Headlamp's OIDC callback URL is your public URL plus <code>/oidc-callback</code>, so Ingress and TLS settings matter.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="43-updating-headlamp">4.3 Updating Headlamp<a class="hash-link" aria-label="Direct link to 4.3 Updating Headlamp" title="Direct link to 4.3 Updating Headlamp" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#43-updating-headlamp">​</a></h3>
<p>Updates depend on how Headlamp was installed. Package managers upgrade in place. DMG or EXE installs update by reinstalling the newer download.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="macos-1">macOS<a class="hash-link" aria-label="Direct link to macOS" title="Direct link to macOS" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#macos-1">​</a></h4>
<p>If installed with Homebrew, run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">brew upgrade headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If installed from a DMG, download the newest DMG and drag Headlamp into <code>/Applications</code>, replacing the old version. DMG installs do not auto-upgrade.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="windows-1">Windows<a class="hash-link" aria-label="Direct link to Windows" title="Direct link to Windows" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#windows-1">​</a></h4>
<p>If installed with WinGet, run:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">winget upgrade headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If installed with Chocolatey, run:</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">choco upgrade headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If installed from the EXE, download the newest installer and run it again. EXE installs do not auto-upgrade.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="linux-1">Linux<a class="hash-link" aria-label="Direct link to Linux" title="Direct link to Linux" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#linux-1">​</a></h4>
<p>If installed with Flatpak, run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">flatpak update io.kinvolk.Headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If installed with AppImage, download the newest AppImage and run that file instead.</p>
<p>If installed with a tarball, download the newest tarball, extract it, and run the new <code>headlamp</code> binary.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="44-notes-for-in-cluster-access-keep-it-safe">4.4 Notes for In-Cluster Access (Keep It Safe)<a class="hash-link" aria-label="Direct link to 4.4 Notes for In-Cluster Access (Keep It Safe)" title="Direct link to 4.4 Notes for In-Cluster Access (Keep It Safe)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#44-notes-for-in-cluster-access-keep-it-safe">​</a></h3>
<p>Treat an in-cluster UI like any other cluster-facing service. Use TLS, lock down who can reach it, and rely on Kubernetes auth and RBAC to control what users can do.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-authentication-and-rbac">5. Authentication and RBAC<a class="hash-link" aria-label="Direct link to 5. Authentication and RBAC" title="Direct link to 5. Authentication and RBAC" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#5-authentication-and-rbac">​</a></h2>
<p>A new UI should not mean a new security model. Headlamp does not decide what a user can do — Kubernetes does. Headlamp reflects the same authentication and RBAC rules your cluster already enforces.</p>
<p>In this section, you will line up how people sign in and confirm that permissions behave as expected. When you finish, users should see only what they are allowed to see, and they should be able to do only what they are allowed to do.</p>
<p>This section covers two setups: desktop and in-cluster.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="51-desktop-use-kubeconfig">5.1 Desktop: Use kubeconfig<a class="hash-link" aria-label="Direct link to 5.1 Desktop: Use kubeconfig" title="Direct link to 5.1 Desktop: Use kubeconfig" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#51-desktop-use-kubeconfig">​</a></h3>
<p>On desktop, Headlamp reads your kubeconfig and uses the same credentials you use with <code>kubectl</code>. There is no separate token login flow to manage.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="step-1-confirm-your-kubeconfig-works">Step 1: Confirm your kubeconfig works<a class="hash-link" aria-label="Direct link to Step 1: Confirm your kubeconfig works" title="Direct link to Step 1: Confirm your kubeconfig works" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#step-1-confirm-your-kubeconfig-works">​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl config current-context</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Then test access:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get nodes</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If nodes cannot be listed, test a namespace you can access:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get pods </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">namespace</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If these commands work, your kubeconfig and credentials are valid for Headlamp too.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="step-2-point-headlamp-at-the-right-kubeconfig-if-needed">Step 2: Point Headlamp at the right kubeconfig (if needed)<a class="hash-link" aria-label="Direct link to Step 2: Point Headlamp at the right kubeconfig (if needed)" title="Direct link to Step 2: Point Headlamp at the right kubeconfig (if needed)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#step-2-point-headlamp-at-the-right-kubeconfig-if-needed">​</a></h4>
<p>Headlamp can use the default kubeconfig path. It can also use a custom file path. Set <code>KUBECONFIG</code> to choose a specific file.</p>
<p>Example:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#257c7a">KUBECONFIG</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/path/to/config headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>More than one kubeconfig file can be loaded at once. On Unix systems, separate paths with <code>:</code>. On Windows, separate paths with <code>;</code>.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="what-to-expect-in-the-ui">What to expect in the UI<a class="hash-link" aria-label="Direct link to What to expect in the UI" title="Direct link to What to expect in the UI" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#what-to-expect-in-the-ui">​</a></h4>
<p>Headlamp adapts to your RBAC permissions. If permission to edit or delete a resource is missing, Headlamp will not offer those actions.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="52-in-cluster-shared-access-needs-a-sign-in-plan">5.2 In-Cluster: Shared Access Needs a Sign-In Plan<a class="hash-link" aria-label="Direct link to 5.2 In-Cluster: Shared Access Needs a Sign-In Plan" title="Direct link to 5.2 In-Cluster: Shared Access Needs a Sign-In Plan" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#52-in-cluster-shared-access-needs-a-sign-in-plan">​</a></h3>
<p>In-cluster Headlamp is shared by many users. A clear plan for sign-in and access is required. Headlamp supports OpenID Connect (OIDC) for a "Sign in" flow.</p>
<p>Most teams choose one of these patterns:</p>
<ul>
<li>A. Configure Headlamp with OIDC (built-in).</li>
<li>B. Put an auth layer in front of Headlamp (common in enterprises).</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="a-built-in-oidc-headlamp">A. Built-In OIDC (Headlamp)<a class="hash-link" aria-label="Direct link to A. Built-In OIDC (Headlamp)" title="Direct link to A. Built-In OIDC (Headlamp)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#a-built-in-oidc-headlamp">​</a></h4>
<p>To use OIDC, Headlamp needs:</p>
<ul>
<li>Client ID</li>
<li>Client secret</li>
<li>Issuer URL</li>
<li>(Optional) scopes</li>
</ul>
<p>The OIDC provider must also allow Headlamp's callback URL. The callback is your Headlamp URL plus <code>/oidc-callback</code>.</p>
<p>Example: <code>https://headlamp.example.com/oidc-callback</code></p>
<p>Ingress note: if Headlamp is behind an Ingress or load balancer, make sure it forwards <code>X-Forwarded-Proto</code>. If it does not, Headlamp may generate an <code>http</code> callback URL instead of <code>https</code>, which can break login.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="b-auth-layer-in-front-of-headlamp">B. Auth Layer in Front of Headlamp<a class="hash-link" aria-label="Direct link to B. Auth Layer in Front of Headlamp" title="Direct link to B. Auth Layer in Front of Headlamp" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#b-auth-layer-in-front-of-headlamp">​</a></h4>
<p>Some teams protect Headlamp with an identity-aware proxy or a platform auth system. This keeps sign-in consistent across tools.</p>
<p>Headlamp docs include an example using OpenUnison, which can deploy Headlamp with hardened defaults and integrate with identity providers.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="53-rbac-keep-it-least-privilege">5.3 RBAC: Keep It Least-Privilege<a class="hash-link" aria-label="Direct link to 5.3 RBAC: Keep It Least-Privilege" title="Direct link to 5.3 RBAC: Keep It Least-Privilege" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#53-rbac-keep-it-least-privilege">​</a></h3>
<p>Kubernetes security starts with API authentication and authorization (RBAC). Headlamp respects those rules.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="practical-guidance">Practical guidance<a class="hash-link" aria-label="Direct link to Practical guidance" title="Direct link to Practical guidance" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#practical-guidance">​</a></h4>
<ul>
<li>Start with the lowest permissions that still let users do their job.</li>
<li>If Dashboard used a high-privilege ServiceAccount token, plan to remove or tighten that access after the move.</li>
<li>For in-cluster, treat the UI like any other endpoint. Use TLS and limit network access.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="54-quick-troubleshooting">5.4 Quick Troubleshooting<a class="hash-link" aria-label="Direct link to 5.4 Quick Troubleshooting" title="Direct link to 5.4 Quick Troubleshooting" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#54-quick-troubleshooting">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="desktop-cluster-is-not-visible">Desktop: "Cluster is not visible"<a class="hash-link" aria-label="Direct link to Desktop: &quot;Cluster is not visible&quot;" title="Direct link to Desktop: &quot;Cluster is not visible&quot;" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#desktop-cluster-is-not-visible">​</a></h4>
<p>The kubeconfig may not be in the default location. Point Headlamp to the file with <code>KUBECONFIG</code> or a file path.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="in-cluster-oidc-login-fails-after-redirect">In-cluster: "OIDC login fails after redirect"<a class="hash-link" aria-label="Direct link to In-cluster: &quot;OIDC login fails after redirect&quot;" title="Direct link to In-cluster: &quot;OIDC login fails after redirect&quot;" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#in-cluster-oidc-login-fails-after-redirect">​</a></h4>
<p>Confirm the provider allows <code>https://YOUR_URL/oidc-callback</code>. If Ingress is in use, make sure it forwards <code>X-Forwarded-Proto</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="6-manage-multiple-clusters">6. Manage Multiple Clusters<a class="hash-link" aria-label="Direct link to 6. Manage Multiple Clusters" title="Direct link to 6. Manage Multiple Clusters" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#6-manage-multiple-clusters">​</a></h2>
<p>This is one of the biggest practical shifts from Kubernetes Dashboard. Dashboard is typically visited one cluster at a time. Headlamp is built for the way teams work now, where dev, staging, and prod live side by side. Instead of juggling tabs or switching tools, one UI stays open and clusters change as the work moves.</p>
<p>The key idea: if <code>kubectl</code> can reach a cluster, Headlamp can usually reach it too. This section shows how Headlamp finds your clusters and how to move between them without losing your place.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="clusters-come-from-your-kubeconfig">Clusters Come From Your kubeconfig<a class="hash-link" aria-label="Direct link to Clusters Come From Your kubeconfig" title="Direct link to Clusters Come From Your kubeconfig" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#clusters-come-from-your-kubeconfig">​</a></h3>
<p>Headlamp reads clusters from your kubeconfig files. That means the clusters reachable with <code>kubectl</code> can also show up in Headlamp.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="switch-clusters-in-the-ui">Switch Clusters in the UI<a class="hash-link" aria-label="Direct link to Switch Clusters in the UI" title="Direct link to Switch Clusters in the UI" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#switch-clusters-in-the-ui">​</a></h3>
<p>Once Headlamp loads your kubeconfig, the cluster selector switches between clusters. This reduces friction when moving between dev, staging, and prod.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="optional-use-more-than-one-kubeconfig-file">Optional: Use More Than One kubeconfig File<a class="hash-link" aria-label="Direct link to Optional: Use More Than One kubeconfig File" title="Direct link to Optional: Use More Than One kubeconfig File" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#optional-use-more-than-one-kubeconfig-file">​</a></h3>
<p>If you keep separate kubeconfig files, they can be loaded together. Headlamp supports multiple kubeconfig paths in <code>KUBECONFIG</code>.</p>
<p>Unix/macOS/Linux (<code>:</code> separator):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#257c7a">KUBECONFIG</span><span class="token operator" style="color:#393A34">=~</span><span class="token plain">/.kube/dev:~/.kube/prod headlamp</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Windows (<code>;</code> separator):</p>
<div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$env:KUBECONFIG="$HOME\.kube\dev;$HOME\.kube\prod"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="optional-add-a-cluster-from-inside-headlamp">Optional: Add a Cluster From Inside Headlamp<a class="hash-link" aria-label="Direct link to Optional: Add a Cluster From Inside Headlamp" title="Direct link to Optional: Add a Cluster From Inside Headlamp" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#optional-add-a-cluster-from-inside-headlamp">​</a></h3>
<p>Clusters can also be added by loading additional kubeconfig files from the UI.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="permissions-stay-the-same">Permissions Stay the Same<a class="hash-link" aria-label="Direct link to Permissions Stay the Same" title="Direct link to Permissions Stay the Same" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#permissions-stay-the-same">​</a></h3>
<p>Multi-cluster does not change security rules. Each cluster still enforces its own RBAC. Headlamp shows only what your identity can do in the selected cluster.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="7-navigate-and-understand-resources">7. Navigate and Understand Resources<a class="hash-link" aria-label="Direct link to 7. Navigate and Understand Resources" title="Direct link to 7. Navigate and Understand Resources" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#7-navigate-and-understand-resources">​</a></h2>
<p>This is where things should start to feel familiar again. For anyone who used Kubernetes Dashboard, the core resource views in Headlamp will be recognizable right away. Pods, deployments, services, and namespaces are all still here. What changes is how quickly you can move between them and understand how they connect.</p>
<p>This section walks through the layout, shows where to find what you need, and introduces a few tools that help build context faster when something goes wrong.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="find-resources-in-familiar-places">Find Resources in Familiar Places<a class="hash-link" aria-label="Direct link to Find Resources in Familiar Places" title="Direct link to Find Resources in Familiar Places" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#find-resources-in-familiar-places">​</a></h3>
<p>Headlamp groups resources in a way that maps closely to Dashboard:</p>
<ul>
<li>Workloads for Pods, Deployments, StatefulSets, and Jobs</li>
<li>Network for Services and Ingress</li>
<li>Storage for PersistentVolumes and Claims</li>
<li>Configuration for ConfigMaps and Secrets</li>
<li>Nodes for cluster infrastructure</li>
</ul>
<p>Namespace filtering is at the top of the UI, the same place as in Dashboard.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="inspect-and-edit-resources">Inspect and Edit Resources<a class="hash-link" aria-label="Direct link to Inspect and Edit Resources" title="Direct link to Inspect and Edit Resources" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#inspect-and-edit-resources">​</a></h3>
<p>From any list, clicking into a resource shows the details:</p>
<ul>
<li>Status and conditions</li>
<li>Events</li>
<li>Labels and annotations</li>
<li>The full YAML definition</li>
</ul>
<p>If RBAC allows it, YAML can be edited directly from the UI. If it does not, Headlamp shows the resource as read-only. This matches how <code>kubectl</code> behaves.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="use-search-and-filters-to-move-faster">Use Search and Filters to Move Faster<a class="hash-link" aria-label="Direct link to Use Search and Filters to Move Faster" title="Direct link to Use Search and Filters to Move Faster" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#use-search-and-filters-to-move-faster">​</a></h3>
<p>Headlamp adds faster search and filtering across lists. This helps when clusters or namespaces get large. Views can be narrowed without jumping between pages.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="understand-relationships-with-map-view">Understand Relationships With Map View<a class="hash-link" aria-label="Direct link to Understand Relationships With Map View" title="Direct link to Understand Relationships With Map View" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#understand-relationships-with-map-view">​</a></h3>
<p>Dashboard mostly shows resources as lists. Headlamp also includes a Map View.</p>
<p><img decoding="async" loading="lazy" alt="Headlamp Map View" src="https://headlamp.dev/assets/images/headlamp-map-d332bad1f5b9b57a06981f2249c69ebe.png" width="1907" height="837" class="img_ev3q">
<em>View of resource relationships in Headlamp</em>
Map View shows how resources relate to each other:</p>
<ul>
<li>Deployments</li>
<li>ReplicaSets</li>
<li>Pods</li>
<li>Services</li>
</ul>
<p>This helps during troubleshooting. Instead of clicking through several pages, the connections are visible at once. Missing links or broken relationships are faster to spot.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="when-to-use-lists-vs-map-view">When to Use Lists vs Map View<a class="hash-link" aria-label="Direct link to When to Use Lists vs Map View" title="Direct link to When to Use Lists vs Map View" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#when-to-use-lists-vs-map-view">​</a></h3>
<ul>
<li>Use lists when the target resource is already known.</li>
<li>Use Map View when the goal is to understand why something is not working.</li>
</ul>
<p>Both views work on the same data. The choice is about how much context you want at that moment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="8-deploy-applications-with-yaml">8. Deploy Applications With YAML<a class="hash-link" aria-label="Direct link to 8. Deploy Applications With YAML" title="Direct link to 8. Deploy Applications With YAML" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#8-deploy-applications-with-yaml">​</a></h2>
<p>For many Kubernetes Dashboard users, this is where the differences between Dashboard and Headlamp become noticeable. Dashboard guided users with forms. Headlamp leans into manifests. That shift is not about making things harder — it is about making what gets deployed clearer and more repeatable. When YAML is applied, the cluster receives exactly what is on the page, and the same manifest can be reused in Git, CI, or any other workflow.</p>
<p>This section shows how to deploy with YAML in Headlamp and how to keep the process manageable for anyone used to a wizard.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="from-forms-to-manifests">From Forms to Manifests<a class="hash-link" aria-label="Direct link to From Forms to Manifests" title="Direct link to From Forms to Manifests" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#from-forms-to-manifests">​</a></h3>
<p>In Kubernetes Dashboard, applications were often deployed by filling in a form:</p>
<ul>
<li>Container image</li>
<li>Replicas</li>
<li>Service type</li>
</ul>
<p>Headlamp does not include the same wizard. Instead, YAML is applied directly from the UI.</p>
<p>This matches how most teams deploy today:</p>
<ul>
<li>Manifests live in Git.</li>
<li>CI/CD applies them.</li>
<li>Helm or GitOps tools manage changes.</li>
</ul>
<p>Headlamp fits into that flow rather than replacing it.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-resources-using-yaml">Create Resources Using YAML<a class="hash-link" aria-label="Direct link to Create Resources Using YAML" title="Direct link to Create Resources Using YAML" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#create-resources-using-yaml">​</a></h3>
<p>To deploy an application in Headlamp:</p>
<ol>
<li>Select a cluster and namespace.</li>
<li>Click Create.</li>
<li>Paste or upload a YAML manifest.</li>
<li>Review it.</li>
<li>Click Apply.</li>
</ol>
<p>The resource appears immediately in the UI. If the manifest is not valid, Headlamp shows the same errors the Kubernetes API would return.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="generate-yaml-quickly">Generate YAML Quickly<a class="hash-link" aria-label="Direct link to Generate YAML Quickly" title="Direct link to Generate YAML Quickly" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#generate-yaml-quickly">​</a></h3>
<p>If the Dashboard wizard is missed, YAML can still be generated quickly. For example:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl create deployment nginx </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">--image</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">nginx </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --dry-run</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">client </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">-o</span><span class="token plain"> yaml </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> nginx.yaml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Edit the file if needed, then paste it into Headlamp and apply it. This produces a repeatable manifest instead of an object created only through a UI.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-about-helm-or-gitops">What About Helm or GitOps?<a class="hash-link" aria-label="Direct link to What About Helm or GitOps?" title="Direct link to What About Helm or GitOps?" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#what-about-helm-or-gitops">​</a></h3>
<p>Both work well with Headlamp.</p>
<ul>
<li>Install with Helm as usual.</li>
<li>Deploy with GitOps pipelines as usual.</li>
<li>Use Headlamp to view, inspect, and debug what is running.</li>
</ul>
<p>Headlamp does not replace those tools. It provides visibility into what they create.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-to-expect-compared-to-dashboard">What to Expect Compared to Dashboard<a class="hash-link" aria-label="Direct link to What to Expect Compared to Dashboard" title="Direct link to What to Expect Compared to Dashboard" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#what-to-expect-compared-to-dashboard">​</a></h3>
<ul>
<li>No multi-step deploy form.</li>
<li>More direct work with YAML.</li>
<li>Clearer visibility into what is actually applied to the cluster.</li>
<li>The same manifest can be reused in CI, Git, or other tools.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="9-deploy-and-debug-workloads">9. Deploy and Debug Workloads<a class="hash-link" aria-label="Direct link to 9. Deploy and Debug Workloads" title="Direct link to 9. Deploy and Debug Workloads" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#9-deploy-and-debug-workloads">​</a></h2>
<p>Day-to-day debugging is a key area for both Kubernetes UIs. For anyone who used Kubernetes Dashboard, it was the place to open logs, check events, and figure out why something was failing. Headlamp supports those same workflows and reduces a few common friction points along the way.</p>
<p>This section walks through the core debugging loop in Headlamp — from logs and exec to metrics and events — so troubleshooting can happen without leaving the UI.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="view-logs">View Logs<a class="hash-link" aria-label="Direct link to View Logs" title="Direct link to View Logs" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#view-logs">​</a></h3>
<p>Pod logs can be viewed directly in the UI.</p>
<p>To check logs:</p>
<ol>
<li>Open Workloads.</li>
<li>Select Pods.</li>
<li>Click a pod.</li>
<li>Open the Logs tab.</li>
</ol>
<p>If the pod has more than one container, the view can switch between containers. Logs stream live, which helps during rollouts or active incidents.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="exec-into-running-pods">Exec Into Running Pods<a class="hash-link" aria-label="Direct link to Exec Into Running Pods" title="Direct link to Exec Into Running Pods" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#exec-into-running-pods">​</a></h3>
<p>Headlamp also opens a shell inside a container.</p>
<p>From a pod view:</p>
<ul>
<li>Open the pod actions menu.</li>
<li>Choose Terminal or Exec.</li>
</ul>
<p>This opens an interactive session inside the container. It replaces the need to switch back to the terminal for quick checks.</p>
<p>This action follows RBAC rules. If <code>kubectl exec</code> is not permitted, Headlamp will not allow it either.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="check-metrics-and-resource-usage">Check Metrics and Resource Usage<a class="hash-link" aria-label="Direct link to Check Metrics and Resource Usage" title="Direct link to Check Metrics and Resource Usage" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#check-metrics-and-resource-usage">​</a></h3>
<p>Headlamp can show CPU and memory usage for Pods and Nodes. This works the same way it did in Dashboard.</p>
<p>A few things to know:</p>
<ul>
<li>Metrics require <code>metrics-server</code> to be installed in the cluster.</li>
<li>If metrics are missing, Headlamp shows a clear notice.</li>
<li>Once metrics are available, usage appears on pod and node views.</li>
</ul>
<p>This makes it straightforward to answer questions like:</p>
<ul>
<li>Is this pod using too much memory?</li>
<li>Is a node under pressure?</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="view-events-when-something-goes-wrong">View Events When Something Goes Wrong<a class="hash-link" aria-label="Direct link to View Events When Something Goes Wrong" title="Direct link to View Events When Something Goes Wrong" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#view-events-when-something-goes-wrong">​</a></h3>
<p>Events are often the fastest way to understand failures. In Headlamp:</p>
<ul>
<li>Events are visible on resource detail pages.</li>
<li>Warnings and errors are tied to Pods, Nodes, or Deployments.</li>
</ul>
<p>This is often the first place to look when a workload is stuck or crashes.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-this-compares-to-dashboard">How This Compares to Dashboard<a class="hash-link" aria-label="Direct link to How This Compares to Dashboard" title="Direct link to How This Compares to Dashboard" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#how-this-compares-to-dashboard">​</a></h3>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="what-stays-the-same">What stays the same<a class="hash-link" aria-label="Direct link to What stays the same" title="Direct link to What stays the same" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#what-stays-the-same">​</a></h4>
<ul>
<li>Log viewing</li>
<li>Event inspection</li>
<li>RBAC-aware actions</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="what-improves">What improves<a class="hash-link" aria-label="Direct link to What improves" title="Direct link to What improves" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#what-improves">​</a></h4>
<ul>
<li>Built-in exec sessions</li>
<li>Clearer layout and filtering</li>
<li>Fewer context switches between UI and CLI</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="10-remove-kubernetes-dashboard">10. Remove Kubernetes Dashboard<a class="hash-link" aria-label="Direct link to 10. Remove Kubernetes Dashboard" title="Direct link to 10. Remove Kubernetes Dashboard" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#10-remove-kubernetes-dashboard">​</a></h2>
<p>This is the last step, and it should feel routine. Kubernetes functionality is not being removed — an old access path and an extra moving part are. The goal is to reduce the surface area of your environment once Headlamp is proven and the team is comfortable.</p>
<p>This section confirms the common workflows still work, then walks through uninstalling Dashboard and cleaning up any leftover ServiceAccounts or RBAC that were only there to support it.</p>
<p>Removing Dashboard reduces clutter and avoids keeping unused access paths around.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="confirm-headlamp-covers-your-needs">Confirm Headlamp Covers Your Needs<a class="hash-link" aria-label="Direct link to Confirm Headlamp Covers Your Needs" title="Direct link to Confirm Headlamp Covers Your Needs" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#confirm-headlamp-covers-your-needs">​</a></h3>
<p>Before uninstalling anything, confirm:</p>
<ul>
<li>Users can access the clusters they need in Headlamp.</li>
<li>Common tasks work:
<ul>
<li>Browse resources</li>
<li>Deploy with YAML</li>
<li>View logs and events</li>
<li>Exec into Pods (if allowed)</li>
</ul>
</li>
<li>RBAC behaves as expected for different roles.</li>
</ul>
<p>Once these checks pass, Dashboard is ready to be removed.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="uninstall-the-dashboard">Uninstall the Dashboard<a class="hash-link" aria-label="Direct link to Uninstall the Dashboard" title="Direct link to Uninstall the Dashboard" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#uninstall-the-dashboard">​</a></h3>
<p>If Kubernetes Dashboard was installed with Helm, remove it with:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm uninstall kubernetes-dashboard </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> kubernetes-dashboard</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If Dashboard was installed by a manifest or add-on, remove it using the same method that installed it.</p>
<p>After removal, confirm the resources are gone:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl get pods </span><span class="token parameter variable" style="color:#257c7a">-n</span><span class="token plain"> kubernetes-dashboard</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="clean-up-access-artifacts-recommended">Clean Up Access Artifacts (Recommended)<a class="hash-link" aria-label="Direct link to Clean Up Access Artifacts (Recommended)" title="Direct link to Clean Up Access Artifacts (Recommended)" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#clean-up-access-artifacts-recommended">​</a></h3>
<p>Many Dashboard setups used dedicated ServiceAccounts and cluster-wide roles.</p>
<p>Review and remove anything that was created only for Dashboard access, such as:</p>
<ul>
<li>ServiceAccounts</li>
<li>Role bindings or cluster role bindings</li>
<li>Old documentation that points users to Dashboard URLs or port-forward commands</li>
</ul>
<p>This reduces long-lived credentials and unused permissions.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="communicate-the-change">Communicate the Change<a class="hash-link" aria-label="Direct link to Communicate the Change" title="Direct link to Communicate the Change" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#communicate-the-change">​</a></h3>
<p>Make sure the team knows:</p>
<ul>
<li>Headlamp is now the primary Kubernetes UI.</li>
<li>How to access it (desktop or URL).</li>
<li>Where to go for help if something feels different.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="11-post-migration-checklist">11. Post-Migration Checklist<a class="hash-link" aria-label="Direct link to 11. Post-Migration Checklist" title="Direct link to 11. Post-Migration Checklist" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#11-post-migration-checklist">​</a></h2>
<p>The checklist below covers the basics that matter most: access, RBAC, and the tasks people do every day. It also confirms cleanup is real and not assumed.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="access-and-visibility">Access and visibility<a class="hash-link" aria-label="Direct link to Access and visibility" title="Direct link to Access and visibility" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#access-and-visibility">​</a></h3>
<ul>
<li>Headlamp opens without errors.</li>
<li>Users can access the correct clusters.</li>
<li>Namespace filtering works as expected.</li>
<li>Multi-cluster switching behaves correctly.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="authentication-and-rbac">Authentication and RBAC<a class="hash-link" aria-label="Direct link to Authentication and RBAC" title="Direct link to Authentication and RBAC" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#authentication-and-rbac">​</a></h3>
<ul>
<li>Desktop users access clusters using kubeconfig.</li>
<li>In-cluster users can sign in using the chosen auth method.</li>
<li>Users only see actions their RBAC allows.</li>
<li>No unexpected permission errors appear during normal use.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="core-workflows">Core workflows<a class="hash-link" aria-label="Direct link to Core workflows" title="Direct link to Core workflows" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#core-workflows">​</a></h3>
<ul>
<li>Resources load under Workloads, Network, and Configuration.</li>
<li>YAML can be viewed and edited where permissions allow.</li>
<li>Applications can be deployed using Create and YAML.</li>
<li>Logs load correctly for running Pods.</li>
<li>Exec works for users who are allowed to use it.</li>
<li>Metrics appear if <code>metrics-server</code> is installed.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="operational-confidence">Operational confidence<a class="hash-link" aria-label="Direct link to Operational confidence" title="Direct link to Operational confidence" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#operational-confidence">​</a></h3>
<ul>
<li>Teams can troubleshoot without switching tools.</li>
<li>Map View helps explain relationships during debugging.</li>
<li>Platform or DevOps teams know how Headlamp is installed and managed.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="cleanup-confirmation">Cleanup confirmation<a class="hash-link" aria-label="Direct link to Cleanup confirmation" title="Direct link to Cleanup confirmation" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#cleanup-confirmation">​</a></h3>
<ul>
<li>Kubernetes Dashboard is no longer running.</li>
<li>Dashboard-only ServiceAccounts and RBAC bindings are removed.</li>
<li>Internal docs no longer reference Dashboard URLs or port-forward commands.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="team-alignment">Team alignment<a class="hash-link" aria-label="Direct link to Team alignment" title="Direct link to Team alignment" href="https://headlamp.dev/blog/2026/05/15/kubernetes-dashboard-migration#team-alignment">​</a></h3>
<ul>
<li>The team knows Headlamp is the default Kubernetes UI.</li>
<li>Onboarding docs point new users to Headlamp.</li>
<li>There is a clear path for feedback or questions.</li>
</ul>
<p>The move from Kubernetes Dashboard to Headlamp is complete. Your team can rely on the same Kubernetes access model, work across clusters, and follow workflows that match how Kubernetes is already used. From here, Headlamp becomes the default UI, whether on the desktop or in shared environments. As needs grow, it can stay as-is or be extended with plugins and new views over time.</p>
<p>To help shape what comes next, join the Headlamp community and contribute at <a href="https://headlamp.dev/" target="_blank" rel="noopener noreferrer">headlamp.dev</a>.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>migration</category>
            <category>kubernetes-dashboard</category>
            <category>guide</category>
        </item>
        <item>
            <title><![CDATA[From Signals to Answers: Conversational Kubernetes Troubleshooting with HolmesGPT in Headlamp]]></title>
            <link>https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp</link>
            <guid>https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp</guid>
            <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Turn Kubernetes signals into clear explanations with HolmesGPT, directly inside Headlamp.]]></description>
            <content:encoded><![CDATA[<p>Kubernetes does not fail quietly. When something goes wrong, signals show up everywhere. Logs, events, metrics, and status fields each tell part of the story. None of them tell the whole thing. Teams spend hours stitching these signals together. They open dashboards, run commands, and scroll through logs looking for clues. Often, the data they need is already there. The hard part is turning those signals into clear answers.</p>
<p>This is the gap Headlamp fills with HolmesGPT by centralizing data and context to get answers in a familiar environment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-real-problem-is-not-missing-data">The Real Problem Is Not Missing Data<a class="hash-link" aria-label="Direct link to The Real Problem Is Not Missing Data" title="Direct link to The Real Problem Is Not Missing Data" href="https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp#the-real-problem-is-not-missing-data">​</a></h2>
<p>Most Kubernetes teams are not short on data. Modern clusters generate a steady stream of signals about what is happening across the system. On paper, everything needed to diagnose an issue already exists.</p>
<p><strong>The real problem is making sense of it.</strong></p>
<p>Understanding why a rollout is stuck or a pod keeps restarting takes context and time. Humans do this by testing one idea at a time. We gather signals, form a hypothesis, then move to the next. Holmes can do this work in parallel. It looks across related resources and controller behavior at once, finding answers faster than a single person can.</p>
<p>Kubernetes problems end up feeling harder than they should be with multiple layers of friction.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-holmesgpt-brings-to-kubernetes">What HolmesGPT Brings to Kubernetes<a class="hash-link" aria-label="Direct link to What HolmesGPT Brings to Kubernetes" title="Direct link to What HolmesGPT Brings to Kubernetes" href="https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp#what-holmesgpt-brings-to-kubernetes">​</a></h2>
<p>HolmesGPT is designed to reason about Kubernetes behavior, not just report state. It looks at real cluster signals together, including logs, events, and resources. It understands how failures propagate and how controller logic affects outcomes.</p>
<p>Instead of listing symptoms, HolmesGPT focuses on causes. Instead of showing raw output, it explains what is happening and how to fix it. This shifts troubleshooting from guesswork to understanding.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-headlamp-is-the-right-place-for-holmesgpt">Why Headlamp Is the Right Place for HolmesGPT<a class="hash-link" aria-label="Direct link to Why Headlamp Is the Right Place for HolmesGPT" title="Direct link to Why Headlamp Is the Right Place for HolmesGPT" href="https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp#why-headlamp-is-the-right-place-for-holmesgpt">​</a></h2>
<p>Headlamp is where Kubernetes work already happens. It is where teams explore clusters, inspect workloads, and notice when something looks wrong. This is exactly the place where signals need to be turned into answers. Many teams try to close this gap by adding more tools. Another dashboard. Another alerting system. Another surface to check during an incident. Each one adds value, but each one also adds friction.</p>
<p>The HolmesGPT integration takes a different approach. Instead of adding another tool, it brings reasoning into an existing workflow. Headlamp does not become something new to learn. It becomes easier to use because it builds on an environment teams already know. When insight lives in the same place as management, it gets used. Context stays intact. Teams move more quickly from questions to action.</p>
<p><strong>Watch the demo:</strong></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/3jBSrGR9VEA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="from-signals-to-understanding">From Signals to Understanding<a class="hash-link" aria-label="Direct link to From Signals to Understanding" title="Direct link to From Signals to Understanding" href="https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp#from-signals-to-understanding">​</a></h2>
<p>Troubleshooting in Headlamp feels different because the explanation lives in the same place as the investigation. HolmesGPT works in context, alongside the workloads, namespaces, and controllers you are already viewing. It explains how the resources on screen relate to each other, without sending you to another tool.</p>
<p>Traditional observability shows what is happening, but it rarely explains why. A pod restart loop might come from a bad configuration, a missing secret, or a failure elsewhere in the system. Logs alone cannot tell you which one matters. Events add clues, but they still only show part of the story.</p>
<p>That context is what changes the troubleshooting experience. Patterns that are hard to spot in raw output become clear when they are tied directly to Kubernetes objects. Instead of stitching clues together across tools, teams see explanations next to the problem they are trying to understand.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="insight-that-fits-how-teams-work">Insight That Fits How Teams Work<a class="hash-link" aria-label="Direct link to Insight That Fits How Teams Work" title="Direct link to Insight That Fits How Teams Work" href="https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp#insight-that-fits-how-teams-work">​</a></h2>
<p>Kubernetes is rarely owned by one role. Developers focus on application behavior. Operators focus on stability. Platform teams look for patterns and consistency across clusters. HolmesGPT helps create a shared understanding across those roles. The same explanation can help a developer understand why a rollout failed and help an operator confirm a broader issue. The language is clear, the context is shared, and the insight is grounded in real cluster state.</p>
<p>Just as important, this insight fits into existing workflows. Teams do not need to change how they work or learn a new system. When understanding appears at the right moment and in the same place as investigation, it gets used. This reduces handoffs, avoids miscommunication, and helps teams move from discussion to action faster.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="clear-answers-when-they-matter-most">Clear Answers When They Matter Most<a class="hash-link" aria-label="Direct link to Clear Answers When They Matter Most" title="Direct link to Clear Answers When They Matter Most" href="https://headlamp.dev/blog/2026/03/27/holmesgpt-headlamp#clear-answers-when-they-matter-most">​</a></h2>
<p>HolmesGPT in Headlamp turns scattered signals into clear explanations, right where you already investigate. You keep context, move faster, and make decisions with more confidence.</p>
<p>If you want to try it, open Headlamp, enable the AI Assistant, and connect HolmesGPT. To add the Holmes agent to your cluster, follow the <a href="https://github.com/headlamp-k8s/plugins/tree/main/ai-assistant#adding-holmes-agent-to-your-cluster" target="_blank" rel="noopener noreferrer">setup instructions</a>. The next time an alert fires, you can go from signals to answers without leaving the UI.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>troubleshooting</category>
            <category>application-management</category>
            <category>ai</category>
        </item>
        <item>
            <title><![CDATA[Bringing Unified MCP Expertise in Your UI for Smarter Kubernetes Intelligence]]></title>
            <link>https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise</link>
            <guid>https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise</guid>
            <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How Headlamp integrates MCP support to bring specialized expertise directly into the Kubernetes UI, reducing context switching and enabling smarter decisions]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-problem">The Problem<a class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#the-problem">​</a></h2>
<p>Kubernetes teams lose time switching between tools to understand what is happening in their clusters. Many tools offer deep insight, but that expertise often lives outside the UI where teams actually work. This breaks context and slows decisions. MCPs bring powerful expertise into Kubernetes workflows. They can explain how systems behave at runtime, how workloads interact, and where issues begin. But today, that expertise is usually accessed through separate tools or commands.</p>
<p>The challenge is not the MCPs themselves. It is where they live.</p>
<p>Teams move between dashboards, terminals, and scripts to get answers. They learn something in one place, then act somewhere else. Context gets lost along the way. Kubernetes is where applications run and where decisions are made. MCP expertise should live there too. In context. Next to the workloads and applications it describes.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-solution">The Solution<a class="hash-link" aria-label="Direct link to The Solution" title="Direct link to The Solution" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#the-solution">​</a></h2>
<p>Headlamp brings MCP expertise directly into the Kubernetes UI.</p>
<p>With MCP support, Headlamp makes specialized insight available where Kubernetes work already happens. Instead of accessing MCPs through separate tools, teams use them in context alongside their workloads. This reduces context switching, but it also does more than that. MCPs bring focused expertise into the UI. MCPs interpret the domains, behaviors, and systems they surface. Helping users to understand in a way that matches the Kubernetes resources on screen.</p>
<p>The workflow stays simple. You look at an application. You use an MCP to understand what is happening. You act without leaving Headlamp. By unifying MCP expertise inside the Kubernetes UI, Headlamp turns insight into something teams can use right away. Not something teams have to translate or chase down.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-mcp-support-means-in-headlamp">What MCP Support Means in Headlamp<a class="hash-link" aria-label="Direct link to What MCP Support Means in Headlamp" title="Direct link to What MCP Support Means in Headlamp" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#what-mcp-support-means-in-headlamp">​</a></h2>
<p>MCP support in Headlamp reduces context switching by making MCPs part of the Kubernetes workflow. MCPs are built in, not bolted on.</p>
<p>MCPs are available inside the same UI teams use to explore clusters, inspect workloads, and troubleshoot issues. Instead of switching tools, you interact with MCPs alongside Kubernetes resources. Their output appears next to the workloads and applications it describes, where it is easiest to understand. This does more than simplify access. MCPs bring focused expertise into the UI. They surface insight that shows how systems behave, components interact, and where problems start. That understanding is tied directly to Kubernetes context, not shown in isolation.</p>
<p>By treating MCPs as first‑class integrations, Headlamp keeps workflows simple. Kubernetes resources, application views, and MCP expertise live in one place. Teams spend less time stitching tools together and more time understanding what is happening.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters-for-kubernetes-teams">Why This Matters for Kubernetes Teams<a class="hash-link" aria-label="Direct link to Why This Matters for Kubernetes Teams" title="Direct link to Why This Matters for Kubernetes Teams" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#why-this-matters-for-kubernetes-teams">​</a></h2>
<p>Kubernetes is rarely managed by one role. Developers, operators, and platform engineers all work in the same clusters. However, they look at those clusters for different signals and ask different questions.</p>
<p>MCPs in Headlamp bring that expertise closer to the work.</p>
<p><strong>Developers</strong> gain clearer insight into how their applications behave at runtime. MCPs help explain what is happening inside workloads, not just that something failed. This makes issues easier to understand and faster to fix.</p>
<p><strong>Platform engineers</strong> benefit from consistency and control. MCP expertise shows up inside a familiar UI and follows existing Kubernetes permissions. Teams gain deeper operational understanding without adding another system to manage.</p>
<p><strong>Operators</strong> see focused insight where investigations already happen. MCP output appears in the chat box alongside logs, events, and resource state, making it easier to connect signals and identify root causes.</p>
<p>By unifying MCP expertise inside the Kubernetes UI, Headlamp creates a shared understanding of the cluster. Teams spend less time translating between tools and more time solving problems together.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="mcps-in-an-applicationcentric-world">MCPs in an Application‑Centric World<a class="hash-link" aria-label="Direct link to MCPs in an Application‑Centric World" title="Direct link to MCPs in an Application‑Centric World" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#mcps-in-an-applicationcentric-world">​</a></h2>
<p>Headlamp helps teams think in terms of applications, not just individual Kubernetes resources. Projects group related workloads, services, and configurations into a single, scoped view.</p>
<p>MCP support enhances projects by bringing specialized insight into the same application context.</p>
<p>Instead of running MCPs across an entire cluster and sorting through results later, MCPs can be used where the application lives. Their expertise is applied to the namespaces, workloads, and resources that matter, not buried in cluster‑wide noise.</p>
<p>This makes MCP insight easier to understand and easier to trust. Teams see expert signals in the context of the application they are working on. The result is less distraction and more focus on what actually affects the app.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="setting-up-mcp-support">Setting Up MCP Support<a class="hash-link" aria-label="Direct link to Setting Up MCP Support" title="Direct link to Setting Up MCP Support" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#setting-up-mcp-support">​</a></h2>
<p>The Model Context Protocol (MCP) is an open standard that lets the Headlamp AI Assistant talk to external tools through a unified interface—think of it as a plugin system for your AI. Connect an MCP server (like the Flux operator) and its capabilities appear alongside Headlamp's built-in Kubernetes tooling, ready to use in chat.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-it-works">How it works<a class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#how-it-works">​</a></h3>
<p>The Headlamp desktop app spawns MCP servers as local processes, discovers the tools they expose, and hands them to the LLM. When you ask a question that needs an external tool, the assistant picks the right one, runs it, and formats the results into tables, metrics, or plain text.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="setting-it-up">Setting it up<a class="hash-link" aria-label="Direct link to Setting it up" title="Direct link to Setting it up" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#setting-it-up">​</a></h3>
<ol>
<li>Open the AI Assistant plugin settings and navigate to the <strong>MCP Servers</strong> section.</li>
<li>Turn <strong>Enable MCP servers</strong> on.</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Enable MCP servers in the AI Assistant settings" src="https://headlamp.dev/assets/images/enable-mcp-b802e2e1ae49fe2df42d3d610033c442.png" width="1436" height="894" class="img_ev3q"></p>
<ol start="3">
<li>Click <strong>Add Server</strong>, then enter a name, the server command, and any args or environment variables it needs.</li>
</ol>
<p><strong>Example:</strong></p>
<ul>
<li><strong>Name</strong> — A unique identifier for the server.</li>
<li><strong>Command</strong> — The executable to run (e.g., <code>flux-operator-mcp</code>).</li>
<li><strong>Args</strong> — Command-line arguments (e.g., <code>serve --kube-context HEADLAMP_CURRENT_CLUSTER</code>).</li>
<li><strong>Environment Variables</strong> — Optional env vars required by the server (e.g., <code>KUBECONFIG</code>).</li>
</ul>
<ol start="4">
<li><strong>Save.</strong> Headlamp will spawn the process and discover its tools. Review and toggle individual tools under the <strong>MCP Tool Settings</strong> tab.</li>
</ol>
<p><img decoding="async" loading="lazy" alt="MCP server settings configuration in Headlamp" src="https://headlamp.dev/assets/images/mcp-settings-52f112dc64aef5296567c58bc6692765.png" width="1454" height="908" class="img_ev3q"></p>
<p>After that, just ask a question. For example, <em>"List all Flux HelmReleases in the default namespace"</em>—and the assistant takes care of the rest.</p>
<p>A few things worth noting: MCP is desktop-only (Electron), you need at least one AI provider configured, and you can run multiple servers side by side. Tool approval settings let you gate write operations before they execute.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="use-cases-that-fit-well">Use Cases That Fit Well<a class="hash-link" aria-label="Direct link to Use Cases That Fit Well" title="Direct link to Use Cases That Fit Well" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#use-cases-that-fit-well">​</a></h2>
<p>MCP support in Headlamp works best when teams need expert insight in context.</p>
<p>Some MCPs focus on how applications behave at runtime. For example, the Inspektor Gadget MCP can surface low‑level signals from running workloads. When used in Headlamp, those signals are tied directly to pods and namespaces. Teams see how an application behaves while it is running, not just that something is wrong.</p>
<p>Other MCPs focus on how applications are delivered and kept in sync. The Flux MCP brings insight into deployment state, drift, and reconciliation. Instead of checking a separate system, teams can understand why a workload looks the way it does right from the Kubernetes UI.</p>
<p>In both cases, the value is not just access to data. It is access to expertise. MCPs explain what is happening and why, in the context of the application teams are already working on. By keeping that expertise inside Headlamp, teams spend less time chasing answers across tools and more time acting on what they learn.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2026/03/24/bringing-unified-mcp-expertise#conclusion">​</a></h2>
<p>MCPs bring more than raw signals. They bring expertise. They understand how systems behave, how applications are delivered, and where problems begin.</p>
<p>Headlamp brings that expertise into the Kubernetes UI. MCP insights show up where teams already work, tied to real workloads and applications. Context stays intact. Decisions get easier. Action follows faster.</p>
<p>This is about more than reducing context switching. It is about giving Kubernetes teams smarter operational intelligence. Intelligence grounded in the domain knowledge MCPs provide and delivered in a way that fits how teams actually work.</p>
<p>This is also part of a longer journey. We are building Headlamp toward a Unified Kubernetes Workspace. One place where ease of use, context, insight, and action come together, so Kubernetes feels connected instead of fragmented.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>mcp</category>
            <category>ai</category>
            <category>plugins</category>
        </item>
        <item>
            <title><![CDATA[Headlamp Team at KubeCon Europe 2026]]></title>
            <link>https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026</link>
            <guid>https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026</guid>
            <pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Join us at KubeCon Europe 2026 in Amsterdam for talks, a ContribFest, and demos at the Project Pavilion]]></description>
            <content:encoded><![CDATA[<p>Headlamp is heading to Amsterdam! <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank" rel="noopener noreferrer">KubeCon + CloudNativeCon Europe 2026</a> runs March 24-26 (with co-located events starting March 22), and we have plenty going on: conference talks, a Maintainer Summit session, a hands-on ContribFest, and our kiosk at the Project Pavilion. Here's the full rundown.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="talks">Talks<a class="hash-link" aria-label="Direct link to Talks" title="Direct link to Talks" href="https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026#talks">​</a></h2>
<p>This year we have Headlamp-related talks from both core members of the project, and from the wider community.</p>
<p><strong>Title:</strong> <a href="https://sched.co/2CVzX" target="_blank" rel="noopener noreferrer">Leveling up with Radius: Custom Resources and Headlamp Integration for Real-World Workloads</a><br>
<strong>Speakers:</strong> Nuno Guedes (Millennium BCP) and Will Tsai (Microsoft)<br>
<strong>Date and time:</strong> Tuesday, March 24, 3:15 PM - 3:45 PM CET<br>
<strong>Room:</strong> Forum<br>
<strong>Description:</strong> Learn how Millennium bcp extended the Radius framework for production workloads with complex dependencies (Datadog monitors, AI models, internal APIs) and built a Headlamp plugin that visualizes the app graph and maps dependencies across cloud platforms.</p>
<p><strong>Title:</strong> <a href="https://sched.co/2EF5q" target="_blank" rel="noopener noreferrer">How To (Not) Fork Headlamp</a><br>
<strong>Speaker:</strong> Joaquim Rocha (Amutable)<br>
<strong>Date and time:</strong> Thursday, March 26, 11:45 AM - 12:15 PM CET<br>
<strong>Room:</strong> E106-108<br>
<strong>Description:</strong> Should you write a plugin or fork the whole project? This talk walks through Headlamp's architecture and plugin system, covers the trade-offs, and shares practical advice for keeping your customizations maintainable either way.</p>
<p><strong>Title:</strong> <a href="https://sched.co/2CW3w" target="_blank" rel="noopener noreferrer">Ping SRE? I Am the SRE! Awesome Fun I Had Drawing a Zine for Troubleshooting Kubernetes Deployments</a><br>
<strong>Speaker:</strong> Rene Dudfield (Microsoft)<br>
<strong>Date and time:</strong> Wednesday, March 25, 4:45 PM - 5:15 PM CET<br>
<strong>Room:</strong> Hall 7, Room A<br>
<strong>Description:</strong> Patterns from troubleshooting Kubernetes issues in the Headlamp community turned into a hand-drawn mini zine for diagnosing deployment problems. Come see how a notebook full of doodles became a 16-page troubleshooting guide, and maybe get inspired to draw your own.</p>
<p><strong>Title:</strong> <a href="https://sched.co/2EF7j" target="_blank" rel="noopener noreferrer">Headlamp: Build Kubernetes Experiences Your Way!</a> (ContribFest)<br>
<strong>Speakers:</strong> Joaquim Rocha (Amutable) and Santhosh Nagaraj (Microsoft)<br>
<strong>Date and time:</strong> Wednesday, March 25, 11:00 AM - 12:15 PM CET<br>
<strong>Room:</strong> G107<br>
<strong>Description:</strong> A hands-on workshop where you'll build a Headlamp plugin with guidance from the maintainers. Whether you're just getting started or already have contributions in flight, this is a great chance to dig in. Bring your laptop!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="co-located-maintainer-summit">Co-located: Maintainer Summit<a class="hash-link" aria-label="Direct link to Co-located: Maintainer Summit" title="Direct link to Co-located: Maintainer Summit" href="https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026#co-located-maintainer-summit">​</a></h2>
<p><strong>Title:</strong> <a href="https://sched.co/2EWej" target="_blank" rel="noopener noreferrer">Does Your Project Want a UI in kubernetes-sigs/headlamp?</a><br>
<strong>Speakers:</strong> Rene Dudfield and Santhosh Nagaraj (Microsoft)<br>
<strong>Date and time:</strong> Sunday, March 22, 11:35 AM - 12:10 PM CET<br>
<strong>Room:</strong> Forum<br>
<strong>Description:</strong> Headlamp already has UI plugins for projects like cert-manager, Gateway API, Karpenter, and KEDA. In this Maintainer Summit session, the team invites CNCF project maintainers to collaborate on bringing UI support to even more projects.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="project-pavilion">Project Pavilion<a class="hash-link" aria-label="Direct link to Project Pavilion" title="Direct link to Project Pavilion" href="https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026#project-pavilion">​</a></h2>
<p>Come say hi at our kiosk (P-6B) in the <strong><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/features-add-ons/project-engagement/#project-pavilion" target="_blank" rel="noopener noreferrer">Project Pavilion</a></strong> (Solutions Showcase, Halls 1-5). We'll be there with live demos and happy to chat about anything Headlamp, on <strong>Wednesday, March 25:</strong> 10:00 AM - 1:30 PM CET.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="also-at-kubecon">Also at KubeCon<a class="hash-link" aria-label="Direct link to Also at KubeCon" title="Direct link to Also at KubeCon" href="https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026#also-at-kubecon">​</a></h2>
<p>Headlamp is also expected to make an appearance in a couple of other sessions:</p>
<ul>
<li><a href="https://sched.co/2HgFq" target="_blank" rel="noopener noreferrer">Sponsored Keynote: Scaling Platform Ops with AI Agents: Troubleshooting to Remediation</a> by Jorge Palma (Microsoft) and Natan Yellin (Robusta), Tuesday, March 24 at 10:25 AM CET in Hall 12.</li>
<li><a href="https://sched.co/2EF4I" target="_blank" rel="noopener noreferrer">Visualizing GitOps: A Tour of Flux UIs in the Open Source Ecosystem</a> by Stefan Prodan (ControlPlane), Thursday, March 26 at 1:45 PM CET, surveying open-source UIs for Flux, Headlamp included.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="see-you-there">See You There<a class="hash-link" aria-label="Direct link to See You There" title="Direct link to See You There" href="https://headlamp.dev/blog/2026/03/19/headlamp-team-at-kubecon-europe-2026#see-you-there">​</a></h2>
<p>Whether it's at a talk, the ContribFest, or the Project Pavilion, we'd love to connect. See you in Amsterdam!</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>kubecon</category>
            <category>conference</category>
            <category>community</category>
        </item>
        <item>
            <title><![CDATA[Discover Plugins: A New Section on the Headlamp Website]]></title>
            <link>https://headlamp.dev/blog/2025/11/21/discover-plugins-a-new-section-on-the-headlamp-website</link>
            <guid>https://headlamp.dev/blog/2025/11/21/discover-plugins-a-new-section-on-the-headlamp-website</guid>
            <pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the new plugin section showcasing extensions from the Headlamp team and community]]></description>
            <content:encoded><![CDATA[<p>Plugins have always been a great way to extend Headlamp, but we haven't done enough to showcase them until now. We've added a <a href="https://headlamp.dev/plugins">dedicated section</a> on the website where you can explore plugins that make Headlamp even more powerful.</p>
<p>This isn't about launching a new process or creating an official catalog. It's simply a better way to highlight what's already out there and encourage more contributions from the community.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-youll-find">What You'll Find<a class="hash-link" aria-label="Direct link to What You'll Find" title="Direct link to What You'll Find" href="https://headlamp.dev/blog/2025/11/21/discover-plugins-a-new-section-on-the-headlamp-website#what-youll-find">​</a></h2>
<p>The new section shows plugins from the Headlamp team and the community. From UI enhancements to observability tools, these plugins show how flexible Headlamp can be.</p>
<p>Each plugin links to its GitHub repository so you can check out the source, try it, or contribute improvements.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="have-a-plugin-to-share">Have a Plugin to Share?<a class="hash-link" aria-label="Direct link to Have a Plugin to Share?" title="Direct link to Have a Plugin to Share?" href="https://headlamp.dev/blog/2025/11/21/discover-plugins-a-new-section-on-the-headlamp-website#have-a-plugin-to-share">​</a></h2>
<p>If you've built a plugin that you think others would find useful, we'd love to hear about it. Reach out to us by opening an issue in the <a href="https://github.com/headlamp-k8s/plugins/issues/new" target="_blank" rel="noopener noreferrer">Headlamp plugins GitHub repo</a>, and we'll discuss adding it to the website so more people can discover your work.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-matters">Why This Matters<a class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" href="https://headlamp.dev/blog/2025/11/21/discover-plugins-a-new-section-on-the-headlamp-website#why-this-matters">​</a></h2>
<p>Headlamp thrives on collaboration. By making plugins more visible, we hope to spark ideas, encourage contributions, and make it easier for developers to build on each other's work.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="take-a-look">Take a Look<a class="hash-link" aria-label="Direct link to Take a Look" title="Direct link to Take a Look" href="https://headlamp.dev/blog/2025/11/21/discover-plugins-a-new-section-on-the-headlamp-website#take-a-look">​</a></h2>
<p>Visit the <a href="https://headlamp.dev/plugins">new plugin section</a> now and see what's possible. If you have an idea for a plugin or one already built, let us know. We'd love to showcase it.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>plugins</category>
            <category>community</category>
            <category>website</category>
        </item>
        <item>
            <title><![CDATA[Headlamp in 2025: Project Highlights]]></title>
            <link>https://headlamp.dev/blog/2025/11/13/headlamp-in-2025</link>
            <guid>https://headlamp.dev/blog/2025/11/13/headlamp-in-2025</guid>
            <pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Key updates to the Headlamp project, ecosystem, and UI over the past year]]></description>
            <content:encoded><![CDATA[<p>KubeCon + CloudNativeCon North America 2025 has come to a close, and it was great seeing so many of you in Atlanta! Over the past year, Headlamp has continued to grow as a project: reaching more teams across platforms, powering new workflows and integrations through plugins, and seeing increased collaboration from the broader community.</p>
<p>Whether you caught our demos and sessions in person or are just catching up now, we wanted to give a few updates and highlight how Headlamp has evolved in 2025.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="updates">Updates<a class="hash-link" aria-label="Direct link to Updates" title="Direct link to Updates" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="joining-kubernetes-sig-ui">Joining Kubernetes SIG UI<a class="hash-link" aria-label="Direct link to Joining Kubernetes SIG UI" title="Direct link to Joining Kubernetes SIG UI" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#joining-kubernetes-sig-ui">​</a></h3>
<p>This year marked a big milestone for the project: Headlamp is now officially part of Kubernetes SIG UI. This move brings roadmap and design discussions even closer to the core Kubernetes community and reinforces Headlamp’s role as a modern, extensible UI for the project.</p>
<figure style="margin:0 0 2rem 0;text-align:center"><iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/Q5xkeoj6JiA?si=imPri5QkYHhrI_iI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe></figure>
<p>As part of that, we’ve also been sharing more about making Kubernetes approachable for a wider audience, including an <a href="https://www.youtube.com/watch?v=VFOSyKVOPxs" target="_blank" rel="noopener noreferrer">appearance on Enlightning with Whitney Lee</a> and a <a href="https://www.youtube.com/watch?v=Q7cbT2UBfE0" target="_blank" rel="noopener noreferrer">talk at KCD New York 2025</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="aks-desktop-preview">AKS Desktop Preview<a class="hash-link" aria-label="Direct link to AKS Desktop Preview" title="Direct link to AKS Desktop Preview" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#aks-desktop-preview">​</a></h3>
<p>Now in private preview is AKS Desktop, an application-centric experience addressing the complexity developers face when working with Kubernetes. Rather than troubleshooting setup, teams can quickly create and manage applications on Azure Kubernetes Service. Built on Headlamp’s intuitive interface, AKS Desktop combines supported and preconfigured AKS features so engineers can focus on building great solutions.</p>
<p>Sign up <a href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2AGhYC5Lb5BvDKyCazPHUxURDA4RllGWUNXWFhOUVkySUdQOVAwRjVZSi4u&amp;origin=QRCode" target="_blank" rel="noopener noreferrer">here</a> to apply for the private preview for yourself.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="linux-foundation-mentorship">Linux Foundation mentorship<a class="hash-link" aria-label="Direct link to Linux Foundation mentorship" title="Direct link to Linux Foundation mentorship" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#linux-foundation-mentorship">​</a></h3>
<p>This year, we were excited to work with several students through the Linux Foundation’s Mentorship program, and our mentees have already left a visible mark on Headlamp:</p>
<ul>
<li><a href="https://github.com/adwait-godbole" target="_blank" rel="noopener noreferrer"><strong>Adwait Godbole</strong></a> built the KEDA plugin, adding a UI in Headlamp to view and manage KEDA resources like ScaledObjects and ScaledJobs.</li>
<li><a href="https://github.com/DhairyaMajmudar" target="_blank" rel="noopener noreferrer"><strong>Dhairya Majmudar</strong></a> set up an OpenTelemetry-based observability stack for Headlamp, wiring up metrics, logs, and traces so the project is easier to monitor and debug.</li>
<li><a href="https://www.linkedin.com/in/aishwarya-ghatole-506745231/" target="_blank" rel="noopener noreferrer"><strong>Aishwarya Ghatole</strong></a> led a UX audit of Headlamp plugins, identifying usability issues and proposing design improvements and personas for plugin users.</li>
<li><a href="https://github.com/SinghaAnirban005" target="_blank" rel="noopener noreferrer"><strong>Anirban Singha</strong></a> developed the Karpenter plugin, giving Headlamp a focused view into Karpenter autoscaling resources and decisions.</li>
<li><a href="https://github.com/useradityaa" target="_blank" rel="noopener noreferrer"><strong>Aditya Chaudhary</strong></a> improved Gateway API support, so you can see networking relationships on the resource map, as well as improved support for many of the new Gateway API resources.</li>
<li><a href="https://github.com/Faakhir30" target="_blank" rel="noopener noreferrer"><strong>Faakhir Zahid</strong></a> completed a way to easily <a href="https://headlamp.dev/docs/latest/installation/in-cluster/#plugin-management" target="_blank" rel="noopener noreferrer">manage plugin installation</a> with Headlamp deployed in clusters.</li>
<li><a href="https://github.com/upsaurav12" target="_blank" rel="noopener noreferrer"><strong>Saurav Upadhyay</strong></a> worked on backend caching for Kubernetes API calls, reducing load on the API server and improving performance in Headlamp.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-changes">New changes<a class="hash-link" aria-label="Direct link to New changes" title="Direct link to New changes" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#new-changes">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="multi-cluster-view">Multi-cluster view<a class="hash-link" aria-label="Direct link to Multi-cluster view" title="Direct link to Multi-cluster view" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#multi-cluster-view">​</a></h3>
<p>Managing multiple clusters is challenging: teams often switch between tools and lose context when trying to see what runs where. Headlamp solves this by giving you a single view to compare clusters side-by-side. This makes it easier to understand workloads across environments and reduces the time spent hunting for resources.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Multi-cluster view" src="https://headlamp.dev/assets/images/multi-cluster-view-18a502135866a9c12c19cde8ab4e1689.png" width="1311" height="904" class="img_ev3q">
</p><figcaption>View of multi-cluster workloads</figcaption><p></p></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="projects">Projects<a class="hash-link" aria-label="Direct link to Projects" title="Direct link to Projects" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#projects">​</a></h3>
<p>Kubernetes apps often span multiple namespaces and resource types, which makes troubleshooting feel like piecing together a puzzle. We’ve added <strong>Projects</strong> to give you an application-centric view that groups related resources across multiple namespaces – and even clusters. This allows you to reduce sprawl, troubleshoot faster, and collaborate without digging through YAML or cluster-wide lists.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Projects feature" src="https://headlamp.dev/assets/images/projects-feature-e53d66d5eb03f71cff1007eaaea7e8b8.png" width="1217" height="669" class="img_ev3q">
</p><figcaption>View of the new Projects feature</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li>New “Projects” feature for grouping namespaces into app- or team-centric projects</li>
<li>Extensible Projects details view that plugins can customize with their own tabs and actions</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="navigation-and-activities">Navigation and Activities<a class="hash-link" aria-label="Direct link to Navigation and Activities" title="Direct link to Navigation and Activities" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#navigation-and-activities">​</a></h3>
<p>Day-to-day ops in Kubernetes often means juggling logs, terminals, YAML, and dashboards across clusters. We redesigned Headlamp’s navigation to treat these as first-class “activities” you can keep open and come back to, instead of one-off views you lose as soon as you click away.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="New task bar" src="https://headlamp.dev/assets/images/new-task-bar-a1c05b26af142ae173e999067dd6f805.png" width="1671" height="910" class="img_ev3q">
</p><figcaption>View of the new task bar</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li>A new task bar/activities model lets you pin logs, exec sessions, and details as ongoing activities</li>
<li>An activity overview with a “Close all” action and cluster information</li>
<li>Multi-select and global filters in tables</li>
</ul>
<p>Thanks to <a href="https://github.com/farodin91" target="_blank" rel="noopener noreferrer">Jan Jansen</a> and <a href="https://github.com/useradityaa" target="_blank" rel="noopener noreferrer">Aditya Chaudhary</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="search-and-map">Search and map<a class="hash-link" aria-label="Direct link to Search and map" title="Direct link to Search and map" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#search-and-map">​</a></h3>
<p>When something breaks in production, the first two questions are usually “where is it?” and “what is it connected to?” We’ve upgraded both search and the map view so you can get from a high-level symptom to the right set of objects much faster.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Advanced search" src="https://headlamp.dev/assets/images/advanced-search-b83a4e59be426dc2a29cb6c5bdcd42ca.png" width="1338" height="558" class="img_ev3q">
</p><figcaption>View of the new Advanced Search feature</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li>An Advanced search view that supports rich, expression-based queries over Kubernetes objects</li>
<li>Improved global search that understands labels and multiple search items, and can even update your current namespace based on what you find</li>
<li>EndpointSlice support in the Network section</li>
<li>A richer map view that now includes Custom Resources and Gateway API objects</li>
</ul>
<p>Thanks to <a href="https://github.com/faebr" target="_blank" rel="noopener noreferrer">Fabian</a>, <a href="https://github.com/alexandernorth" target="_blank" rel="noopener noreferrer">Alexander North</a>, and <a href="https://github.com/victormarcolino" target="_blank" rel="noopener noreferrer">Victor Marcolino</a> from Swisscom, and also to <a href="https://github.com/useradityaa" target="_blank" rel="noopener noreferrer">Aditya Chaudhary</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="oidc-and-authentication">OIDC and authentication<a class="hash-link" aria-label="Direct link to OIDC and authentication" title="Direct link to OIDC and authentication" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#oidc-and-authentication">​</a></h3>
<p>We’ve put real work into making OIDC setup clearer and more resilient, especially for in-cluster deployments.</p>
<figure style="margin:0 0 2rem 0;text-align:center"><p><img decoding="async" loading="lazy" alt="User info" src="https://headlamp.dev/assets/images/user-info-cf48ad31b1dad05ea8790e37cebae97d.png" width="373" height="247" class="img_ev3q">
</p><figcaption>View of user information for OIDC clusters</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li>User information displayed in the top bar for OIDC-authenticated users</li>
<li>PKCE support for more secure authentication flows, as well as hardened token refresh handling</li>
<li>Improved support for public OIDC clients (e.g., AKS and EKS)</li>
<li>New guide for setting up Headlamp <a href="https://headlamp.dev/docs/latest/installation/in-cluster/aks-cluster-oauth/" target="_blank" rel="noopener noreferrer">on AKS with Microsoft Entra ID using OAuth2 Proxy</a></li>
</ul>
<p>Thanks to <a href="https://github.com/daviddob" target="_blank" rel="noopener noreferrer">David Dobmeier</a> and <a href="https://github.com/HarshSrivastava275" target="_blank" rel="noopener noreferrer">Harsh Srivastava</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="app-catalog-and-helm">App Catalog and Helm<a class="hash-link" aria-label="Direct link to App Catalog and Helm" title="Direct link to App Catalog and Helm" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#app-catalog-and-helm">​</a></h3>
<p>We’ve broadened how you deploy and source apps via Headlamp, specifically supporting vanilla Helm repos.</p>
<p>Changes:</p>
<ul>
<li>A more capable Helm chart with optional backend TLS termination, PodDisruptionBudgets, custom pod labels, and more</li>
<li>Improved formatting and added missing <code>-oidc-use-access-token</code> arg in the Helm chart</li>
<li>New in-cluster Helm support with an <code>--enable-helm</code> flag and a service proxy</li>
</ul>
<p>Thanks to <a href="https://github.com/shahvrushali22" target="_blank" rel="noopener noreferrer">Vrushali Shah</a> and <a href="https://github.com/muraliinformal" target="_blank" rel="noopener noreferrer">Murali Annamneni</a> from Oracle, and also to <a href="https://github.com/jcpunk" target="_blank" rel="noopener noreferrer">Pat Riehecky</a>, <a href="https://github.com/jda258" target="_blank" rel="noopener noreferrer">Joshua Akers</a>, <a href="https://github.com/rstribrn" target="_blank" rel="noopener noreferrer">Rostislav Stříbrný</a>, <a href="https://github.com/rickliujh" target="_blank" rel="noopener noreferrer">Rick L</a>, and <a href="https://github.com/vnea" target="_blank" rel="noopener noreferrer">Victor</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="performance-accessibility--ux">Performance, accessibility, &amp; UX<a class="hash-link" aria-label="Direct link to Performance, accessibility, &amp; UX" title="Direct link to Performance, accessibility, &amp; UX" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#performance-accessibility--ux">​</a></h3>
<p>Finally, we’ve spent a lot of time on the things you notice every day but don’t always make headlines: startup time, list views, log viewers, accessibility, and small network UX details. A continuous accessibility self-audit has also helped us identify key issues and make Headlamp easier for everyone to use.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Learn section" src="https://headlamp.dev/assets/images/learn-section-ee83e0c5a2ec789b00a2cac7403a1029.png" width="1756" height="1028" class="img_ev3q">
</p><figcaption>View of the Learn section in docs</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li>Significant desktop improvements, with up to 60% faster app loads and much quicker dev-mode reloads for contributors</li>
<li>Numerous table and log viewer refinements: persistent sort order, consistent row actions, copy-name buttons, better tooltips, and more forgiving log inputs</li>
<li>Accessibility and localization improvements, including fixes for zoom-related layout issues, better color contrast, improved screen reader support, and expanded language coverage</li>
<li>More control over resources, with live pod CPU/memory metrics, richer pod details, and inline editing for secrets and CRD fields</li>
<li>A refreshed documentation and plugin onboarding experience, including a “Learn” section and plugin showcase</li>
<li>A more complete NetworkPolicy UI and network-related polish</li>
<li>Nightly builds available for early testing</li>
</ul>
<p>Thanks to <a href="https://github.com/jaehanbyun" target="_blank" rel="noopener noreferrer">Jaehan Byun</a> and <a href="https://github.com/farodin91" target="_blank" rel="noopener noreferrer">Jan Jansen</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="plugins--extensibility">Plugins &amp; Extensibility<a class="hash-link" aria-label="Direct link to Plugins &amp; Extensibility" title="Direct link to Plugins &amp; Extensibility" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#plugins--extensibility">​</a></h2>
<p>Discovering plugins is simpler now – no more hopping between Artifact Hub and assorted GitHub repos. Browse our dedicated <a href="https://headlamp.dev/plugins" target="_blank" rel="noopener noreferrer">Plugins page</a> for a curated catalog of Headlamp-endorsed plugins, along with a showcase of featured plugins.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Plugins page" src="https://headlamp.dev/assets/images/plugins-page-c562c9c168d201e87aca24e3078f96b6.png" width="1758" height="1233" class="img_ev3q">
</p><figcaption>View of the Plugins showcase</figcaption><p></p></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="headlamp-ai-assistant">Headlamp AI Assistant<a class="hash-link" aria-label="Direct link to Headlamp AI Assistant" title="Direct link to Headlamp AI Assistant" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#headlamp-ai-assistant">​</a></h3>
<p>Managing Kubernetes often means memorizing commands and juggling tools. Headlamp’s new AI Assistant changes this by adding a natural-language interface built into the UI. Now, instead of typing <code>kubectl</code> or digging through YAML you can ask, “Is my app healthy?” or “Show logs for this deployment,” and get answers in context, speeding up troubleshooting and smoothing onboarding for new users. Learn more about it <a href="https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant/" target="_blank" rel="noopener noreferrer">here</a>.</p>
<figure style="margin:0 0 2rem 0;text-align:center"><iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/GzXkUuCTcd4?si=HYlGx7pk5LB-VdK1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-plugins-additions">New plugins additions<a class="hash-link" aria-label="Direct link to New plugins additions" title="Direct link to New plugins additions" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#new-plugins-additions">​</a></h3>
<p>Alongside the new AI Assistant, we’ve been growing Headlamp’s plugin ecosystem so you can bring more of your workflows into a single UI, with integrations like Minikube, Karpenter, and more.</p>
<p>Highlights from the latest plugin releases:</p>
<ul>
<li>Minikube plugin, providing a locally-stored single node Minikube cluster</li>
<li>Karpenter plugin, with support for Azure Node Auto-Provisioning (NAP)</li>
<li>KEDA plugin, which you can learn more about <a href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp/" target="_blank" rel="noopener noreferrer">here</a></li>
<li>Community-maintained plugins for <a href="https://github.com/sozercan/gatekeeper-headlamp-plugin" target="_blank" rel="noopener noreferrer">Gatekeeper</a> and <a href="https://github.com/kaito-project/headlamp-kaito" target="_blank" rel="noopener noreferrer">KAITO</a></li>
</ul>
<p>Thanks to <a href="https://github.com/shahvrushali22" target="_blank" rel="noopener noreferrer">Vrushali Shah</a> and <a href="https://github.com/muraliinformal" target="_blank" rel="noopener noreferrer">Murali Annamneni</a> from Oracle, and also to <a href="https://github.com/SinghaAnirban005" target="_blank" rel="noopener noreferrer">Anirban Singha</a>, <a href="https://github.com/adwait-godbole" target="_blank" rel="noopener noreferrer">Adwait Godbole</a>, <a href="https://github.com/sozercan" target="_blank" rel="noopener noreferrer">Sertaç Özercan</a>, <a href="https://github.com/chewong" target="_blank" rel="noopener noreferrer">Ernest Wong</a>, and <a href="https://github.com/chloe608" target="_blank" rel="noopener noreferrer">Chloe Lim</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="other-plugins-updates">Other plugins updates<a class="hash-link" aria-label="Direct link to Other plugins updates" title="Direct link to Other plugins updates" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#other-plugins-updates">​</a></h3>
<p>Alongside new additions, we’ve also spent time refining plugins that many of you already use, focusing on smoother workflows and better integration with the core UI.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Backstage plugin" src="https://headlamp.dev/assets/images/backstage-plugin-8d315a6cb6ebce3416c065760918d7c7.png" width="1430" height="820" class="img_ev3q">
</p><figcaption>View of the Backstage plugin</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li><strong>Flux plugin</strong>: Updated for Flux v2.7, with support for newer CRDs, navigation fixes so it works smoothly on recent clusters</li>
<li><strong>App Catalog</strong>: Now supports Helm repos in addition to Artifact Hub, can run in-cluster via /serviceproxy, and shows both current and latest app versions</li>
<li><strong>Plugin Catalog</strong>: Improved card layout and accessibility, plus dependency and Storybook test updates</li>
<li><strong>Backstage plugin</strong>: Dependency and build updates, more info <a href="https://headlamp.dev/blog/2025/11/05/strengthening-backstage-and-headlamp-integration/" target="_blank" rel="noopener noreferrer">here</a></li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="plugin-development">Plugin Development<a class="hash-link" aria-label="Direct link to Plugin Development" title="Direct link to Plugin Development" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#plugin-development">​</a></h3>
<p>We’ve focused on making it faster and clearer to build, test, and ship Headlamp plugins, backed by improved documentation and lighter tooling.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Plugin development" src="https://headlamp.dev/assets/images/plugin-development-5a641de54ec2a18e8908f07826695a1a.png" width="1541" height="1233" class="img_ev3q">
</p><figcaption>View of the Plugin Development guide</figcaption><p></p></figure>
<p>Changes:</p>
<ul>
<li>New and expanded guides for <a href="https://headlamp.dev/docs/latest/development/architecture#plugins" target="_blank" rel="noopener noreferrer">plugin architecture</a> and <a href="https://headlamp.dev/docs/latest/development/plugins/getting-started" target="_blank" rel="noopener noreferrer">development</a>, including how to publish and ship plugins</li>
<li>Added <a href="https://headlamp.dev/docs/latest/development/plugins/i18n" target="_blank" rel="noopener noreferrer">i18n support documentation</a> so plugins can be translated and localized</li>
<li>Added example plugins: <a href="https://github.com/kubernetes-sigs/headlamp/tree/main/plugins/examples/ui-panels" target="_blank" rel="noopener noreferrer">ui-panels</a>, <a href="https://github.com/kubernetes-sigs/headlamp/tree/main/plugins/examples/resource-charts" target="_blank" rel="noopener noreferrer">resource-charts</a>, <a href="https://github.com/kubernetes-sigs/headlamp/tree/main/plugins/examples/custom-theme" target="_blank" rel="noopener noreferrer">custom-theme</a>, and <a href="https://github.com/kubernetes-sigs/headlamp/tree/main/plugins/examples/projects" target="_blank" rel="noopener noreferrer">projects</a></li>
<li>Improved type checking for Headlamp APIs, restored Storybook support for component testing, and reduced dependencies for faster installs and fewer updates</li>
<li>Documented plugin install locations, UI signifiers in Plugin Settings, and labels that differentiated shipped, UI-installed, and dev-mode plugins</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="security-upgrades">Security upgrades<a class="hash-link" aria-label="Direct link to Security upgrades" title="Direct link to Security upgrades" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#security-upgrades">​</a></h2>
<p>We've also been investing in keeping Headlamp secure – both by tightening how authentication works and by staying on top of upstream vulnerabilities and tooling.</p>
<p>Updates:</p>
<ul>
<li>We've been keeping up with security updates, regularly updating dependencies and addressing upstream security issues.</li>
<li>We tightened the Helm chart's default security context and fixed a regression that broke the plugin manager.</li>
<li>We've improved OIDC security with PKCE support, helping unblock more secure and standards-compliant OIDC setups when deploying Headlamp in-cluster.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2025/11/13/headlamp-in-2025#conclusion">​</a></h2>
<p>Thank you to everyone who stopped by our booth, joined our sessions, or chatted with us during KubeCon + CloudNativeCon North America 2025. Seeing the different ways teams are adopting and extending the project is a big part of what keeps us moving forward.</p>
<p>If you’re catching up after the event, all these updates are available today. Try the latest Headlamp release, explore the new views, plugins, and docs, and share your feedback with us on Slack or GitHub – your feedback helps shape where Headlamp goes next.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>kubecon</category>
            <category>community</category>
        </item>
        <item>
            <title><![CDATA[View and Manage Kubernetes Applications with Headlamp Projects]]></title>
            <link>https://headlamp.dev/blog/2025/11/11/headlamp-projects</link>
            <guid>https://headlamp.dev/blog/2025/11/11/headlamp-projects</guid>
            <pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Introducing Headlamp Projects - a flexible way to group and manage related Kubernetes resources across namespaces and clusters]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="view-and-manage-kubernetes-applications-with-headlamp-projects">View and Manage Kubernetes Applications with Headlamp Projects<a class="hash-link" aria-label="Direct link to View and Manage Kubernetes Applications with Headlamp Projects" title="Direct link to View and Manage Kubernetes Applications with Headlamp Projects" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#view-and-manage-kubernetes-applications-with-headlamp-projects">​</a></h2>
<p>Applications in Kubernetes are made up of multiple resources like pods, services, and deployments, often spread across namespaces. Without a way to group these resources, managing, troubleshooting, and collaborating can feel like piecing together a puzzle.</p>
<p>Headlamp Projects (since version 0.35.0) gives you a single, application-centric view. Instead of navigating cluster-wide lists or searching for labels, you can organize related resources into logical groups. This makes it easier to understand and manage your app as a whole.</p>
<p>Headlamp started as a UI for Kubernetes operators, focusing on resources such as pods, services, ConfigMaps, and more. It even includes a Map view to visualize relationships. For developers, though, a resource-centric approach can feel indirect. Projects bridges that gap by providing a clear, application-first experience.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-projects">Introducing Projects<a class="hash-link" aria-label="Direct link to Introducing Projects" title="Direct link to Introducing Projects" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#introducing-projects">​</a></h2>
<p>To solve this, we introduced Headlamp Projects. Projects provide a flexible way to group related Kubernetes resources into a single, scoped view. Instead of jumping between namespaces or digging through YAML, you can organize everything that makes up an application across one or more namespaces and even multiple clusters into a project. This gives teams clarity, reduces resource sprawl, and makes collaboration easier.</p>
<p>Projects are built on top of Kubernetes, no special custom resources are needed, so you are still working with native resources like namespaces, deployments, and services. The difference is that Headlamp adds a visual layer that brings the project related resources together in one place, lowering the barrier to entry and making it easier for teams to manage applications without getting lost in cluster-wide complexity.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="solving-the-onboarding-bottleneck-with-headlamp-projects">Solving the Onboarding Bottleneck with Headlamp Projects<a class="hash-link" aria-label="Direct link to Solving the Onboarding Bottleneck with Headlamp Projects" title="Direct link to Solving the Onboarding Bottleneck with Headlamp Projects" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#solving-the-onboarding-bottleneck-with-headlamp-projects">​</a></h2>
<p>Headlamp Projects change that by giving teams a scoped, visual environment that lowers the barrier to entry. Instead of YAML files and manual RBAC configuration, a Dev Lead or Kubernetes Admin can create a project linked to the right namespaces and give developers a focused space to work all in just a few clicks.</p>
<p>Here is what you can do in the Headlamp UI:</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-a-new-project">Create a New Project<a class="hash-link" aria-label="Direct link to Create a New Project" title="Direct link to Create a New Project" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#create-a-new-project">​</a></h3>
<p>Use a guided flow to name your project and define its scope. Projects are built on a label-based model, allowing you to group resources across one or more namespaces. This can of course be done in Headlamp's UI, or by applying the right labels to namespaces in whatever way a cluster administrator prefers.</p>
<p><img decoding="async" loading="lazy" alt="Create New Project" src="https://headlamp.dev/assets/images/project-creation-bc5b0ce286647fb1242c53d4c400025f.png" width="720" height="348" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="import-existing-namespaces">Import Existing Namespaces<a class="hash-link" aria-label="Direct link to Import Existing Namespaces" title="Direct link to Import Existing Namespaces" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#import-existing-namespaces">​</a></h3>
<p>Select existing namespaces or create new ones to associate with your project right from Headlamp's UI.</p>
<p><img decoding="async" loading="lazy" alt="Create Project from YAML" src="https://headlamp.dev/assets/images/project-creation-from-yaml-1479b51c49ba5d88e030495f571a5439.png" width="720" height="344" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="span-projects-across-clusters">Span Projects Across Clusters<a class="hash-link" aria-label="Direct link to Span Projects Across Clusters" title="Direct link to Span Projects Across Clusters" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#span-projects-across-clusters">​</a></h3>
<p>Projects are not limited to a single cluster. You can group resources from multiple clusters into a single project, making it easier to manage workloads in hybrid or multi-cluster environments.</p>
<p><img decoding="async" loading="lazy" alt="Span Projects Across Clusters" src="https://headlamp.dev/assets/images/multi-cluster-784d22f5b1858af74edf91abb6c5cccb.png" width="720" height="346" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="built-in-rbac-integration">Built-in RBAC Integration<a class="hash-link" aria-label="Direct link to Built-in RBAC Integration" title="Direct link to Built-in RBAC Integration" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#built-in-rbac-integration">​</a></h3>
<p>Headlamp respects Kubernetes RBAC, so users only see and interact with resources they are allowed to manage. No extra configuration is required.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="making-kubernetes-work-for-developers">Making Kubernetes Work for Developers<a class="hash-link" aria-label="Direct link to Making Kubernetes Work for Developers" title="Direct link to Making Kubernetes Work for Developers" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#making-kubernetes-work-for-developers">​</a></h2>
<p>Once a project is created in Headlamp, developers can join and start deploying workloads with minimal friction. Everything is scoped to the project, so users only see what is relevant to their work, instead of having to navigate cluster-wide views. Headlamp respects Kubernetes RBAC permissions, so developers only see the resources they have access to. If a developer already has access to a namespace, once they use Headlamp to access that cluster, the project will automatically appear for them.</p>
<p>This is especially helpful for new developers or users coming from non-DevOps backgrounds. Instead of having to understand where to look in Kubernetes for their app, they can jump straight into deploying and monitoring their applications. Here is what the onboarding experience with Projects looks like:</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="monitor-and-troubleshoot">Monitor and Troubleshoot<a class="hash-link" aria-label="Direct link to Monitor and Troubleshoot" title="Direct link to Monitor and Troubleshoot" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#monitor-and-troubleshoot">​</a></h3>
<p>The project view shows active workloads, logs, events, and metrics that are all scoped to the project. Developers can understand what is happening without needing to dig through cluster-wide data.</p>
<p><img decoding="async" loading="lazy" alt="Monitor and Troubleshoot" src="https://headlamp.dev/assets/images/project-monitor-troubleshoot-423a90482eeea077ded0af755d6338b0.png" width="720" height="346" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="delete-with-a-single-click">Delete with a Single Click<a class="hash-link" aria-label="Direct link to Delete with a Single Click" title="Direct link to Delete with a Single Click" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#delete-with-a-single-click">​</a></h3>
<p>Projects can be deleted with one click. This helps users start fresh or clean up after a learning session without needing help from an admin.</p>
<p><img decoding="async" loading="lazy" alt="Delete with a Single Click" src="https://headlamp.dev/assets/images/delete-project-f571c3a792d1c6f7b0ee162915abf364.png" width="720" height="347" class="img_ev3q"></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="manage-multiple-environments">Manage Multiple Environments<a class="hash-link" aria-label="Direct link to Manage Multiple Environments" title="Direct link to Manage Multiple Environments" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#manage-multiple-environments">​</a></h3>
<p>If you have separate environments for development, test, and production, you can create a project for each and link the relevant namespaces. This gives developers a clear, scoped view of the environment they are working in, reducing confusion and mistakes.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion-and-next-steps">Conclusion and Next Steps<a class="hash-link" aria-label="Direct link to Conclusion and Next Steps" title="Direct link to Conclusion and Next Steps" href="https://headlamp.dev/blog/2025/11/11/headlamp-projects#conclusion-and-next-steps">​</a></h2>
<p>Many Kubernetes users are application developers, and Kubernetes complexity often comes from organizational challenges, not just technical ones. Setting up environments, managing access, and helping new developers get started can take hours or even days. Headlamp Projects solves this by introducing scoped, visual environments that make onboarding and collaboration faster and easier.</p>
<p>By providing a simple, self-service way to group resources, Headlamp lowers the barrier to entry and makes Kubernetes more approachable for everyone. Dev Leads can create projects and organize resources in minutes, while developers can onboard and deploy without navigating cluster internals. New users can experiment safely and build confidence through guided workflows.</p>
<p>Whether you are running Azure Kubernetes Service (AKS), Elastic Kubernetes Service (EKS), or any other Kubernetes distribution, Headlamp Projects help your team move faster, collaborate better, and focus on building, not fighting the platform.</p>
<p><strong>Tip</strong>: If you want to add an existing namespace to a project, simply apply the project label via Headlamp (editing the namespace directly), or you can also use <em>kubectl</em>, as:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl label namespace </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">namespace-name</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> headlamp.dev/project-id</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">project-id</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>To get started, open Headlamp, select Projects in its home view, and create a new project to explore how it can simplify your Kubernetes experience.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>projects</category>
            <category>application-management</category>
        </item>
        <item>
            <title><![CDATA[No Cloud, No CLI, No Problem: Test and Learn Kubernetes Locally with Headlamp Local Cluster]]></title>
            <link>https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui</link>
            <guid>https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui</guid>
            <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Create and manage a fully functional Kubernetes cluster right from the Headlamp UI]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-problem">The Problem<a class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#the-problem">​</a></h2>
<p>Starting with Kubernetes often means juggling cloud accounts, billing concerns, drivers, kubeconfig conflicts, and long waits just to see a pod run. You bounce between terminal commands, YAML files, and cluster views while trying to learn the basics or test a simple change. This is also the case when you are running Kubernetes locally. You have tons of choices, but you have to fiddle with the command line to get started.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-solution">The Solution<a class="hash-link" aria-label="Direct link to The Solution" title="Direct link to The Solution" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#the-solution">​</a></h2>
<p>Headlamp removes that friction with <strong>Local Cluster</strong>. You can create and manage a fully functional Kubernetes cluster right from the Headlamp UI. No terminal. No cloud provider. Click to start, experiment safely, and get feedback fast in a graphical and intuitive way.</p>
<p>This approach is great for:</p>
<ul>
<li>Developers testing apps before production</li>
<li>Students and learners trying Kubernetes for the first time</li>
<li>Anyone who wants a safe sandbox without extra setup or cost</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-you-get">What You Get<a class="hash-link" aria-label="Direct link to What You Get" title="Direct link to What You Get" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#what-you-get">​</a></h2>
<p>When you create a local cluster in Headlamp, you are spinning up a real Kubernetes cluster on your local machine using Minikube.</p>
<p>Your local cluster is:</p>
<ul>
<li><strong>Plain Minikube</strong>: No cloud infrastructure needed</li>
<li><strong>Integrated with Headlamp</strong>: Managed entirely through the UI</li>
<li><strong>Ideal for testing and learning</strong>: Manage and troubleshoot applications with Projects, inspect resources, and explore features without setup headaches</li>
</ul>
<p>Once created, the cluster appears in Headlamp like any other cluster. You can start and stop it, deploy applications, using Projects, and manage workloads in an application-centric view. Projects group related app resources into a single scoped space, making it easier to troubleshoot, monitor, and collaborate without navigating cluster-wide complexity.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-your-app-locally">Deploy Your App Locally<a class="hash-link" aria-label="Direct link to Deploy Your App Locally" title="Direct link to Deploy Your App Locally" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#deploy-your-app-locally">​</a></h2>
<p>Local Cluster gives you a fast inner loop. You try a change, see results, and iterate without waiting on remote environments or wrestling with credentials. Developers can validate workloads before pushing to shared clusters, and learners explore Kubernetes without cloud accounts or command line hurdles. When paired with <strong>Projects</strong>, this workflow scales beyond experimentation. Projects organize resources into an application-centric view, making collaboration and troubleshooting easier as your local work grows into real applications. Together, they turn Kubernetes from a setup challenge into a streamlined development experience.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-1-install-the-minikube-plugin">Step 1: Install the Minikube Plugin<a class="hash-link" aria-label="Direct link to Step 1: Install the Minikube Plugin" title="Direct link to Step 1: Install the Minikube Plugin" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-1-install-the-minikube-plugin">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/minikube-install-a71a8c9e790272e96d7b4ad8aac2ae6f.png" width="720" height="450" class="img_ev3q">
</p><figcaption>Install Minikube with one click from the Plugin Catalog.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-2-create-cluster">Step 2: Create Cluster<a class="hash-link" aria-label="Direct link to Step 2: Create Cluster" title="Direct link to Step 2: Create Cluster" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-2-create-cluster">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/add-cluster-24c5276492ef61beaff28d9502097fd4.png" width="720" height="437" class="img_ev3q">
</p><figcaption>Setting up clusters and credentials slows learning and blocks quick experiments. Local Cluster starts a real Kubernetes environment on your local machine from the Headlamp UI so you can begin in minutes with zero cloud setup.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-3-deploy-directly-into-a-project">Step 3: Deploy directly into a project!<a class="hash-link" aria-label="Direct link to Step 3: Deploy directly into a project!" title="Direct link to Step 3: Deploy directly into a project!" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-3-deploy-directly-into-a-project">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/apply-manifests-from-headlamp-515766cbf677ed2f6d57139a9c40928b.png" width="720" height="450" class="img_ev3q">
</p><figcaption>Apply manifests from Headlamp and immediately see the results in the Project view so the feedback loop stays fast and focused.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-4-observe-only-what-matters-to-the-app">Step 4: Observe only what matters to the app!<a class="hash-link" aria-label="Direct link to Step 4: Observe only what matters to the app!" title="Direct link to Step 4: Observe only what matters to the app!" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-4-observe-only-what-matters-to-the-app">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/project-overview-f5e02e587c7b9b26a85b88a1f928ff0b.png" width="720" height="437" class="img_ev3q">
</p><figcaption>Hunting through cluster wide logs and events wastes time. Headlamp scopes logs, events, status, and basic metrics to the Project so signals are relevant, and noise is reduced.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-5-see-relationships-with-the-map">Step 5: See relationships with the map!<a class="hash-link" aria-label="Direct link to Step 5: See relationships with the map!" title="Direct link to Step 5: See relationships with the map!" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-5-see-relationships-with-the-map">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/maps-tab-in-project-bf214bcf4b1a6e08e598ae4fa543c7dc.png" width="720" height="425" class="img_ev3q">
</p><figcaption>Lists hide dependencies and flows. The map shows how services, pods, and configurations connect within the Project, so you spot missing pieces and broken paths quickly.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-6-edit-and-iterate-safely">Step 6: Edit and iterate safely<a class="hash-link" aria-label="Direct link to Step 6: Edit and iterate safely" title="Direct link to Step 6: Edit and iterate safely" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-6-edit-and-iterate-safely">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/yaml-editor-67180780ea31a6657eab66c693cee44d.png" width="720" height="438" class="img_ev3q">
</p><figcaption>The built in editor adds structure and validation so changes are clearer and safer, which shortens the time from idea to working app.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="step-7-control-resources-and-lifecycle">Step 7: Control resources and lifecycle<a class="hash-link" aria-label="Direct link to Step 7: Control resources and lifecycle" title="Direct link to Step 7: Control resources and lifecycle" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#step-7-control-resources-and-lifecycle">​</a></h2>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" src="https://headlamp.dev/assets/images/start-stop-clusters-from-headlamp-946be4f5e1a8a13063338fd0e763a290.png" width="720" height="468" class="img_ev3q">
</p><figcaption>Local development can stress a laptop. Start, stop, and delete clusters from the UI so you keep resources under control while preserving work between sessions.</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="keep-building">Keep Building<a class="hash-link" aria-label="Direct link to Keep Building" title="Direct link to Keep Building" href="https://headlamp.dev/blog/2025/11/10/create-and-manage-a-fully-functional-kubernetes-cluster-right-from-the-headlamp-ui#keep-building">​</a></h2>
<p>The best way to learn Kubernetes is by doing. Headlamp gives you a safe, fast environment to experiment and grow your skills. Check out the full setup guide for Local Cluster and <a href="https://headlamp.dev/docs/latest/learn/projects/" target="_blank" rel="noopener noreferrer">Projects</a> in the Headlamp Learn docs. Start today and keep building.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>local-cluster</category>
            <category>minikube</category>
            <category>development</category>
        </item>
        <item>
            <title><![CDATA[Headlamp Team at Kubecon NA 2025]]></title>
            <link>https://headlamp.dev/blog/2025/11/06/kubecon-na-2025</link>
            <guid>https://headlamp.dev/blog/2025/11/06/kubecon-na-2025</guid>
            <pubDate>Thu, 06 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Join us at KubeCon NA 2025 in Atlanta for sessions, demos, and discussions]]></description>
            <content:encoded><![CDATA[<p>We’re excited to share that <strong>Joaquim Rocha</strong>, <strong>Oleksandr Dubenko</strong>, and <strong>Will Case</strong> from the Headlamp team will be at this year’s community events. Here is where you can find us in Atlanta.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fluxcon-colocated-session">FluxCon colocated session<a class="hash-link" aria-label="Direct link to FluxCon colocated session" title="Direct link to FluxCon colocated session" href="https://headlamp.dev/blog/2025/11/06/kubecon-na-2025#fluxcon-colocated-session">​</a></h2>
<p><strong>Title:</strong> Reconciling ClickOps and GitOps<br>
<strong>Speakers:</strong> Joaquim Rocha and Oleksandr Dubenko<br>
<strong>Date and time:</strong> Monday, November 10, 4:00 PM to 4:25 PM EST<br>
<strong>Description:</strong> A tour of the Flux UI plugin for Headlamp and how it helps teams manage Flux resources through a friendly UI while keeping GitOps principles intact.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="contribfest">ContribFest<a class="hash-link" aria-label="Direct link to ContribFest" title="Direct link to ContribFest" href="https://headlamp.dev/blog/2025/11/06/kubecon-na-2025#contribfest">​</a></h2>
<p><strong>Title:</strong> Power up your CNCF tools with Headlamp<br>
<strong>Speakers:</strong> Joaquim Rocha and Oleksandr Dubenko<br>
<strong>Date and time:</strong> Tuesday, November 11, 2:30 PM to 3:45 PM EST<br>
<strong>Room:</strong> Building B, Level 2, B208<br>
<strong>Description:</strong> A hands-on session to learn how to create a plugin for Headlamp and discussing any project related subjects. Bring your laptop and ideas.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kubecon--cloudnativecon-north-america-2025">KubeCon + CloudNativeCon North America 2025<a class="hash-link" aria-label="Direct link to KubeCon + CloudNativeCon North America 2025" title="Direct link to KubeCon + CloudNativeCon North America 2025" href="https://headlamp.dev/blog/2025/11/06/kubecon-na-2025#kubecon--cloudnativecon-north-america-2025">​</a></h2>
<p><strong>Title:</strong> No kubectl, No Problem: The Future with Conversational Kubernetes<br>
<strong>Speaker:</strong> Will Case<br>
<strong>Date and time:</strong> Tuesday, November 11, 5:00 PM to 5:30 PM EST<br>
<strong>Room:</strong> Building B, Level 2, B206<br>
<strong>Description:</strong> A look at the Headlamp AI assistant and how natural language can simplify common Kubernetes workflows right inside the UI.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="project-pavilion">Project Pavilion<a class="hash-link" aria-label="Direct link to Project Pavilion" title="Direct link to Project Pavilion" href="https://headlamp.dev/blog/2025/11/06/kubecon-na-2025#project-pavilion">​</a></h2>
<p>Stop by the Project Pavilion to see live demos and meet maintainers. The Pavilion is located in <strong>Building B, Level 1, Exhibit Hall B3 to B5</strong>. Our kiosk number is <strong>18A</strong> and we will staff it on the three full days of the Project Pavillion.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="join-us">Join Us<a class="hash-link" aria-label="Direct link to Join Us" title="Direct link to Join Us" href="https://headlamp.dev/blog/2025/11/06/kubecon-na-2025#join-us">​</a></h2>
<p>We look forward to meeting you at KubeCon NA 2025 in Atlanta!</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>kubecon</category>
            <category>conference</category>
            <category>community</category>
        </item>
        <item>
            <title><![CDATA[Strengthening the Backstage + Headlamp Integration]]></title>
            <link>https://headlamp.dev/blog/2025/11/05/strengthening-backstage-and-headlamp-integration</link>
            <guid>https://headlamp.dev/blog/2025/11/05/strengthening-backstage-and-headlamp-integration</guid>
            <pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Addressing multi-user auth issues and improving the deployment experience]]></description>
            <content:encoded><![CDATA[<p>When we first introduced the <a href="https://headlamp.dev/blog/2024/11/11/introducing-an-integrated-backstage-and-headlamp-experience/" target="_blank" rel="noopener noreferrer">Backstage + Headlamp integration</a>, the goal was to give developers and platform engineers a unified way to view, debug, and manage Kubernetes resources directly from Backstage, without context-switching.
Following the release, several teams started using that integration in real multi-user environments and shared valuable feedback. This update focuses on addressing those suggestions and making the integration more robust.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fixing-multi-user-authentication-issues">Fixing multi-user authentication issues<a class="hash-link" aria-label="Direct link to Fixing multi-user authentication issues" title="Direct link to Fixing multi-user authentication issues" href="https://headlamp.dev/blog/2025/11/05/strengthening-backstage-and-headlamp-integration#fixing-multi-user-authentication-issues">​</a></h2>
<p>In the initial implementation, the Headlamp instance relied on <strong>kubeconfigs managed in the Headlamp backend</strong>.
While this worked for single-user or demo setups, users noticed problems when multiple people accessed Headlamp simultaneously. Since the kubeconfig file was shared at the backend, <strong>access levels got mixed up</strong>, for example, one user's kubeconfig could overwrite another's, leading to mismatched permissions and resource visibility.</p>
<p>We've solved this by moving kubeconfig handling <strong>to the user's browser</strong>.
Now, each user session maintains its own cluster access through Headlamp's <strong>stateless/dynamic clusters feature</strong>. This ensures that:</p>
<ul>
<li>Each user's access level correctly reflects their own permissions.</li>
<li>No kubeconfig is stored or shared on the server side.</li>
<li>Backend state remains isolated and clean.</li>
</ul>
<p>This change makes the integration much safer and closer to how Headlamp typically operates in standalone mode.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="integrating-with-backstage-authentication">Integrating with Backstage authentication<a class="hash-link" aria-label="Direct link to Integrating with Backstage authentication" title="Direct link to Integrating with Backstage authentication" href="https://headlamp.dev/blog/2025/11/05/strengthening-backstage-and-headlamp-integration#integrating-with-backstage-authentication">​</a></h2>
<p>Another pain point users raised was that <strong>Headlamp, when spawned as a process, didn't have its own authentication layer</strong>, meaning it relied entirely on Backstage's session context, but without verification, which required administrators to take extra measures to secure the deployment.</p>
<p>To fix this, we introduced a <strong>proxy layer inside the headlamp-backend plugin</strong>.
Here's how it works:</p>
<ul>
<li>Backstage continues to handle user authentication as usual.</li>
<li>The headlamp-backend plugin now exposes a <strong>proxy endpoint</strong> that forwards requests to the Headlamp server.</li>
<li>Every request passing through this proxy goes through a <strong>middleware check</strong> that verifies authentication at the Backstage level.</li>
<li>If the user is not authenticated in Backstage, the request to Headlamp is rejected.</li>
</ul>
<p>Because all traffic now goes through this proxy, <strong>the Headlamp server no longer needs to be exposed externally</strong>. It can safely run as an internal process, completely hidden from direct access.
This design ensures that <strong>Headlamp inherits Backstage’s authentication and access control model</strong>, without needing to run a separate auth service or duplicate logic.
With these two main changes:</p>
<ul>
<li>Per-user kubeconfig handling (via browser sessions)</li>
<li>Auth-aware proxy middleware between Backstage and Headlamp
The integration is now <strong>stateless</strong>, <strong>multi-user safe</strong>, and <strong>aligned with Backstage's security model</strong>.</li>
</ul>
<p>From a developer's perspective, this also simplifies the deployment. You no longer need to manage shared kubeconfig files or expose the Headlamp server to the outside world. Everything runs behind Backstage's existing authentication and networking layer.</p>
<p><img decoding="async" loading="lazy" alt="Headlamp&amp;#39;s map view showing Kubernetes resources in Backstage" src="https://headlamp.dev/assets/images/backstage_n_headlamp_map_view-8d315a6cb6ebce3416c065760918d7c7.png" width="1430" height="820" class="img_ev3q">
<em>Headlamp's map view provides a visual representation of Kubernetes resources and their relationships directly within Backstage</em></p>
<p><img decoding="async" loading="lazy" alt="Pod details view in Headlamp within Backstage" src="https://headlamp.dev/assets/images/backstage_n_headlamp_pod_details-view-5a8d9548a4a66f956cd0548768b720c2.png" width="936" height="537" class="img_ev3q">
<em>Detailed pod inspection within Backstage, powered by Headlamp's user-specific authentication</em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it">Try it!<a class="hash-link" aria-label="Direct link to Try it!" title="Direct link to Try it!" href="https://headlamp.dev/blog/2025/11/05/strengthening-backstage-and-headlamp-integration#try-it">​</a></h2>
<p>These updates make the Backstage Headlamp integration more secure, predictable, and production-ready for multi-user setups.</p>
<p>We appreciate the community feedback that helped identify these issues and guide the improvements. If you are not yet using Headlamp on Backstage, this update should make your setup simpler and safer, so we encourage you to check the instructions and try it out.</p>
<p><strong>Instructions:</strong></p>
<ul>
<li><a href="https://github.com/headlamp-k8s/backstage-plugin/tree/main/headlamp#configuration" target="_blank" rel="noopener noreferrer">For the frontend plugin</a></li>
<li><a href="https://github.com/headlamp-k8s/backstage-plugin/tree/main/headlamp-backend#configuration" target="_blank" rel="noopener noreferrer">For the backend plugin</a></li>
</ul>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>headlamp</category>
            <category>backstage</category>
            <category>portal</category>
            <category>dev portal</category>
            <category>security</category>
        </item>
        <item>
            <title><![CDATA[Introducing Headlamp AI Assistant]]></title>
            <link>https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant</link>
            <guid>https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant</guid>
            <pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Introducing Headlamp AI Assistant]]></description>
            <content:encoded><![CDATA[<p>To simplify Kubernetes management and troubleshooting, we're thrilled to
introduce <a href="https://github.com/headlamp-k8s/plugins/tree/main/ai-assistant#readme" target="_blank" rel="noopener noreferrer">Headlamp AI Assistant</a>: a powerful new plugin for Headlamp that helps
you understand and operate your Kubernetes clusters and applications with
greater clarity and ease.</p>
<p>Whether you're a seasoned engineer or just getting started, the AI Assistant offers:</p>
<ul>
<li><strong>Fast time to value:</strong> Ask questions like <em>"Is my application healthy?"</em> or
<em>"How can I fix this?"</em> without needing deep Kubernetes knowledge.</li>
<li><strong>Deep insights:</strong> Start with high-level queries and dig deeper with prompts
like <em>"List all the problematic pods"</em> or <em>"How can I fix this pod?"</em></li>
<li><strong>Focused &amp; relevant:</strong> Ask questions in the context of what you're viewing
in the UI, such as <em>"What's wrong here?"</em></li>
<li><strong>Action-oriented:</strong> Let the AI take action for you, like <em>"Restart that
deployment"</em>, with your permission.</li>
</ul>
<p>Here is a demo of the AI Assistant in action as it helps troubleshoot an
application running with issues in a Kubernetes cluster:</p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/GzXkUuCTcd4?si=9pRjNma4UYdJa3Ig" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hopping-on-the-ai-train">Hopping on the AI train<a class="hash-link" aria-label="Direct link to Hopping on the AI train" title="Direct link to Hopping on the AI train" href="https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant#hopping-on-the-ai-train">​</a></h2>
<p>Large Language Models (LLMs) have transformed not just how we access data but
also how we interact with it. The rise of tools like ChatGPT opened a world of
possibilities, inspiring a wave of new applications. Asking questions or giving
commands in natural language is intuitive, especially for users who aren't deeply
technical. Now everyone can quickly ask how to do X or Y, without feeling awkward
or having to traverse pages and pages of documentation like before.</p>
<p>Therefore, Headlamp AI Assistant brings a conversational UI to <a href="https://headlamp.dev/" target="_blank" rel="noopener noreferrer">Headlamp</a>,
powered by LLMs that Headlamp users can configure with their own API keys.
It is available as a Headlamp plugin, making it easy to integrate into your
existing setup. Users can enable it by installing the plugin and configuring
it with their own LLM API keys, giving them control over which model powers
the assistant. Once enabled, the assistant becomes part of the Headlamp UI,
ready to respond to contextual queries and perform actions directly from the
interface.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="context-is-everything">Context is everything<a class="hash-link" aria-label="Direct link to Context is everything" title="Direct link to Context is everything" href="https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant#context-is-everything">​</a></h2>
<p>As expected, the AI Assistant is focused on helping users with Kubernetes
concepts. Yet, while there is a lot of value in responding to Kubernetes
related questions from Headlamp's UI, we believe that the great benefit of such
an integration is when it can use the context of what the user is experiencing
in an application. So, the Headlamp AI Assistant knows what you're currently
viewing in Headlamp, and this makes the interaction feel more like working
with a human assistant.</p>
<p>For example, if a pod is failing, users can simply ask <em>"What's wrong here?"</em>
and the AI Assistant will respond with the root cause, like a missing
environment variable or a typo in the image name. Follow-up prompts like
<em>"How can I fix this?"</em> allow the AI Assistant to suggest a fix, streamlining
what used to take multiple steps into a quick, conversational flow.</p>
<p>Sharing the context from Headlamp is not a trivial task though, so it's
something we will keep working on perfecting.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tools">Tools<a class="hash-link" aria-label="Direct link to Tools" title="Direct link to Tools" href="https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant#tools">​</a></h2>
<p>Context from the UI is helpful, but sometimes additional capabilities are
needed. If the user is viewing the pod list and wants to identify problematic
deployments, switching views should not be necessary. To address this, the AI
Assistant includes support for a Kubernetes tool. This allows asking questions
like "Get me all deployments with problems" prompting the assistant to fetch
and display relevant data from the current cluster. Likewise, if the user
requests an action like "Restart that deployment" after the AI points out what
deployment needs restarting, it can also do that. In case of "write"
operations, the AI Assistant does check with the user for permission to run them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ai-plugins">AI Plugins<a class="hash-link" aria-label="Direct link to AI Plugins" title="Direct link to AI Plugins" href="https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant#ai-plugins">​</a></h2>
<p>Although the initial version of the AI Assistant is already useful for
Kubernetes users, future iterations will expand its capabilities. Currently,
the assistant supports only the Kubernetes tool, but further integration with
Headlamp plugins is underway. Similarly, we could get richer insights for
GitOps via the Flux plugin, monitoring through Prometheus, package management
with Helm, and more.</p>
<p>And of course, as the popularity of MCP grows, we are looking into how to
integrate it as well, for a more plug-and-play fashion.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-it-out">Try it out!<a class="hash-link" aria-label="Direct link to Try it out!" title="Direct link to Try it out!" href="https://headlamp.dev/blog/2025/08/07/introducing-the-headlamp-ai-assistant#try-it-out">​</a></h2>
<p>We hope this first version of the AI Assistant helps users manage Kubernetes
clusters more effectively and assist newcomers in navigating the learning
curve. We invite you to try out this early version and give us your feedback.
The AI Assistant plugin can be installed from Headlamp's Plugin Catalog in the
desktop version, or by using the container image when deploying Headlamp.
Stay tuned for the future versions of the Headlamp AI Assistant!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Enabling Event‑Driven Autoscaling with the New KEDA Plugin for Headlamp]]></title>
            <link>https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp</link>
            <guid>https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp</guid>
            <pubDate>Fri, 25 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Enabling Event‑Driven Autoscaling with the New KEDA Plugin for Headlamp]]></description>
            <content:encoded><![CDATA[<p>KEDA (Kubernetes Event-Driven Autoscaling) allows users to scale Kubernetes
workloads based on external event sources like message queues, custom metrics,
or HTTP requests. While KEDA is widely used for autoscaling based on real-world
signals, working with KEDA resources like ScaledObjects and ScaledJobs often means
relying on kubectl and editing YAML by hand.</p>
<p>As part of a Linux Foundation (LFX) Mentorship project, we have built a Headlamp
plugin that integrates a UI for viewing and managing KEDA resources directly in
the Headlamp dashboard. The plugin was developed by <a href="https://github.com/adwait-godbole" target="_blank" rel="noopener noreferrer">Adwait Godbole</a>,
with guidance from the Headlamp team.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installing-keda-in-your-cluster">Installing KEDA in your cluster<a class="hash-link" aria-label="Direct link to Installing KEDA in your cluster" title="Direct link to Installing KEDA in your cluster" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#installing-keda-in-your-cluster">​</a></h2>
<p>Before using the plugin, make sure KEDA is installed. You can choose one of these methods:</p>
<ol>
<li>Using Headlamp’s App Catalog:
If you’re using Headlamp as a desktop app, you can install KEDA directly from the App Catalog:<!-- -->
<ol>
<li>Open the Apps Section from the sidebar</li>
<li>Search for KEDA.</li>
</ol>
</li>
</ol>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the Apps Catalog" src="https://headlamp.dev/assets/images/apps-catalog-ec4bd18fefdffb5e3000be6693cf33c0.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>Apps catalog showing the KEDA search results</figcaption><p></p></figure>
<ol start="3">
<li>Click on KEDA app</li>
</ol>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the KEDA app details" src="https://headlamp.dev/assets/images/keda-app-4aa4a50f461203015255d6dbbc5562c8.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>KEDA app details in the App Catalog</figcaption><p></p></figure>
<ol start="4">
<li>Fill in the required details like <strong>name</strong>, <strong>namespace</strong>, and <strong>version</strong>.</li>
</ol>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>To see real-time metrics for KEDA triggers in the plugin, you’ll need to configure KEDA to expose metrics to the Prometheus Operator.</p></div></div>
<p>In the YAML editor (which shows the Helm <em>values.yaml</em>), configure the following under <em>prometheus.operator.serviceMonitor</em>:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00769f">prometheus</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">operator</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">serviceMonitor</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#257c7a">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">interval</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#d71066">"10s"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">additionalLabels</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00769f">release</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> prometheus</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the YAML editor for KEDA Helm values" src="https://headlamp.dev/assets/images/keda-editing-app-3c557aa19d20fed20a62867972315d95.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>YAML editor for KEDA Helm values</figcaption><p></p></figure>
<ol start="5">
<li>
<p>Click <strong>Install</strong> to finish.</p>
</li>
<li>
<p>Using Helm directly, run the following command:</p>
</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo </span><span class="token function" style="color:#cc3745">add</span><span class="token plain"> kedacore https://kedacore.github.io/charts</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm </span><span class="token function" style="color:#cc3745">install</span><span class="token plain"> keda kedacore/keda </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">--namespace</span><span class="token plain"> keda </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --create-namespace </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">--set</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#257c7a">prometheus.operator.enabled</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">--set</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#257c7a">prometheus.operator.serviceMonitor.enabled</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">--set</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#257c7a">prometheus.operator.serviceMonitor.interval</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#d71066">"10s"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#257c7a">--set</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#257c7a">prometheus.operator.serviceMonitor.additionalLabels.release</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#d71066">"prometheus"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installing-the-keda-plugin-in-headlamp">Installing the KEDA Plugin in Headlamp<a class="hash-link" aria-label="Direct link to Installing the KEDA Plugin in Headlamp" title="Direct link to Installing the KEDA Plugin in Headlamp" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#installing-the-keda-plugin-in-headlamp">​</a></h2>
<p>Once KEDA is installed in your cluster:</p>
<ol>
<li>Go to Plugin Catalog → Catalog in the Headlamp home view sidebar.</li>
<li>Search for the KEDA plugin and click Install.</li>
</ol>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the Plugin Catalog" src="https://headlamp.dev/assets/images/plugin-catalog-db0912c8611179788eeefdf444e3be03.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>Plugin Catalog showing the KEDA plugin</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the KEDA plugin in the catalog" src="https://headlamp.dev/assets/images/keda-plugin-in-catalog-d7281782acc9e671c0b32482bcf8238f.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>KEDA plugin in the catalog</figcaption><p></p></figure>
<p>Once the plugin is installed, navigate to the Cluster where you have installed KEDA. You’ll see a new KEDA section in the sidebar, where you can view and manage your KEDA resources.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="plugin-features">Plugin features<a class="hash-link" aria-label="Direct link to Plugin features" title="Direct link to Plugin features" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#plugin-features">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="list-view-of-keda-resources">List view of KEDA resources<a class="hash-link" aria-label="Direct link to List view of KEDA resources" title="Direct link to List view of KEDA resources" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#list-view-of-keda-resources">​</a></h3>
<ul>
<li>List all KEDA resource types<!-- -->
<ul>
<li>ScaledObjects</li>
<li>ScaledJobs</li>
<li>TriggerAuthentication</li>
<li>ClusterTriggerAuthentication</li>
</ul>
</li>
<li>Supports filtering and sorting</li>
<li>Works across namespaces.</li>
</ul>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the list of KEDA ScaledObjects" src="https://headlamp.dev/assets/images/keda-scaled-objects-6e64241d2d52e1b2bc56f4b7d6455730.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>List of KEDA ScaledObjects</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing KEDA trigger automations" src="https://headlamp.dev/assets/images/keda-trigger-automations-0006fd68a32a0532321542723a77ec62.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>KEDA trigger automations and metrics</figcaption><p></p></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="details-view--yaml-editing">Details View + YAML Editing<a class="hash-link" aria-label="Direct link to Details View + YAML Editing" title="Direct link to Details View + YAML Editing" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#details-view--yaml-editing">​</a></h3>
<ul>
<li>Shows resource configuration, status, and metadata.</li>
<li>Linked references (like target workloads or secrets) are shown where applicable.
Inline YAML editor for quick updates.</li>
</ul>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing a single KEDA ScaledObject" src="https://headlamp.dev/assets/images/keda-scaled-object-single-eb42dcc0380725032d886f51f27a0ee6.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>Single KEDA ScaledObject details</figcaption><p></p></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="trigger-metrics-real-time">Trigger Metrics (Real-Time)<a class="hash-link" aria-label="Direct link to Trigger Metrics (Real-Time)" title="Direct link to Trigger Metrics (Real-Time)" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#trigger-metrics-real-time">​</a></h3>
<ul>
<li>Displays live values from KEDA triggers (e.g. queue length, HTTP request rate).</li>
<li>Shows current and max replica counts.</li>
<li>Helps understand if scaling is working as expected.</li>
</ul>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the KEDA ScaledObject chart and metrics" src="https://headlamp.dev/assets/images/keda-scaled-object-chart-e8ad8d4b5510022f1a4fd917dc2355bf.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>KEDA ScaledObject chart and real-time metrics</figcaption><p></p></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="map-view">Map View<a class="hash-link" aria-label="Direct link to Map View" title="Direct link to Map View" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#map-view">​</a></h3>
<ul>
<li>Visual representation of how KEDA resources relate to each other and to Kubernetes workloads.</li>
<li>Helps understand the connection between ScaledObjects, triggers, and their targets.</li>
</ul>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the KEDA resource map" src="https://headlamp.dev/assets/images/keda-map1-85cd2bde17e1c2ae30fa36ee37839ce9.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>KEDA resource map view</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing another KEDA resource map" src="https://headlamp.dev/assets/images/keda-map2-694bb640e8dde0552e0c030999cc579e.png" width="1380" height="862" class="img_ev3q">
</p><figcaption>Another view of KEDA resource relationships</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2025/07/25/enabling-event-driven-autoscaling-with-the-new-keda-plugin-for-headlamp#conclusion">​</a></h2>
<p>The KEDA plugin for Headlamp makes it easier to work with event-driven autoscaling by providing a visual and navigable view of KEDA resources like ScaledObjects, ScaledJobs, and trigger authentications. With support for real-time metrics, cross-linked resources, and a built-in map view, you can now understand scaling behavior and troubleshoot issues without switching between tools like Prometheus dashboards or the CLI.</p>
<p>Everything you need to inspect, edit, and monitor KEDA resources is thus available in one place.</p>
<p>If you use KEDA, we encourage you to try the plugin and share feedback or ideas via <a href="https://github.com/headlamp-k8s/plugins" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A One-click Local Experience with Headlamp Desktop]]></title>
            <link>https://headlamp.dev/blog/2025/03/28/a-one-click-local-experience-with-headlamp-desktop</link>
            <guid>https://headlamp.dev/blog/2025/03/28/a-one-click-local-experience-with-headlamp-desktop</guid>
            <pubDate>Fri, 28 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[A One-click Local Experience with Headlamp Desktop]]></description>
            <content:encoded><![CDATA[<p>Kubernetes is typically run in the cloud, providing robust orchestration for
containerized applications. However, for novice Kubernetes users and those
looking to experiment locally, projects like
<a href="https://minikube.sigs.k8s.io/" target="_blank" rel="noopener noreferrer">minikube</a> are essential. minikube
allows you to run Kubernetes on your local machine, making it easier to learn
and develop without needing a cloud environment.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-one-gets-started-with-kubernetes">How one gets started with Kubernetes<a class="hash-link" aria-label="Direct link to How one gets started with Kubernetes" title="Direct link to How one gets started with Kubernetes" href="https://headlamp.dev/blog/2025/03/28/a-one-click-local-experience-with-headlamp-desktop#how-one-gets-started-with-kubernetes">​</a></h2>
<p>For new users, the learning curve for getting started with Kubernetes can be
steep. One first needs to understand different tools such as minikube, kubectl,
and hypervisors; all together making it a bit overwhelming. In addition,
setting up a local Kubernetes environment often requires familiarity with
command-line operations, which can be a barrier for those just starting out.
How can we improve that?</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="headlamp-desktop-a-new-starting-point-for-kubernetes">Headlamp Desktop: A new starting point for Kubernetes<a class="hash-link" aria-label="Direct link to Headlamp Desktop: A new starting point for Kubernetes" title="Direct link to Headlamp Desktop: A new starting point for Kubernetes" href="https://headlamp.dev/blog/2025/03/28/a-one-click-local-experience-with-headlamp-desktop#headlamp-desktop-a-new-starting-point-for-kubernetes">​</a></h2>
<p><a href="https://headlamp.dev/" target="_blank" rel="noopener noreferrer">Headlamp</a>, aims to simplify the user experience around
Kubernetes. To take this to the logical next step,  we've created a plugin that
allows users to create a local Kubernetes environment using minikube with just
one click. This plugin eliminates the need for command-line operations, making
it accessible for everyone, regardless of their technical background.
In addition, it welcomes users into a visual, interactive Kubernetes
environment which they can explore. And using Headlamp's growing number of
plugins for CNCF and other projects in the eco-system, users can learn more
about the broader Kubernetes ecosystem.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the choices for creating or loading a cluster" src="https://headlamp.dev/assets/images/minikube-providers-b79669fb4603b012751e4f6269cfff0e.png" width="1289" height="915" class="img_ev3q">
</p><figcaption>With the minikube plugin, users can now choose to add a minikube cluster instead of having to load it from a kueconfig file</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing a few options users can choose related to how the minikube cluster is created" src="https://headlamp.dev/assets/images/minikube-start-2117d484b79807b42b497fd2d37a4903.png" width="1288" height="916" class="img_ev3q">
</p><figcaption>There are a few options users can choose related to how the minikube cluster is created</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot information on the progress of creating minikube" src="https://headlamp.dev/assets/images/minikube-success-869965825118d7272080f81f52a66c86.png" width="1288" height="915" class="img_ev3q">
</p><figcaption>While minikube is being created, this view gives information on the progress</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="managing-the-environment">Managing the environment<a class="hash-link" aria-label="Direct link to Managing the environment" title="Direct link to Managing the environment" href="https://headlamp.dev/blog/2025/03/28/a-one-click-local-experience-with-headlamp-desktop#managing-the-environment">​</a></h2>
<p>The minikube plugin not only installs and starts minikube but also provides
additional functionalities. Users can see the status of their minikube cluster
directly in the UI and have the ability to start or stop the cluster with ease.
This integration ensures that managing your local Kubernetes environment is
straightforward and intuitive.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing cluster context&amp;#39;s start/stop options for minikube" src="https://headlamp.dev/assets/images/minikube-home-actions-c31fccdd74dea14f5226423fed4b2648.png" width="1201" height="917" class="img_ev3q">
</p><figcaption>The minikube cluster context menu now shows start/stop options</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="continuing-to-improve-the-ux">Continuing to Improve the UX<a class="hash-link" aria-label="Direct link to Continuing to Improve the UX" title="Direct link to Continuing to Improve the UX" href="https://headlamp.dev/blog/2025/03/28/a-one-click-local-experience-with-headlamp-desktop#continuing-to-improve-the-ux">​</a></h2>
<p>We are committed to improving the user experience around CNCF projects and
lowering the bar for learning Kubernetes. While the minikube plugin is at an early
stage, we invite you to install it from the Plugin Catalog in Headlamp Desktop
and try it.
If you are interested in developing Headlamp plugins for other projects, check out
the <a href="http://localhost:3000/docs/latest/development/plugins/" target="_blank" rel="noopener noreferrer">docs</a> and <a href="https://headlamp.dev/docs/latest/faq#how-can-i-get-help-or-assistance-for-headlamp" target="_blank" rel="noopener noreferrer">reach out to us</a>. Your feedback and contributions are
invaluable as we strive to make Kubernetes more accessible to everyone.</p>
<p>Thank you for your support, and happy Kubernetes-ing!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[An overview of Flux UI updates]]></title>
            <link>https://headlamp.dev/blog/2025/03/26/flux-ui-updates</link>
            <guid>https://headlamp.dev/blog/2025/03/26/flux-ui-updates</guid>
            <pubDate>Wed, 26 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[An overview of Flux UI updates]]></description>
            <content:encoded><![CDATA[<p>In November 2024, we <a href="https://headlamp.dev/blog/2024/11/07/flux-ui">launched the Flux UI plugin for Headlamp</a>, bringing powerful
GitOps capabilities to Headlamp users, in an intuitive and visual way. Since then, we've received valuable feedback from the community, and we're excited to announce an updated version of the Flux plugin with several new features and improvements.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview-page">Overview page<a class="hash-link" aria-label="Direct link to Overview page" title="Direct link to Overview page" href="https://headlamp.dev/blog/2025/03/26/flux-ui-updates#overview-page">​</a></h2>
<p>A Flux user suggested we add an overview page for the Flux plugin, and we loved
the idea. This new page provides a comprehensive summary of your Flux resources,
including the version and checks related to Flux’s installation. Additionally,
it offers a graphical representation of the health of your deployments, making
it easier to manage and monitor them effectively.</p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/ss77cuwrHQM?si=FTq-r23LzKgbGbQC" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flagger-integration">Flagger Integration<a class="hash-link" aria-label="Direct link to Flagger Integration" title="Direct link to Flagger Integration" href="https://headlamp.dev/blog/2025/03/26/flux-ui-updates#flagger-integration">​</a></h2>
<p>We're thrilled to introduce Flagger integration in this update. Flagger is a
progressive delivery tool that automates the release process for applications
running on Kubernetes. With this integration, the Flux UI now supports
visualizing different update strategies.</p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/HSWOZexhfDc?si=qSpTGDD9PKEnn_ZI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-map-view-for-flux">New Map View for Flux<a class="hash-link" aria-label="Direct link to New Map View for Flux" title="Direct link to New Map View for Flux" href="https://headlamp.dev/blog/2025/03/26/flux-ui-updates#new-map-view-for-flux">​</a></h2>
<p>Another exciting addition is the new map view for Flux! We've had a map view in
Headlamp for a couple of versions now, and it’s proven to be an excellent way
to  quickly understand the cluster and its resources' relationships. This
feature offers a visual representation of your Flux resources and how they
relate to each other, providing a clearer understanding of your deployment
architecture.</p>
<p><img decoding="async" loading="lazy" alt="A screenshot of Flux resources being displayed in the Map" src="https://headlamp.dev/assets/images/flux-map-999725f7838e8b64d79d298063c4d83c.png" width="1472" height="875" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bug-fixes-and-community-contributions">Bug Fixes and Community Contributions<a class="hash-link" aria-label="Direct link to Bug Fixes and Community Contributions" title="Direct link to Bug Fixes and Community Contributions" href="https://headlamp.dev/blog/2025/03/26/flux-ui-updates#bug-fixes-and-community-contributions">​</a></h2>
<p>This update also includes several bug fixes and improvements, thanks to the
contributions from our amazing community members: Stefan Prodan, Kingdon
Barrett, Matthijs Galesloot, and George Gaal. We appreciate your guidance,
support, and dedication to making the Flux UI better.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="try-this-update">Try this update<a class="hash-link" aria-label="Direct link to Try this update" title="Direct link to Try this update" href="https://headlamp.dev/blog/2025/03/26/flux-ui-updates#try-this-update">​</a></h2>
<p>To try these new changes, just install or update the Flux UI plugin from the
Plugin Catalog, if using the desktop version of Headlamp, or update to the latest
<a href="https://github.com/headlamp-k8s/plugins/pkgs/container/headlamp-plugin-flux" target="_blank" rel="noopener noreferrer">container image</a>
if you are deploying on the web.</p>
<p>We hope you enjoy this update!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Join the Headlamp Team at KubeCon Europe 2025 in London!]]></title>
            <link>https://headlamp.dev/blog/2025/03/25/headlamp-team-at-kubecon-europe-2025</link>
            <guid>https://headlamp.dev/blog/2025/03/25/headlamp-team-at-kubecon-europe-2025</guid>
            <pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Join the Headlamp Team at KubeCon Europe 2025 in London!]]></description>
            <content:encoded><![CDATA[<p>We're thrilled to announce that the Headlamp team will be attending
<a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank" rel="noopener noreferrer">KubeCon Europe 2025</a>,
taking place from April 1-4 in London.</p>
<p>As the Cloud Native Computing Foundation's flagship conference, KubeCon is a fantastic opportunity for the Kubernetes community to come together, share knowledge, and explore the latest advancements in cloud-native technologies.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="headlamp-team-activities">Headlamp Team Activities<a class="hash-link" aria-label="Direct link to Headlamp Team Activities" title="Direct link to Headlamp Team Activities" href="https://headlamp.dev/blog/2025/03/25/headlamp-team-at-kubecon-europe-2025#headlamp-team-activities">​</a></h2>
<p>Our team has a packed schedule of activities planned for KubeCon Europe, and we can't wait to connect with the community. Here are some of the highlights:</p>
<ul>
<li><strong>Headlamp as a UI for all Kubernetes users and projects</strong>: Join us for a quick session at the wonderful Microsoft booth, where we'll provide a brief overview of Headlamp and discuss how other projects can benefit from it.<!-- -->
<ul>
<li>Microsoft Booth Theater Session</li>
<li>April 2nd, 2:30pm</li>
</ul>
</li>
<li><strong>Headlamp Kiosk at the Project Pavilion</strong>: Come join us and check out demos of Headlamp, chat with the team and take some swag home!<!-- -->
<ul>
<li>Kiosk 22B, Level 1 | Solutions Showcase | Hall Entrances N8 – N9</li>
<li>April 2nd, 10:45am – 7:45pm</li>
</ul>
</li>
<li><strong>Contribfest: Make Your Own UI for Kubernetes with Headlamp</strong>: Join us for this engaging session designed for those looking to learn how to create their own UI for Kubernetes using Headlamp. It's a great opportunity to dive into the details and get hands-on experience. We may have chocolate.<!-- -->
<ul>
<li><a href="https://sched.co/1td0n" target="_blank" rel="noopener noreferrer">Level 3, ICC Capital Suite 1</a></li>
<li>April 4th, 11:00am</li>
</ul>
</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="special-mention-microsoft-keynote">Special Mention: Microsoft Keynote<a class="hash-link" aria-label="Direct link to Special Mention: Microsoft Keynote" title="Direct link to Special Mention: Microsoft Keynote" href="https://headlamp.dev/blog/2025/03/25/headlamp-team-at-kubecon-europe-2025#special-mention-microsoft-keynote">​</a></h2>
<p>We're excited to highlight a special <a href="https://sched.co/1txBv" target="_blank" rel="noopener noreferrer">keynote</a> from Microsoft during KubeCon Europe. The keynote, titled "Evolving the Kubernetes User Experience," will be presented by Andrew Randall on Wednesday, April 2, 2025, from 09:49 to 09:54 BST at Level 0, ICC Auditorium.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="meet-the-headlamp-team">Meet the Headlamp Team<a class="hash-link" aria-label="Direct link to Meet the Headlamp Team" title="Direct link to Meet the Headlamp Team" href="https://headlamp.dev/blog/2025/03/25/headlamp-team-at-kubecon-europe-2025#meet-the-headlamp-team">​</a></h2>
<p>If you're passionate about advancing the state of UI and UX around Kubernetes, we invite you to meet us at KubeCon Europe. Whether you're a developer, designer, or just curious about Kubernetes, we'd love to hear your ideas and discuss how we can work together to make Headlamp even better.</p>
<p>Thank you for your continued support, and we look forward to seeing you in London!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Simplifying Certificate Management in Kubernetes with the new cert-manager plugin for Headlamp]]></title>
            <link>https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp</link>
            <guid>https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp</guid>
            <pubDate>Thu, 27 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Simplifying Certificate Management in Kubernetes with the new cert-manager plugin for Headlamp]]></description>
            <content:encoded><![CDATA[<p><a href="https://cert-manager.io/" target="_blank" rel="noopener noreferrer">cert-manager</a> is a popular CNCF project that automates certificate management in Kubernetes environments, handling the issuance and renewal of TLS certificates. It supports various certificate sources including Let's Encrypt, HashiCorp Vault, and self-signed certificates, making it a crucial tool for managing secure communications in Kubernetes clusters. With cert-manager, teams can automate the complex process of certificate lifecycle management, reducing the risk of service disruptions due to expired certificates.</p>
<p>To enhance the user experience of managing certificates in Kubernetes, we've developed a <a href="https://headlamp.dev/" target="_blank" rel="noopener noreferrer">Headlamp</a> plugin for cert-manager. This plugin brings certificate management directly into Headlamp, allowing developers to view and manage cert-manager resources.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installing-cert-manager-in-the-cluster">Installing cert-manager in the cluster<a class="hash-link" aria-label="Direct link to Installing cert-manager in the cluster" title="Direct link to Installing cert-manager in the cluster" href="https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp#installing-cert-manager-in-the-cluster">​</a></h2>
<p>If you don't have cert-manager installed in your cluster, you can install it in two ways:</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="using-headlamps-app-catalog">Using Headlamp's App Catalog<a class="hash-link" aria-label="Direct link to Using Headlamp's App Catalog" title="Direct link to Using Headlamp's App Catalog" href="https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp#using-headlamps-app-catalog">​</a></h3>
<p>If you're using Headlamp as a desktop app, you can install cert-manager directly from the App Catalog:</p>
<ol>
<li>Access the Apps section from the sidebar after connecting to your cluster.</li>
<li>Search for the cert-manager app.</li>
<li>Click Install.</li>
</ol>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the Apps section of Headlamp" src="https://headlamp.dev/assets/images/apps-catalog-c34fe00e51c690c900dbc051f0037482.png" width="1987" height="1054" class="img_ev3q">
</p><figcaption>Apps Catalog</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the cert-manager app in Headlamp&amp;#39;s apps catalog" src="https://headlamp.dev/assets/images/cert-manager-app-2286e5c688d7b9195836edf1cd3d46c0.png" width="1989" height="1055" class="img_ev3q">
</p><figcaption>The cert-manager app in the Apps Catalog</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the editor open for the cert-manager app in Headlamp&amp;#39;s apps catalog" src="https://headlamp.dev/assets/images/cert-manager-helm-install-2fb7a5cc3798e2c1b152820323a28818.png" width="1979" height="1050" class="img_ev3q">
</p><figcaption>Installing the cert-manager app in the Apps Catalog</figcaption><p></p></figure>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="using-helm">Using Helm<a class="hash-link" aria-label="Direct link to Using Helm" title="Direct link to Using Helm" href="https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp#using-helm">​</a></h3>
<p>Alternatively, you can install cert-manager using Helm by running these commands:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#6e6e61;font-style:italic"># Add the Jetstack Helm repository</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo </span><span class="token function" style="color:#cc3745">add</span><span class="token plain"> jetstack https://charts.jetstack.io</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#6e6e61;font-style:italic"># Update your local Helm chart repository cache</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#6e6e61;font-style:italic">## Install cert-manager with CRDs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm </span><span class="token function" style="color:#cc3745">install</span><span class="token plain"> cert-manager jetstack/cert-manager </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token parameter variable" style="color:#257c7a">--namespace</span><span class="token plain"> cert-manager </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--create-namespace </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token parameter variable" style="color:#257c7a">--set</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#257c7a">installCRDs</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installing-the-cert-manager-plugin">Installing the cert-manager plugin<a class="hash-link" aria-label="Direct link to Installing the cert-manager plugin" title="Direct link to Installing the cert-manager plugin" href="https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp#installing-the-cert-manager-plugin">​</a></h2>
<ol>
<li>In Headlamp's home screen, click on Plugin Catalog &gt; Catalog.</li>
<li>Find the cert-manager plugin and click Install.</li>
</ol>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the plugin catalog in headlamp" src="https://headlamp.dev/assets/images/plugin-catalog-511ef997fe0c24a04949a95c6a1935c8.png" width="1981" height="1051" class="img_ev3q">
</p><figcaption>Plugin Catalog in Headlamp</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the cert-manager plugin in the catalog" src="https://headlamp.dev/assets/images/cert-manager-plugin-822b57bf50847d0c84c02ba82ab6eed1.png" width="624" height="331" class="img_ev3q">
</p><figcaption>cert-manager plugin in the Plugin Catalog</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="plugin-features">Plugin features<a class="hash-link" aria-label="Direct link to Plugin features" title="Direct link to Plugin features" href="https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp#plugin-features">​</a></h2>
<p>The cert-manager plugin allows users to list and view details of resources like Certificates, Certificate Requests, Issuers, ClusterIssuers, Orders, and Challenges. The resource details view also links to corresponding Kubernetes resources like Secrets and Ingresses, making it easy to navigate between related resources.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing the certificates list in the cert-manager plugin" src="https://headlamp.dev/assets/images/cert-manager-certificates-f9029edcac9f3fa023179a5ef85f3e10.png" width="1977" height="1049" class="img_ev3q">
</p><figcaption>Certificates list in the cert-manager plugin</figcaption><p></p></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing a certificate shown in the cert-manager" src="https://headlamp.dev/assets/images/cert-manager-certificate-detail-96890c468519163dcac757dfbbfb4746.png" width="1977" height="1049" class="img_ev3q">
</p><figcaption>A certificate shown in the cert-manager plugin</figcaption><p></p></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="looking-ahead">Looking Ahead<a class="hash-link" aria-label="Direct link to Looking Ahead" title="Direct link to Looking Ahead" href="https://headlamp.dev/blog/2025/02/27/simplifying-certificate-management-in-kubernetes-with-the-new-cert-manager-plugin-for-headlamp#looking-ahead">​</a></h2>
<p>This is just the beginning! We’re continuously working on improving the cert-manager plugin based on user feedback. If you have suggestions or encounter any issues, please contribute via <a href="https://github.com/kubernetes-sigs/headlamp" target="_blank" rel="noopener noreferrer">GitHub</a> or join our <a href="https://slack.k8s.io/" target="_blank" rel="noopener noreferrer">Slack channel</a>.</p>
<p>Try the cert-manager plugin for Headlamp today and simplify your Kubernetes certificate management! 🚀</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Security focused UX changes for plugins and app catalogs]]></title>
            <link>https://headlamp.dev/blog/2025/02/13/security-focused-ux-changes-for-plugins-and-app-catalogs</link>
            <guid>https://headlamp.dev/blog/2025/02/13/security-focused-ux-changes-for-plugins-and-app-catalogs</guid>
            <pubDate>Thu, 13 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Security focused UX changes for plugins and app catalogs]]></description>
            <content:encoded><![CDATA[<p>Headlamp provides support for Helm chart installation via the <a href="https://github.com/headlamp-k8s/plugins/tree/main/app-catalog" target="_blank" rel="noopener noreferrer">App Catalog</a>
plugin, and allows to install Headlamp plugins via the <a href="https://github.com/headlamp-k8s/plugins/tree/main/plugin-catalog" target="_blank" rel="noopener noreferrer">Plugins Catalog</a> (which
is also a plugin). Both the App Catalog and Plugin Catalog in Headlamp leverage
<a href="https://artifacthub.io/" target="_blank" rel="noopener noreferrer">ArtifactHub</a> packages to provide users with trusted resources for Kubernetes
management and customization. The App Catalog enables users to find and deploy
Helm charts directly from Headlamp, while the Plugin Catalog allows users to
browse and install plugins by the Headlamp Community.</p>
<p>Security is at the core of these features with both catalogs incorporating
ArtifactHub’s badging system, including verified, official, and CNCF project
designations. These visual indicators, combined with verified publisher
filtering, give users confidence in selecting high-quality and secure Helm
charts and Headlamp plugins.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="badges">Badges<a class="hash-link" aria-label="Direct link to Badges" title="Direct link to Badges" href="https://headlamp.dev/blog/2025/02/13/security-focused-ux-changes-for-plugins-and-app-catalogs#badges">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Verified Badge" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABHCAMAAACNrMETAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJ2UExURf///8fHx6qqqvDw8Nvb262trezs7PX19T4+PgAAADk5OZKSkt/f38nJyXh4eCAgIJOTkyEhIX9/f9DQ0PPz87CwsFxcXA0NDcrKyt7e3iMjIxMTE2FhYbq6uvf39+np6TY2NgMDA1hYWPz8/G5ubkFBQY6Ojnx8fCwsLAUFBRERETExMevr60xMTJ2dnR8fH9nZ2ebm5icnJ2dnZ+rq6m9vbwkJCaOjo/b29uPj48LCwl9fXwEBATs7O21tbaGhocvLy/T09Nra2n5+flFRUSQkJAwMDCYmJoqKivj4+MHBwRgYGAQEBFBQUJ+fn9fX16mpqSUlJQ8PD0ZGRvv7++Li4hwcHEpKSv39/eXl5U1NTf7+/lpaWgsLC5aWlouLi1dXVwoKCp6enpCQkJGRkYGBgQgICJubm8TExJmZmcjIyCoqKgYGBqKiooeHhwcHB5iYmBkZGb+/v93d3b6+vhYWFpSUlMzMzD09PeTk5B4eHs3NzURERO/v787OzigoKElJSXV1dfHx8VNTU42NjdLS0qWlpWtra4yMjCsrK9bW1uDg4Pr6+mpqatPT0y8vL3FxccbGxvn5+WlpaYmJidXV1S4uLlRUVMPDwxsbGwICAqioqGhoaIaGhre3t2RkZISEhNjY2DIyMkhISIODgzMzM3l5eTQ0NLOzs2ZmZtzc3DU1Ne3t7e7u7jo6OmJiYlVVVeHh4Tw8PI+Pjzc3N1lZWXR0dFtbW+fn50BAQFJSUkNDQ0tLS7GxsTAwMBISEmxsbBQUFHt7e4WFhbu7u+jo6HZ2dry8vJycnE5OToiIiNHR0ZeXl3Nzc66urg4ODqampl1dXdFXun4AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPsSURBVFhH7dj5XxRlHAfwh3DDBwExSY1iY1WQNVGRXOIKFmUBAeVwQdE0xLRwrWgrtQgK8r5RPJAo71vRyFLTsktLK/uPemaezxw788zubD/0S71/er7X8xpezOw8u+Q/JeaJWKxUoxxPYmVb3GgaPyYBgSwxaSxNwtq2ZMqMe2o8wpSnJ0xkiYmTENv0TKq0DaXPPpfmJOT55HQXjydPQYM9U/kU48rInJaFNaVuBxpsmTQdYyYvzECLDc5sDAlkoseGmRgRmTUbTRHlzMGIUC66InlxLgbEPHkvodFafsGYwqwiDFjwFL9cUpqDARNvmWPe/HIPeiPwVRRWpuVXYVRnQXo1WuyqmVVrvqaFKEbDtwjDmjqUolFvvprEBtSi0LgYwxp/E2pRaF6CYc3Sf7BNyzIMa2K1xzichuWvYMWIbugwj6PGV0JWuLGmdCVG9V5FLZzWVayxTd1nNZ8M8RpqYayZKXdmtiJeK4ehVqBmzcN3ISSXx2teR6yHmjXPG+hsX8cTgfVI6LxZw2uW3nobne34uKe04x2kVAvx0W8poOySWI8MkxVEEt59DwUr7vfRuaECGdnGTUjLYj5A2kogGZ0fhuxCaedHKDD+SHewW9mlqxsZVa76eM74GCkrLuU+G4//kd4nqPWY7t91vVhwrk/RuVmwC6XJ/DnfglCV2rVsK5aSmm1yG9tlOzKhpu+Qqzs7EUNqOyG7diNg11IpdxGyZy8yBvtSeD2o3k+Siv1Sru8AQnpQ7iGk/xASBod3oYEcOYoUM3CM56oGefgZD8kii2vJWIoGZkh5ZiktysaZoe9zFg18wQNy/AQvGx0KOZG1ISs5qdvnFF+S2adRNOhYgAY4pXvjKtfjPKP8RWVnUTLwnUOD6jwqkmzDifPCRRQMasyHnUuNqElaLiMrC6YjbeCahgY9+eypqNU9ccF4JI1aS9GhtxJFrlfdJ+EKUiZFeWjRu4oiDOOQ7i9GQqCNt4SoRU0x7JWy164jFPlSHgzhHUFN9RV7VvyjEQjdwKxOjvkd/rXzm5tYit3CrI7oRNF7GwsL35pPFDsifagLNJu/QdwZQC0Kdy9hWLMepWh8V4ZhjUN3brFrjuFtx3hjSr6Pv4d6ZIGmxh8c/eaznySu3/Fjb7l2DLLQ0F24+qegeAvVz2kZaLcwd4O9b66lYc+2nYIjvtgvmBDx3UdTZJtMb2rNVvTY8QAzZtX9aLHDqTsc3Pt1YwBL5jd02FMgfXmXpN54SOKGDivfhEei/HmBv8OvPPLzsOt3+ajm/oOHtu0cS/+8VdeDiMnfxj6Tl0f3owDzYPAIVgrv479Er4L//RsI+RuOD+rSXe8ZqAAAAABJRU5ErkJggg==" width="70" height="71" class="img_ev3q"></p>
<p><strong>Verified Badge:</strong> This checkmark indicates that the repository publisher owns
or has control over the repository associated with this package (Helm chart or
Plugin).</p>
<p><img decoding="async" loading="lazy" alt="Official Badge" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAABGCAMAAACpMnmIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJzUExURf////Ly8uPj483Nza6urqqqqqurq6ysrLGxsbu7u9ra2ubm5vb29vX19cTExIGBgVhYWDk5OSAgIBAQEAAAAAICAhkZGSMjIzw8PG5ubqWlpdvb2/7+/sjIyIKCgjo6OgoKChoaGlNTU5ycnN3d3fz8/La2tlJSUh0dHXd3d9nZ2b+/v1FRUQYGBnZ2duDg4O/v7319fQ4ODiIiIqSkpMbGxgMDA+7u7piYmBcXF0BAQNbW1o2NjSwsLNDQ0IuLiwUFBRwcHA8PDygoKNHR0QQEBAgICLm5uWxsbNPT06ampr6+vjMzM+rq6hsbG5qamvn5+UZGRmpqau3t7Tc3NyEhIeXl5Z6ennx8fOfn5xISEnh4eGhoaFdXV8HBwWBgYP39/WJiYjs7O7CwsAkJCcPDw5KSkvT09D09PXFxcZWVlSQkJJ2dnU5OTnJycrOzs9TU1BUVFQwMDDY2NomJiSYmJgsLCwEBAXNzczU1NU9PT3V1dXp6en5+fpaWlsnJyfDw8Pr6+unp6b29vaioqICAgHl5eVlZWT8/P/j4+NfX1/f391xcXG1tbUVFRRMTE4SEhCUlJbq6uhQUFE1NTYODg1tbW7y8vHR0dOjo6ExMTN/f3yoqKpCQkF9fXx4eHuHh4Z+fn/v7+ycnJ8/Pz1VVVS4uLq+vr1ZWVhgYGMXFxUJCQuTk5MDAwEdHRy0tLS8vL0hISDExMcfHx1RUVIaGhpubm/Pz8xEREampqUNDQ2dnZ8rKyqKiogcHB4qKiikpKWNjY87OzqGhod7e3jAwMNzc3JeXl+zs7BYWFtXV1ZOTkx8fH2lpaVBQUDQ0NEFBQYR1BcUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQKSURBVFhH7df5XxR1HMfxUVc3WFBXB1gMxCMqJUoqiRAC5BLUNA1sRYqKotgkFA3Q9Vg7FM9q7bRS0zK1ouyw+74v+pOa4zW73+8cu/BbP/j8ab6f9+f7fcDOzHdmlCv+DyZNnuKbOs1/VUZmIIvShGVPnzEzOGu2qsvJzQvlz7maZAIKCucWzTOWEMxfsPAa8vEpvvY6xyKm6xctpmccSm4oZZqL3Btvoi2NJWU3M8XDLbfSmdLSItq9leffRrO3ittpTqlyGe1eqnLoTKP6Dia4q6mlT1S3nANRfQNT3NQ00iVqal7BkaS+hUlOreX0SELKSre/Ul21mml2S++kQ7ZGWXsXh7J1zLNZfze5rK1dUTZwLGvcwExZGbHNPVoUzmMgq3O721o2kspmG+elg5HNpgJjqmQTmU2n0bo4l6Gs6V5jqmil+w1e6zPj+xjbdHaZcdL9JDYPsA0+6H6ddz9kxgmZHrfVw+Q9j1CweZTc0kvdJhImVx6jYlO9ntxUvJm6TR+5orTPoiSrfZzc1L+FumBrJDLQT67Ztj3viUHnrzREbGqlqjbVDQeDO3ZGd+1u3hMI7yXWxfYFppQ8+dTTz3TsDxUF2waZcGCE3LCIqho6OJJ1iKKn2EhBr7UzLJc2osNU1e4j4t/gKaONflVtpqTLrqSoORqgmMLUYzRrKqjpAuJ9WFRI1UvXs+K130FVF3iOoiH3ecrusvvoM+2krJPXUeO7qbtpP04XxBNvW0dVX4iROLQcoMUirhO2r6O+6HHaXkqeKLxMontlO8WkV0+QSfzO21lcZ9IARcFrLs+V17sJBTPIDDMpiuQ70PAGkWgamcHlSXfyFJlgIZmgdDqZ4TRVwdE3yQR7nJvvmcQOpTvrfIRHiUSrzxAmvSXt0HvfppyQc45I8g5pUhUJhignnM8kkVSRJmw8S4ILTQSWi8n9qeFdDhTlPfuL4/u2XzErRGBJXO7hsvioz3puhiPEltMECWsILDTE5nygDXI62fViH5qpJeLYrJZcIjKxXX70Mfvwsbnm284uc2j5xChKPiUyDVzWSieinzHUXPpc7/IxMtVr7zR2PV8QGr7U/ocK24+x4CtFWRZnYPiauZKSb0h1rUrGDg6TtkQnKxc51lX2MFX2LbGmvKbD5dZW1e/833Okmf8DE22Kk1froNcHRmnybavxR+Y5/FRNy7jIT2RJ/wQWOuK5hWsaRulKKz/VMtp5/Zm+NIbWMsHLL9YVnEq81/Fe6FDw63m6PQUv0Jtaw2HX7wzLyW2/0ZiWX7xqZfF1B2kaj0O+zb8zUVLdl/r7zcUffx7/i9mmraN/n/P6VEqp65Q/+s/w8PDY2Niqf1f0FsqvuBOUfdmQ+qq7IjVF+Q+tAEFob2QaXwAAAABJRU5ErkJggg==" width="71" height="70" class="img_ev3q"></p>
<p><strong>Official Badge:</strong> Marked by a star, this badge signifies that the publisher owns
the <em>software</em> or <em>project</em> that the package primarily focuses on.</p>
<p><img decoding="async" loading="lazy" alt="CNCF Badge" src="https://headlamp.dev/assets/images/cncf-badge-029bda5d04e76b5951c6942e4f5db4f7.png" width="72" height="72" class="img_ev3q"></p>
<p><strong>CNCF Badge:</strong> The Cloud Native Computing Foundation Badge, signifies that the
Helm chart or plugin is associated with a project under the CNCF.</p>
<p>Here is an example of a Helm chart displayed with all three badges in the App
Catalog:</p>
<p><img decoding="async" loading="lazy" alt="App Catalog Helm screenshot" src="https://headlamp.dev/assets/images/headlamp-helm-01390caed8f932ec5d9c2b3579dd0be9.png" width="388" height="423" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="other-ui-changes">Other UI Changes<a class="hash-link" aria-label="Direct link to Other UI Changes" title="Direct link to Other UI Changes" href="https://headlamp.dev/blog/2025/02/13/security-focused-ux-changes-for-plugins-and-app-catalogs#other-ui-changes">​</a></h2>
<p>Additionally, with the introduction of these badges we provide users with the
option to filter results in both plugins via a switch. In the case of the App
Catalog the switch shows whether only verified plugins are shown, while in the
case of the Plugin Catalog there are two switches, for controlling showing not
only verified but also official plugins.</p>
<p>It is vital that users install only plugins they trust, so this switch is on by
default in both cases, meaning that only verified + official plugins or
plugins developed by Headlamp’s core developers are shown. While this limits
the results and options for the user, it also improves the confidence in the
results being shown, reducing the possibilities of installing undesired
packages. And of course, users can always choose to show everything by going to
the settings view of each plugin.</p>
<p><img decoding="async" loading="lazy" alt="Plugin Catalog settings" src="https://headlamp.dev/assets/images/plugin-catalog-settings-2ea974a2e3e23427f96966f00d57cbd7.png" width="878" height="263" class="img_ev3q"></p>
<p>These switches are located in the settings view for each plugin. You can access
it by going to Settings &gt; Plugins (in the home view) and then clicking the
respective plugin name. In the case of the Plugin Catalog, we have also added
the same switch to the actual catalog's page, since there are plugins that
cannot get the official badge (because they are done by a 3rd party, see for
example the KubeEscape plugin) but which users may still trust and wish to
install. To help users understand this decision, when the official switch is
turned off for the Plugin Catalog, a dialog is shown explaining that the users
should make sure they trust the plugins:</p>
<p><img decoding="async" loading="lazy" alt="Warning dialog saying &amp;quot;Do you want to show non-official plugins? Important: Non-official plugins may not be published by the actual projects they are related to, nor by Headlamp&amp;#39;s maintainers. Are you sure you want to show them?&amp;quot;" src="https://headlamp.dev/assets/images/warning-a945d1d722f5d16f59a0879a67799ac4.png" width="605" height="214" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2025/02/13/security-focused-ux-changes-for-plugins-and-app-catalogs#conclusion">​</a></h2>
<p>These additions not only reduce risks but also speed up the selection process.
By putting key details front and center, these updates make navigation easier
and enhance security.</p>
<p>We’d love for you to explore these updates! If you have ideas for other small
changes that could improve clarity or security, we’re eager to hear your
feedback and contributions.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Making sense of Kubernetes with Headlamp's Map view]]></title>
            <link>https://headlamp.dev/blog/2025/01/17/making-sense-of-kubernetes-with-headlamps-map-view</link>
            <guid>https://headlamp.dev/blog/2025/01/17/making-sense-of-kubernetes-with-headlamps-map-view</guid>
            <pubDate>Fri, 17 Jan 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Introducing Map View feature to Headlamp]]></description>
            <content:encoded><![CDATA[<p>In version 0.26, Headlamp introduced a new feature: the Map View. A graphical way to see pods, services, and deployments interacting in Kubernetes clusters. Making it easier to understand dependencies, troubleshoot issues, and optimize Kubernetes clusters.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="about">About<a class="hash-link" aria-label="Direct link to About" title="Direct link to About" href="https://headlamp.dev/blog/2025/01/17/making-sense-of-kubernetes-with-headlamps-map-view#about">​</a></h2>
<p><video controls="" width="100%"><source src="/assets/medias/map-demo-2b9b0a27c01a0e3f636ff2599c7dcb69.mp4" type="video/mp4"></video></p>
<p>Instead of working with tables or YAML files, you can now visually explore the connections between the Kubernetes resources. For example, you can see which pods are linked to which services or how deployments relate to replica sets. This makes it much simpler to understand your cluster’s structure.</p>
<p>When troubleshooting, the Map View is especially useful. If a pod fails, you can find which services or deployments depend on it, helping you identify the cause of the issue.</p>
<p><video controls="" width="100%"><source src="/assets/medias/identify-problems-1065c00da1ce0233736766fe2bf5b5c4.mp4" type="video/mp4"></video></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="examples">Examples<a class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples" href="https://headlamp.dev/blog/2025/01/17/making-sense-of-kubernetes-with-headlamps-map-view#examples">​</a></h2>
<p>In addition to the demo videos, here are some screenshots highlighting Map features.</p>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing a graph representation of Grafana deployment" src="https://headlamp.dev/assets/images/grafana-0aeed66e7eadac418ddeb1ec47195e5a.png" width="894" height="577" class="img_ev3q"></p><figcaption>Prometheus Grafana Deployment</figcaption></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot hovering over Pod node showing additional details like container names and IP address" src="https://headlamp.dev/assets/images/grafana-glance-47a166380c39cbc9627f2d5c105911ec.png" width="997" height="576" class="img_ev3q"></p><figcaption>Hover over a resource to see more information.</figcaption></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot showing a list of different kinds of resource types like Workloads, Storage, Network, Security and Configuration" src="https://headlamp.dev/assets/images/picker-2243f390291459101ac97ac61bd250ec.png" width="1710" height="687" class="img_ev3q"></p><figcaption>Select which resources to display</figcaption></figure>
<figure style="margin:0 0 2rem 0"><p><img decoding="async" loading="lazy" alt="Screenshot of a group of nodes outlined by a border with a label namespace: store" src="https://headlamp.dev/assets/images/namespace-group-c6190c6e6a1ba751a4b2b03d2dcb2d5c.png" width="798" height="414" class="img_ev3q"></p><figcaption>View all resources in a namespace</figcaption></figure>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2025/01/17/making-sense-of-kubernetes-with-headlamps-map-view#conclusion">​</a></h2>
<p>The Map View offers an intuitive way to explore and manage Kubernetes clusters.
By visually representing components and their interactions, it simplifies troubleshooting and helps optimize your setup. Whether you're experienced or new to Kubernetes, it’s a helpful tool to better understand your cluster.
In the future we're planning on providing APIs for plugins, allowing you to extend the Map View with extra details. If you have ideas or suggestions of what you'd like to see added to the Map <a href="https://github.com/kubernetes-sigs/headlamp/issues/new/choose" target="_blank" rel="noopener noreferrer">open a feature request on GitHub</a> or <a href="https://kubernetes.slack.com/messages/headlamp" target="_blank" rel="noopener noreferrer">message us on Slack</a>.
<a href="https://headlamp.dev/docs/latest/installation/">Try out Headlamp with Map view now.</a></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Enhancing the Security in Headlamp's Helm Chart]]></title>
            <link>https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart</link>
            <guid>https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart</guid>
            <pubDate>Fri, 20 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Enhancing the Security in Headlamp's Helm Chart]]></description>
            <content:encoded><![CDATA[<p>A crucial part of Headlamp's deployment process is its Helm chart, which simplifies the installation and configuration of Headlamp in Kubernetes environments. In the ever-evolving landscape of Kubernetes, security remains a top priority. Recognizing this, we have enhanced the security features of Headlamp's Helm chart.</p>
<p>In this post, we will explore the recent security improvements we have implemented, including the addition of a value schema, signing of Helm charts, and verified and official publisher status in <a href="https://artifacthub.io/packages/helm/headlamp/headlamp" target="_blank" rel="noopener noreferrer">ArtifactHub</a>. These enhancements not only increase the security of Headlamp deployments but also align with best practices in the Kubernetes ecosystem.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-the-current-security-landscape">Understanding the Current Security Landscape<a class="hash-link" aria-label="Direct link to Understanding the Current Security Landscape" title="Direct link to Understanding the Current Security Landscape" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#understanding-the-current-security-landscape">​</a></h2>
<p>Before diving into our specific enhancements, it is important to understand the broader security concerns in Kubernetes and how they relate to Helm charts.</p>
<p>Kubernetes environments face various security challenges, including:</p>
<ul>
<li>Unauthorized access to clusters and resources.</li>
<li>Misconfigured RBAC policies.</li>
<li>Exposed sensitive information in ConfigMaps or Secrets.</li>
<li>Container vulnerabilities and outdated images.</li>
<li>Network policy misconfigurations.</li>
</ul>
<p>When it comes to Helm charts, additional security considerations come into play:</p>
<ul>
<li>Integrity of chart sources.</li>
<li>Validation of chart values.</li>
<li>Proper handling of sensitive data.</li>
<li>Version control and update management.</li>
</ul>
<p>These challenges highlight the necessity for strong security measures in Kubernetes setups, particularly when using Helm for application management.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-security-enhancements">Key Security Enhancements<a class="hash-link" aria-label="Direct link to Key Security Enhancements" title="Direct link to Key Security Enhancements" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#key-security-enhancements">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="value-schema-addition">Value Schema Addition<a class="hash-link" aria-label="Direct link to Value Schema Addition" title="Direct link to Value Schema Addition" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#value-schema-addition">​</a></h3>
<p>One of the significant improvements we have made is the addition of a value schema to Headlamp's Helm chart. This enhancement provides several benefits:</p>
<ul>
<li>Improved validation of user-supplied values.</li>
<li>Clear documentation of available configuration options.</li>
<li>Reduced risk of misconfigurations due to typos or incorrect value types.</li>
</ul>
<p>Using a value schema has simplified user understanding and correct configuration of Headlamp, lowering the risk of security issues from misconfiguration.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="signing-of-helm-charts">Signing of Helm Charts<a class="hash-link" aria-label="Direct link to Signing of Helm Charts" title="Direct link to Signing of Helm Charts" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#signing-of-helm-charts">​</a></h3>
<p>To ensure the integrity and authenticity of Headlamp's Helm chart, we have implemented chart signing. This process involves:</p>
<ul>
<li>Cryptographically signing the chart package using <strong>gpg</strong> keys.</li>
<li>Enabling verification of the chart's origin and integrity using gpg fingerprint.</li>
</ul>
<p>The benefits of this enhancement include:</p>
<ul>
<li>Assurance that the chart has not been tampered with.</li>
<li>Verification of the chart's source.</li>
</ul>
<p>Compliance with security best practices for software distribution.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="verified--official-status-on-artifacthub">Verified + Official Status on ArtifactHub<a class="hash-link" aria-label="Direct link to Verified + Official Status on ArtifactHub" title="Direct link to Verified + Official Status on ArtifactHub" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#verified--official-status-on-artifacthub">​</a></h3>
<p>Headlamp has verified and official publisher status for its Helm chart on ArtifactHub, which adds an extra layer of trust for users. This status brings several advantages:</p>
<ul>
<li>Increased trust in the Headlamp chart.</li>
<li>Easier discovery of Headlamp in Helm repositories.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-guide">Implementation Guide<a class="hash-link" aria-label="Direct link to Implementation Guide" title="Direct link to Implementation Guide" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#implementation-guide">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="value-schema-addition-in-headlamps-helm-chart">Value Schema Addition in Headlamp's Helm Chart<a class="hash-link" aria-label="Direct link to Value Schema Addition in Headlamp's Helm Chart" title="Direct link to Value Schema Addition in Headlamp's Helm Chart" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#value-schema-addition-in-headlamps-helm-chart">​</a></h3>
<ol>
<li><strong>Schema Structure:</strong> The <em>values.schema.json</em> file uses JSON Schema syntax to define the structure of the values. It typically includes:
<ul>
<li><strong>$schema:</strong> Specifies the JSON Schema version being used</li>
<li><strong>type:</strong> Usually set to "object" for the root level</li>
<li><strong>properties:</strong> Defines the individual configurable values</li>
</ul>
</li>
<li><strong>Data Types:</strong> Each property in the schema is assigned a specific data type, such as:
<ul>
<li>string</li>
<li>number</li>
<li>boolean</li>
<li>array</li>
<li>object</li>
</ul>
</li>
<li><strong>Validation Rules:</strong> The schema can include various validation rules, such as:
<ul>
<li>required: Specifies which properties are mandatory</li>
<li>minimum and maximum: For numeric values</li>
<li>minLength and maxLength: For string values</li>
<li>pattern: Regex patterns for string validation</li>
<li>enum: List of allowed values</li>
</ul>
</li>
<li><strong>Default Values:</strong> While default values are typically defined in <em>values.yaml</em>, the schema can include a default field for each property to document the default value.</li>
<li><strong>Descriptions:</strong> Each property can include a description field, providing documentation directly in the schema.</li>
<li><strong>Nested Structures:</strong> For complex configurations, the schema can define nested objects and arrays, mirroring the structure of the values.yaml file.</li>
</ol>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="integration-with-helm">Integration with Helm<a class="hash-link" aria-label="Direct link to Integration with Helm" title="Direct link to Integration with Helm" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#integration-with-helm">​</a></h4>
<ol>
<li><strong>Placement:</strong> The <em>values.schema.json</em> file is placed in the root directory of the Helm chart.</li>
<li><strong>Helm Validation:</strong> Helm automatically uses this schema to validate values during helm install, helm upgrade, and helm template operations.</li>
<li><strong>CI/CD Integration:</strong> The schema can be used in CI/CD pipelines to validate values before deployment.</li>
</ol>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-in-practice">Benefits in Practice<a class="hash-link" aria-label="Direct link to Benefits in Practice" title="Direct link to Benefits in Practice" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#benefits-in-practice">​</a></h4>
<ol>
<li><strong>Error Prevention:</strong> Helm will throw an error if provided values do not conform to the schema, preventing misconfigurations from being applied to the cluster.</li>
<li><strong>IDE Support:</strong> Many IDEs can use the schema to provide auto-completion and inline documentation when editing values.yaml files.</li>
<li><strong>Documentation:</strong> The schema serves as a form of self-documentation, clearly defining what can be configured and how.</li>
<li><strong>Versioning:</strong> As the Helm chart evolves, the schema can be versioned alongside it, clearly indicating changes in configuration options.</li>
</ol>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-and-considerations">Challenges and Considerations<a class="hash-link" aria-label="Direct link to Challenges and Considerations" title="Direct link to Challenges and Considerations" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#challenges-and-considerations">​</a></h4>
<ol>
<li><strong>Maintenance:</strong> The schema needs to be kept in sync with the actual chart templates and default values.</li>
<li><strong>Complexity:</strong> For charts with many configurable options, the schema can become quite large and complex.</li>
<li><strong>Backward Compatibility:</strong> Changes to the schema need to be managed carefully to maintain backward compatibility or to clearly communicate breaking changes.</li>
</ol>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-structure">Example Structure<a class="hash-link" aria-label="Direct link to Example Structure" title="Direct link to Example Structure" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#example-structure">​</a></h4>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "$schema": "http://json-schema.org/draft-07/schema#",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "type": "object",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  "properties": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "replicaCount": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "type": "integer",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "description": "Number of replicas to deploy",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "minimum": 1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    "image": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "type": "object",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "title": "Image",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "description": "Image to deploy",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      "properties": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "registry": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "type": "string",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "description": "Registry of the image"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "repository": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "type": "string",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "description": "Repository of the image"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "pullPolicy": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "type": "string",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "description": "Pull policy of the image",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "enum": ["Always", "IfNotPresent", "Never"]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        },</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "tag": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "type": "string",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          "description": "Tag of the image"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="signing-of-helm-charts-using-gpg-keys">Signing of Helm charts using gpg keys<a class="hash-link" aria-label="Direct link to Signing of Helm charts using gpg keys" title="Direct link to Signing of Helm charts using gpg keys" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#signing-of-helm-charts-using-gpg-keys">​</a></h3>
<p>Signing Helm charts ensures the integrity and authenticity of the chart package. Headlamp uses GPG (GNU Privacy Guard) for signing, integrated into the GitHub Actions workflow for automated signing during the release process.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-components">Key Components<a class="hash-link" aria-label="Direct link to Key Components" title="Direct link to Key Components" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#key-components">​</a></h4>
<ul>
<li><strong>GPG Key:</strong> A GPG key pair (public and private) used for signing.</li>
<li><strong>GitHub Secrets:</strong> Storing sensitive information like GPG keys and passphrases.</li>
<li><strong>chart-releaser-action:</strong> A GitHub Action for releasing Helm charts.</li>
<li><strong>Chart.yaml:</strong> Helm chart metadata file, including signing information.</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-components-1">Key Components<a class="hash-link" aria-label="Direct link to Key Components" title="Direct link to Key Components" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#key-components-1">​</a></h4>
<ol>
<li>GPG Key Preparation</li>
</ol>
<p>The workflow prepares the GPG key for signing:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00769f">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Prepare GPG key</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">run</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token scalar string" style="color:#d71066"></span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#d71066">    gpg_dir=.cr-gpg</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#d71066">    mkdir "$gpg_dir"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#6e6e61;font-style:italic"># referring keyring to private key of gpg</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    keyring="$gpg_dir/secring.gpg"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#6e6e61;font-style:italic"># storing base64 GPG key into keyring</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    base64 </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">d &lt;&lt;&lt; "$GPG_KEYRING_BASE64" </span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"> "$keyring"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    passphrase_file="$gpg_dir/passphrase"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#6e6e61;font-style:italic"># storing passphrase data into a file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    echo "$GPG_PASSPHRASE" </span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"> "$passphrase_file"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#6e6e61;font-style:italic"># saving passphrase into github-environment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    echo "CR_PASSPHRASE_FILE=$passphrase_file" </span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"> "$GITHUB_ENV"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#6e6e61;font-style:italic"># saving private key into github-environemnt</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    echo "CR_KEYRING=$keyring" </span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"> "$GITHUB_ENV"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">env</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">GPG_KEYRING_BASE64</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#d71066">"${{ secrets.GPG_KEYRING_BASE64 }}"</span><span class="token plain"> </span><span class="token comment" style="color:#6e6e61;font-style:italic">#Referring secrets of github above</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">GPG_PASSPHRASE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#d71066">"${{ secrets.GPG_PASSPHRASE }}"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><em>Key points:</em></p>
<ul>
<li>The GPG private key is stored as a base64-encoded secret in GitHub.</li>
<li>The key is decoded and stored in a temporary file.</li>
<li>The passphrase is stored in a separate file.</li>
<li>Environment variables are set for the chart-releaser action.</li>
</ul>
<ol start="2">
<li>Chart Signing with chart-releaser-action</li>
</ol>
<p>The chart-releaser-action is used to sign and release the chart:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00769f">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Run chart</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">releaser</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> helm/chart</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">releaser</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">action@a917fd15b20e8b64b94d9158ad54cd6345335584 </span><span class="token comment" style="color:#6e6e61;font-style:italic"># v1.6.0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">env</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">CR_TOKEN</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#d71066">"${{ github.token }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">CR_KEY</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#d71066">"${{ secrets.GPG_SIGNING_KEY_NAME }}"</span><span class="token plain"> </span><span class="token comment" style="color:#6e6e61;font-style:italic"># Name used while creating key</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">CR_SIGN</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#257c7a">true</span><span class="token plain"> </span><span class="token comment" style="color:#6e6e61;font-style:italic"># set to true to sign images</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">with</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">config</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> .github/cr.yaml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00769f">mark_as_latest</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#257c7a">false</span><span class="token plain"> </span><span class="token comment" style="color:#6e6e61;font-style:italic"># only headlamp is set to latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Key points:</strong></p>
<ul>
<li><strong>CR_SIGN:</strong> true enables chart signing.</li>
<li><strong>CR_KEY</strong> specifies the name of the GPG key to use for signing.</li>
<li>The action uses the prepared GPG key and passphrase for signing.</li>
</ul>
<ol start="3">
<li>Chart.yaml Configuration</li>
</ol>
<p>The <em>Chart.yaml</em> file includes metadata about the signing key:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00769f">annotations</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">artifacthub.io/signKey</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token scalar string" style="color:#d71066"></span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#d71066">    fingerprint: 2956B7F7167769370C93730C7264DA7B85D08A37</span><br></span><span class="token-line" style="color:#393A34"><span class="token scalar string" style="color:#d71066">    url: https://keys.openpgp.org/vks/v1/by-fingerprint/2956B7F7167769370C93730C7264DA7B85D08A37</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Key points:</strong></p>
<ul>
<li>The fingerprint is the unique identifier of the GPG key used for signing.</li>
<li>The URL points to a public key server where the public key can be retrieved.</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="technical-details">Technical Details<a class="hash-link" aria-label="Direct link to Technical Details" title="Direct link to Technical Details" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#technical-details">​</a></h4>
<ul>
<li>
<p><strong>GPG Key Generation:</strong></p>
<ul>
<li>A GPG key pair is generated offline.</li>
<li>The public key is uploaded to a public key server (in this case, keys.openpgp.org).</li>
<li>The private key is base64 encoded and stored as a GitHub secret.</li>
</ul>
</li>
<li>
<p><strong>GitHub Secrets Configuration:</strong></p>
<ul>
<li>GPG_KEYRING_BASE64: The base64-encoded private GPG key.</li>
<li>GPG_PASSPHRASE: The passphrase for the GPG key.</li>
<li>GPG_SIGNING_KEY_NAME: The name associated with the GPG key.</li>
</ul>
</li>
<li>
<p><strong>Workflow Execution:</strong></p>
<ul>
<li>The workflow decodes the GPG key and sets up the environment.</li>
<li>chart-releaser-action uses this environment to sign the chart during the release process.</li>
</ul>
</li>
<li>
<p><strong>Signing Process:</strong></p>
<ul>
<li>The chart package (.tgz file) is signed, creating a .prov file.</li>
<li>The .prov file contains a PGP signature that can be used to verify the chart's integrity.</li>
</ul>
</li>
<li>
<p><strong>Verification:</strong></p>
<ul>
<li>Users can verify the chart using the public key available at the URL specified in Chart.yaml.</li>
<li>Verification can be done using helm verify command or by manually checking the PGP signature.</li>
</ul>
</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="security-considerations">Security Considerations<a class="hash-link" aria-label="Direct link to Security Considerations" title="Direct link to Security Considerations" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#security-considerations">​</a></h4>
<ol>
<li><strong>Key Management:</strong> Secure storage and rotation of GPG keys are crucial.</li>
<li><strong>GitHub Secrets:</strong> Access to GitHub secrets should be strictly controlled.</li>
<li><strong>Public Key Distribution:</strong> Ensure the public key is readily available for users to verify charts.</li>
</ol>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="benefits">Benefits<a class="hash-link" aria-label="Direct link to Benefits" title="Direct link to Benefits" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#benefits">​</a></h4>
<ol>
<li><strong>Integrity:</strong> Detects any tampering with the chart package.</li>
<li><strong>Authenticity:</strong> Verifies that the chart comes from a trusted source.</li>
<li><strong>Trust:</strong> Builds confidence in the Headlamp Helm chart among users.</li>
</ol>
<p>By implementing this signing process, Headlamp ensures that its Helm charts are verifiably authentic and untampered, enhancing security and trust in the Kubernetes community.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="artifacthub-verified--official-publisher-status">ArtifactHub Verified + Official Publisher Status<a class="hash-link" aria-label="Direct link to ArtifactHub Verified + Official Publisher Status" title="Direct link to ArtifactHub Verified + Official Publisher Status" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#artifacthub-verified--official-publisher-status">​</a></h3>
<p><img decoding="async" loading="lazy" alt="Screenshot of Headlamp&amp;#39;s Helm Chart in ArtifactHub" src="https://headlamp.dev/assets/images/artifacthub-35360c7447ebdfce1f4a2e2c976e6806.png" width="936" height="514" class="img_ev3q"></p>
<p>The Verified and Official Publisher status on ArtifactHub is a way to certify the authenticity and ownership of packages, including Helm charts. This status is represented by a blue badge on the ArtifactHub interface, indicating that the publisher has gone through a verification process.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-components-2">Key Components<a class="hash-link" aria-label="Direct link to Key Components" title="Direct link to Key Components" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#key-components-2">​</a></h4>
<ul>
<li><strong>artifacthub-repo.yml:</strong> This needs to have information about your</li>
<li><strong>Chart.yaml</strong> file with comprehensive metadata including maintainer information</li>
<li><strong>Repository indexed:</strong> To ensure optimal discoverability and integration, we implemented robust repository indexing practices.</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="process-details">Process Details<a class="hash-link" aria-label="Direct link to Process Details" title="Direct link to Process Details" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#process-details">​</a></h4>
<ol>
<li>Metadata Configuration:</li>
</ol>
<p>Create a <em>artifacthub-repo.yml</em> file in your Helm chart repository. For example, the Headlamp repository yaml is located at the gh-pages branch.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00769f">repositoryID</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> de353ebb</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">8d3f</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">4717</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">9813</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">b3ec4621a93b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00769f">owners</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00769f">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> OWNER_NAME</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00769f">email</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> OWNER_EMAIL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="2">
<li>Chart Metadata</li>
</ol>
<p>Ensure that your <em>Chart.yaml</em> file includes the accurate metadata.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00769f">maintainers</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00769f">name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;maintainer</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">name</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token key atrule" style="color:#00769f">email</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;maintainer</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">email</span><span class="token punctuation" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="3">
<li>Repository Indexing</li>
</ol>
<p>Ensure your Helm repository is properly indexed. You need to run command <code>helm repo index .</code> to properly index it.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-of-verified--official-publisher-status">Benefits of Verified + Official Publisher Status<a class="hash-link" aria-label="Direct link to Benefits of Verified + Official Publisher Status" title="Direct link to Benefits of Verified + Official Publisher Status" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#benefits-of-verified--official-publisher-status">​</a></h4>
<ul>
<li><strong>Enhanced Visibility:</strong> Verified and official Helm charts appear higher in search results.</li>
<li><strong>User Trust:</strong> The badge signals reliability and authenticity to users.</li>
<li><strong>Community Standing:</strong> Demonstrates commitment to quality in the Kubernetes ecosystem.</li>
<li><strong>Security Assurance:</strong> Implies regular security audits and best practices.</li>
</ul>
<p>By maintaining Verified and Official Publisher status, Headlamp demonstrates its commitment to providing secure, reliable, and well-maintained Helm charts to the Kubernetes community.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="impact-and-benefits">Impact and Benefits<a class="hash-link" aria-label="Direct link to Impact and Benefits" title="Direct link to Impact and Benefits" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#impact-and-benefits">​</a></h3>
<p>These security enhancements significantly improve Headlamp's overall security posture:</p>
<ul>
<li>Reduced risk of misconfigurations and associated vulnerabilities.</li>
<li>Increased confidence in the integrity of Headlamp deployments.</li>
<li>Better alignment with industry security standards and best practices.</li>
<li>From a user experience perspective, these improvements offer:</li>
<li>Clearer configuration options and validation.</li>
<li>Increased trust in Headlamp as a secure Kubernetes UI solution.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2024/12/20/enhancing-the-security-of-headlamp-helm-chart#conclusion">​</a></h2>
<p>In this post, we have explored the recent security enhancements to Headlamp's Helm chart, including the addition of a value schema, implementation of chart signing, and achievement of verified and official publisher status. These improvements demonstrate our commitment to providing a secure, reliable Kubernetes dashboard solution.</p>
<p>Looking ahead, we are continually evaluating and improving our security measures. Future enhancements may include:</p>
<ul>
<li>Enhanced RBAC configurations.</li>
<li>Automated security scanning and reporting using plugin.</li>
</ul>
<p>We encourage you to upgrade to the latest version of Headlamp's Helm chart to take advantage of these security enhancements. As always, we welcome your feedback and contributions to make Headlamp even better.</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>security</category>
            <category>helm</category>
            <category>artifacthub</category>
        </item>
        <item>
            <title><![CDATA[Unified Settings in Headlamp]]></title>
            <link>https://headlamp.dev/blog/2024/12/06/unified-settings</link>
            <guid>https://headlamp.dev/blog/2024/12/06/unified-settings</guid>
            <pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Unified Settings in Headlamp]]></description>
            <content:encoded><![CDATA[<p>In the past, navigating settings in Headlamp was fairly confusing.  While both general app settings and cluster settings were accessible via the "Settings" button, the view accessed depended on whether the button was clicked from a cluster view or not. This separation made it difficult for users to find and manage settings, especially given Headlamp's wide range of use cases, whether deployed on the web, Docker Desktop, or other environments. Recognizing this challenge, we've refined and unified all settings — general, plugin, and cluster — into the sidebar, allowing users to configure Headlamp in one place.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="accessing-the-settings">Accessing the settings<a class="hash-link" aria-label="Direct link to Accessing the settings" title="Direct link to Accessing the settings" href="https://headlamp.dev/blog/2024/12/06/unified-settings#accessing-the-settings">​</a></h2>
<p>Previously, accessing settings from the sidebar in the home view would take you to the general settings, without the option to view or configure the settings for any clusters you had set up. Now, the settings experience has been improved and consolidated.
Simply click on the "Settings" button in the sidebar from the home view, and you'll be taken to the general settings, with easy access to plugin and cluster settings as well. If you're navigating from within a specific cluster, the "Settings" button now takes you directly to that cluster's settings, just like before. But of course, the general settings are still accessible from the sidebar.</p>
<p><img decoding="async" loading="lazy" alt="General settings" src="https://headlamp.dev/assets/images/general-settings-10a14d4f1acd914db12f59b11a7baab9.png" width="624" height="344" class="img_ev3q"></p>
<p>You can also access the settings for any of the clusters you have set up, without having to navigate to them individually, since we've added a selector to choose the cluster for which to show the settings. There is also a link on the right side to quickly access that cluster.</p>
<p><img decoding="async" loading="lazy" alt="New cluster settings screenshot" src="https://headlamp.dev/assets/images/cluster-settings-47787c7b97148f3372e85fe4c753bc09.png" width="624" height="346" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" href="https://headlamp.dev/blog/2024/12/06/unified-settings#conclusion">​</a></h2>
<p>Headlamp strives to cover a wide range of use cases, from web deployments to Docker Desktop and more. Sometimes, this flexibility leads to parts of the UI that need refinement as new use cases emerge. By unifying the settings into one place, we've addressed a long-standing UX challenge, making Headlamp easier to navigate and configure. We're always looking to improve, so if you encounter any UX issues or have suggestions, we would love to hear from you (file an <a href="https://github.com/kubernetes-sigs/headlamp/issues" target="_blank" rel="noopener noreferrer">issue</a>, or chat with us on <a href="https://kubernetes.slack.com/messages/headlamp" target="_blank" rel="noopener noreferrer">Slack</a>). Until next time!</p>]]></content:encoded>
            <category>kubernetes</category>
            <category>ui</category>
            <category>ux</category>
            <category>quick-update</category>
        </item>
    </channel>
</rss>