kubenav is a free and Open Source application. Its main purpose is to provide a user-friendly GUI for managing a Kubernetes cluster on all possible platforms: desktop clients (Linux, macOS, and Windows), mobile (Android and iOS), as well as the web version.
kubenav is written mainly in TypeScript and Go. Its development started almost two years ago, and today it has over 1,200 stars on GitHub.
Here are the key features of kubenav according to its developers:
- You can run it on a wide variety of devices. At the same time, its developers pledge to deliver the same user experience on all platforms thanks to maximum unification of the code base, among other things.
- kubenav can work with several Kubernetes clusters at the same time.
- It supports different K8s installation options: you can run it as a self-managed solution or deploy it in a cloud cluster (provided by Google, AWS, Azure, DigitalOcean, Rancher).
As for its capabilities, the application allows you to:
- view the state and the configuration of the main cluster resources (Deployments, StatefulSets, DaemonSets, Pods, etc.);
- view events in the cluster;
- view container logs, including in real time;
- exec into the container terminal (Bash, sh, PowerShell, cmd are supported);
- modify, delete, and scale cluster resources.
It is also worth noting that kubenav features integrations (plugins) for Prometheus (for viewing metrics in the toolbar), Elasticsearch (for storing logs), and Jaeger (for tracing).
Let’s take a look at kubenav in action.
Interfaces available and their installation
1. Web application
This type of a kubenav client is installed via a single command that creates a Pod in a cluster with a
kubenav backend using Kustomize:
kubectl apply --kustomize github.com/kubenav/deploy/kustomize
Next, in order to access it, we need to instruct Kubernetes to do port forwarding for us:
kubectl port-forward --namespace kubenav svc/kubenav 14122
It is unlikely that you have a browser on a Kubernetes server. I tried to open it with the lynx browser but it failed.
Thus, you need to forward the port to the local computer:
ssh -L 127.0.0.1:14122:127.0.0.1:14122
Now, you can access the web interface at
It looks quite nice and resembles a stripped-down version of the regular Kubernetes Dashboard.
However, it is important to keep in mind that in this case, kubenav gets full access to the entire cluster. By default, the
--incluster parameter is enabled in Deployment, so kubenav does not require the
kubeconfig flag to be set and can freely send requests to the API. You can set the permissions for it, but you’ll have to first find how to do that in the documentation (see the “Configure Access to Multiple Clusters” section).
It is also impossible to enable external access to the web interface on a permanent basis right out of the box since kubenav has no built-in authorization. You will have to set up Basic Auth or something of that ilk yourself.
2. Desktop application
The kubenav desktop app supports all major platforms: Linux (amd64/arm64), macOS (amd64/arm64), and Windows (x64). You can download it from the releases page. The application is distributed as a standalone executable, so there is no installation required.
The developers have not signed it for Windows, so Windows Defender warns the user of an “unknown publisher” every time kubenav is launched. Furthermore, the application’s stability under Windows leaves a lot to be desired: I normally have managed to run it on one computer out of three, and I still have no idea why kubenav refused to operate on the other two. Nevertheless, once the Windows application starts, it keeps on running like clockwork. Under Linux, kubenav ran smoothly (as expected).
In addition, I accidentally discovered a funny side effect in the behavior of the Windows client. The thing is that the backend occupies port 14122 by default. If you forward that port under Windows just like we did with the web interface, the application will bind onto it. That way, you can get a direct connection to the cluster with full permissions (no need to configure it manually) unless you have tweaked the default Deployment settings for the kubenav web interface. Linux doesn’t let you do tricks like that.
The desktop client looks the same as the web interface, so there is no point to provide a screenshot of it.
3. Mobile app
The mobile app looks the same as the other two types. You can easily install it from the Google Play/App Store, so no there’s no hassle. We will discuss the capabilities and appearance of the mobile application a bit later. First, let’s consider the features that all the clients have in common.
First of all, I would like to note some oddities of the mobile version. The developers claim the app can import
kubeconfig from a file, but I failed to do that on any of the phones I have (three Android models): the user can only enter configuration parameters in a text field. Furthermore, you cannot remove a cluster that you no longer need from the list of clusters. Strangely, there is no delete button (and a long press doesn’t work either).
Using kubenav and how it differs from other dashboards
It’s important to praise the kubenav authors here: the UX is indeed the same on all devices. For that reason, I will use its web version to illustrate the tool’s main features. To make it more interesting, I am going to compare the kubenav capabilities with those of the aforementioned original Kubernetes Dashboard.
The resources available for viewing at kubenav are somewhat the same as in the regular dashboard. There are Pods and related resources (Jobs, CronJobs, Deployments, StatefulSets…), PV/PVC, Services, Network Policies… There’s probably no point in listing them all.
- Some extra items (HPA, Pod Disruption Budgets) are presented, they don’t seem very important, though;
- Cluster events are compiled into a dedicated menu item called Events (on top of that, you can view them in the K8s dashboard by switching to the object to which they belong).
- a lack of CPU and RAM usage graphs. Of course, they cannot replace the Prometheus + Grafana bundle, but they can be useful for a general overview.
Speaking of monitoring: I haven’t been able to run the Prometheus plugin. You can add it using the web interface, but there are no configurable settings. Once the plugin is enabled in the mobile application, only a couple of fields are available for configuration. However, the application freezes when you try to access them.
When browsing specific resources (such as Pod properties), the information displayed is approximately the same and sufficiently detailed for both panels. But there is an annoying quirk to kubenav: in the labels, annotations, etc., all of the elements are clickable but do nothing when you click them. In the K8s dashboard, the behavior is more straightforward: if an element is clickable, it will do something.
Both dashboards allow you to
exec into the Pod. In the case of kubenav, however, you must explicitly specify the shell to be run. Unfortunately, you will not see any error message if there is no such shell in the Pod though. The K8s dashboard uses Bash by default and switches to sh if the former is unavailable.
Log browsing, in my opinion, is better implemented in the K8s dashboard: there, you can switch between current/previous logs and enable follow and auto-refresh on the fly. In kubenav, you will have to close the logs window and reopen it in a different mode. The regular dashboard also allows you to download logs as a file. Although it isn’t necessarily what you call a killer feature, it comes in handy sometimes.
Getting back to the mobile version
When it comes to using the dashboard on a smartphone, the kubenav mobile app definitely wins. Just look at what the Kubernetes Dashboard looks like on the smartphones I have:
Another advantage of kubenav is that all the clients have the same functionality (web, desktop, and mobile) thanks to the unified codebase. In general, managing Kubernetes clusters on a smartphone appears to be quite feasible.
However, there’s a little fly in the ointment. The shell input in a container is a bit strange. Here is what I get when I try to enter the word “text”:
Moreover, both gboard and swift keyboard behave like this. You may be lucky enough to find a keyboard that behaves properly, but the default keyboards just do not work as expected.
Another feature of the mobile client is that direct access to the API is required for self-hosted Kubernetes clusters. That is, either you have to connect over VPN to it or expose the API to the network (you wouldn’t dare do that, right?).
In the case that these two features don’t deter you, kubenav is the best cluster management tool for Android or iOS, since the options are very limited: the K8s dashboard is user-unfriendly, while the only real competitor (Kuber) can only run under iOS. Moreover, it is a fee-based application that has not been updated for more than six months. There is also a mobile dashboard for Kubernetes by Bitnami (Cabin); however, it is no longer under active development.
Overall, the kubenav application does a good job as a mobile Kubernetes client despite some flaws such as keyboard issues. How often do you need to manage clusters from your smartphone? That is a question everyone has to answer for themselves.
Non-mobile kubenav clients are perhaps identical or slightly inferior to the regular Kubernetes Dashboard. In the event that you need more features, take a closer look at Lens.