DEV Community

Arseny Zinchenko
Arseny Zinchenko

Posted on • Originally published at rtfm.co.ua on

Kubernetes: Minikube, and a LoadBalancer in the Pending status

After running Pritunl in Minikube, it is not possible to connect to the VPN:



2022–10–03 13:50:32 TCP/UDP: Preserving recently used remote address: [AF_INET]194.168.3.100:1194

2022–10–03 13:50:32 UDP link local: (not bound)

2022–10–03 13:50:32 UDP link remote: [AF_INET]194.168.3.100:1194

Check its Kubernetes Service:

$ kubectl -n pritunl-local get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pritunl LoadBalancer 10.102.129.25 <pending> 1194:30166/TCP 47m … 
Enter fullscreen mode Exit fullscreen mode

The type is LoadBalancer, but its EXTERNAL-IPstatus is Pending , since Minikube does not have a service with the LoadBalancer type, because it must be created at the infrastructure level - AWS, GCE, Azure, and then Kubernetes receives an IP or URL from them to route requests to this load balancer.

LoadBalancer solutions

For the Minikube, there are several solutions:

  • use minikube tunnel - will create a tunnel between the host and the Service in Kubernetes
  • or minikube service - get a direct URL to connect
  • or set externalIPs - for Kubernetes LoadBalancer Service - configure it manually

Let’s try everything.

Minikube tunnel

Check the routes on the host machine:

$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.3.1 0.0.0.0 UG 100 0 0 enp38s0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9c291321e71a] 192.168.3.0 0.0.0.0 255.255.255.0 U 100 0 0 enp38s0 192.168.59.0 0.0.0.0 255.255.255.0 U 0 0 0 vboxnet0 
Enter fullscreen mode Exit fullscreen mode

Can see here the route to our VirtualBox -  192.168.59.0 0.0.0.0 255.255.255.0 U 0 0 0 vboxnet0.

Launch tunnel:

$ minikube tunnel [sudo] password for setevoy: Status: machine: minikube pid: 333552 route: 10.96.0.0/12 -> 192.168.59.107 minikube: Running services: [pritunl] errors: minikube: no errors router: no errors loadbalancer emulator: no errors … 
Enter fullscreen mode Exit fullscreen mode

Check the routes now — there is a new route to the network 10.96.0.0 (Kubernetes CIDR) via 192.168.59.107 — this is a VirtualBox virtual machine running Minikube itself:

$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.3.1 0.0.0.0 UG 100 0 0 enp38s0 10.96.0.0 192.168.59.107 255.240.0.0 UG 0 0 0 vboxnet0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9c291321e71a 192.168.3.0 0.0.0.0 255.255.255.0 U 100 0 0 enp38s0 192.168.59.0 0.0.0.0 255.255.255.0 U 0 0 0 vboxnet0 
Enter fullscreen mode Exit fullscreen mode

Check Kubernetes LoadBalancer now:

$ kubectl -n pritunl-local get svc pritunl NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pritunl LoadBalancer 10.102.129.25 10.102.129.25 1194:30166/TCP 54m 
Enter fullscreen mode Exit fullscreen mode

“It works!” ©

Minikube service

Run minikube service, specify a namespace and a name of the Service - Minicube will return the URL for connection to us:

$ minikube service -n pritunl-local pritunl | — — — — — — — -| — — — — -| — — — — — — — | — — — — — — — — — — — — — — -| | NAMESPACE | NAME | TARGET PORT | URL | | — — — — — — — -| — — — — -| — — — — — — — | — — — — — — — — — — — — — — -| | pritunl-local | pritunl | openvpn/1194 | http://192.168.59.108:32350 | | — — — — — — — -| — — — — -| — — — — — — — | — — — — — — — — — — — — — — -| 🎉 Opening service pritunl-local/pritunl in default browser… 
Enter fullscreen mode Exit fullscreen mode

Here, 192.168.59.108 is the address of our VirtualBox server, and 32350 is the NodePort on it, with Pritunl Server running.

You can also list all Kubernetes Services with list:

$ minikube service -n pritunl-local list | — — — — — — — -| — — — — — — — — -| — — — — — — — | — — — — — — — — — — — — — — -| | NAMESPACE | NAME | TARGET PORT | URL | | — — — — — — — -| — — — — — — — — -| — — — — — — — | — — — — — — — — — — — — — — -| | pritunl-local | pritunl | openvpn/1194 | http://192.168.59.108:32350 | | pritunl-local | pritunl-mongodb | No node port | | pritunl-local | pritunl-web | No node port | | — — — — — — — -| — — — — — — — — -| — — — — — — — | — — — — — — — — — — — — — — -| 
Enter fullscreen mode Exit fullscreen mode

Or get the URL in one line instead of a table:

$ kubectl -n priminikube service -n pritunl-local pritunl — url http://192.168.59.108:32350 
Enter fullscreen mode Exit fullscreen mode

Try to connect:

$ telnet 192.168.59.108 32350 Trying 192.168.59.108… Connected to 192.168.59.108. Escape character is ‘^]’. 
Enter fullscreen mode Exit fullscreen mode

Pritunl logs:

“It works!” ©

LoadBalancer externalIPs

Get the IP of the VirtualBox machine:

$ minikube ip 192.168.59.108 
Enter fullscreen mode Exit fullscreen mode

Edit LoadBalancer:

$ kubectl -n pritunl-local edit svc pritunl 
Enter fullscreen mode Exit fullscreen mode

Set externalIPs:

... externalIPs: - 192.168.59.108 ... 
Enter fullscreen mode Exit fullscreen mode

Save, check the Service itself:

$ kubectl -n pritunl-local get svc pritunl NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE pritunl LoadBalancer 10.104.33.93 192.168.59.108 1194:32350/TCP 81m 
Enter fullscreen mode Exit fullscreen mode

And check connection:

$ telnet 192.168.59.108 1194 Trying 192.168.59.108… Connected to 192.168.59.108. Escape character is ‘^]’. 
Enter fullscreen mode Exit fullscreen mode

“It works!” ©

Done.

Originally published at RTFM: Linux, DevOps, and system administration.


Top comments (0)