How to export Kubernetes ports to macOS host?
I want to setup a local Kubernetes cluster for testing on macOS. I selected microk8s provided by Canonical. Kubernetes doesn't run native on macOS, but uses a Linux VM provided by multipass.
Installation was smooth and deployment of the kubernetes-bootcamp seemed to have worked. This is the output I got so far:
microk8s kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 5h9m
kubernetes-bootcamp NodePort 10.152.183.226 <none> 8080:31004/TCP 4h10m
multipass list
Name State IPv4 Image
microk8s-vm Running 192.168.64.2 Ubuntu 18.04 LTS
Pinging the instance with ping 192.168.64.2
works as expected.
Update: I further tested connectivity by installing nginx inside the VM. Using curl http://192.168.64.2
the nginx startpage inside the VM showed up on macOS.
Now when I shell into the VM using multipass exec microk8s-vm -- bash
, I can curl
into my deployed service as expected with both:
curl http://127.0.0.1:31004
curl http://10.152.183.226:8080
Getting the expected result of:
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-d977w | v=1
However I'm missing the step to access these url from macOS (both curl and a browser). I tried unsuccessfully:
curl http://10.152.183.226:8080
curl http://10.152.183.226:31004
curl http://192.168.64.2:8080
curl http://192.168.64.2:31004
I'm obviously missing a step to make the running services accessible from the macOS host. What did I miss? Help is very much appreciated!
Solution 1:
That 192.168.64.2 looks like a host only network and may be an internal host only network.. Can you ping 192.168.64.2 from the Mac terminal? multipass defaults to NAT for network and doesn't give the option to change that to bridged until multipass 1.6. Which at this moment is source only. I see 1.5 when I type multipass --version
.
You can get around this anyway by using ssh to forward the multipass port out to the Mac host. From the multipass shell AKA multipass shell
which defaults to primary, run ssh -R 8080 -R 31004 [email protected]
. Add -f
if you want the ssh port forward command to run in the background and add -g
if you want to allow connections from other hosts on the same the network as your Mac. If ssh isn't available on your Mac then enable remote access or just ssh logins (ssh server) for your username under the sharing control panel in settings on your Mac.