At work, we are using Kubernetes as a way to run our application services. To test and debug deployments before they go into code review and to the development environment, a local Kubernetes is beneficial. That is where Minikube comes into play. Unfortunately for me, our application services require more resources than my work laptop can provide, especially RAM. Either I close all applications and run Minikube, or I have a helpful browser and IDE window open 😉.
Since I need the local K8s cluster from time to time, I wondered if I could run it on my personal computer and access it from my laptop. This way, I can dedicate at least six physical cores and 24 GB of RAM to the VM (even more, but that was a nice number and more than enough).
The setup of Minikube itself is simple.
minikube start \
--vm-driver=virtualbox \
--cpus 6 --memory 24576 \
--kubernetes-version 1.19.6 \
--apiserver-ips=192.168.178.26
All options except the last are self-explanatory. apiserver-ips
is
necessary because of the certificates that Minikube creates.
Otherwise, you will receive a certificate-ip-mismatch error when you
try to connect to it from another computer. This option defines the IP
address of the computer that Minikube is running on.
From the Minikube documentation:
--apiserver-ips ipSlice A set of apiserver IP Addresses which are used
in the generated certificate for kubernetes.
This can be used if you want to make the apiserver
available from outside the machine (default [])
Next, you need to forward at least port 8443 to access Minikube from a remote computer. If you want to access your application, e.g. through HTTP, then you must add more port forwardings. Open the virtual machine’s "Network" settings, expand the "Advanced" section, and from there, you can open the "Port Forwarding" editor.
The SSH port forwarding was already there. I added 51080 to 80 (HTTP) and 51928 to 8443 (kubectl). You can choose any free, user-accessible port you want to expose 8443 on the host. I picked this one up from somewhere else and just stuck with it. Ultimately, it does not matter. Although these instructions are for VirtualBox, the same concept should apply to any other Hypervisor.
Lastly, you must configure the client to use the remote Minikube cluster. Minikube, by default, configures the local kubectl to access it automatically. You can take this configuration and apply it to the client computer.
You need to edit /home/<user>/.kube/config
and add the remote
Minikube cluster. You can copy the configuration file’s values on the
Minikube server and apply 1:1 on the client. The one thing you need to
adjust is the IP address and the port. Logically, Minikube configures
itself for local access. In my case it is
server: https://192.168.178.26:51928
, the IP address of the Minikube
machine and the port as configured in VirtualBox’ port forwardings.
apiVersion: v1
clusters:
- cluster:
...other clusters...
- cluster:
certificate-authority: C:\Users\<User>\.minikube-priv\ca.crt
extensions:
- extension:
last-update: Wed, 03 Feb 2021 07:30:44 CET
provider: minikube.sigs.k8s.io
version: v1.17.1
name: cluster_info
server: https://192.168.178.26:51928
name: mkube-priv
contexts:
- context:
...other contexts...
- context:
cluster: mkube-priv
extensions:
- extension:
last-update: Wed, 03 Feb 2021 07:30:44 CET
provider: minikube.sigs.k8s.io
version: v1.17.1
name: context_info
namespace: default
user: mkube-priv
name: mkube-priv
current-context: mkube-priv
kind: Config
preferences: {}
users:
- name: ...other users...
- name: mkube-priv
user:
client-certificate: C:\Users\<User>\.minikube-priv\profiles\minikube\client.crt
client-key: C:\Users\<User>\.minikube-priv\profiles\minikube\client.key
Notice how my client is a Windows machine, not Linux. If you run WSL, you must then copy it all to the WSL user’s configuration. I did it on both the Windows environment and the Linux environment on Windows. There are three sections to copy a configuration to:
- clusters
- contexts
- users
Additionally, I decided to also copy Minikube’s certificates from the
/home/<user>/.minikube
folder to the client and store that data in a
separate folder. It is easy to determine what is required. Look at the
kubectl configuration and what files it references.

I was lazy and copied the complete profiles
folder. You only need a
few files, but why bother?