После запуска Pritunl в Minikube невозможно подключиться к ВПН:
…
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
…
Проверяем его Kubernetes Service:
[simterm]
$ 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 ...
[/simterm]
Тип – LoadBalancer
, но его EXTERNAL-IP
– в статусе Pending , так как у Minikube нет сервиса с типом LoadBalancer, потому что они должны создаваться на уровне инфраструктуры – AWS, GCE, Azure, и потом уже от них Kubernetes получает IP или URL, на который роутит запросы к этому лоад-балансеру.
Содержание
Решения LoadBalancer <pending>
Для Миникуба есть несколько решений:
- использовать
minikube tunnel
— создаст туннель между хостом и Сервисом в Кубернетесе - или
minikube service
— получаем прямую URL для подключения - или указать
externalIPs
для Kubernetes LoadBalancer Service – настроить его вручную
Попробуем все.
Minikube tunnel
Проверяем роуты на хост-машине:
[simterm]
$ 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
[/simterm]
Видим здесь маршрут к нашему VirtualBox – 192.168.59.0 0.0.0.0 255.255.255.0 U 0 0 0 vboxnet0
.
Запускаем tunnel
:
[simterm]
$ 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 ...
[/simterm]
Проверяем роуты сейчас – появился новый маршрут в сеть 10.96.0.0 (Kubernetes CIDR) через 192.168.59.107 – это виртуалка с VirtualBox, на которой запущен сам Minikube:
[simterm]
$ 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
[/simterm]
Проверяем Kubernetes LoadBalancer теперь:
[simterm]
$ 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
[/simterm]
«It works!» (c)
Minikube service
Запускаем minikube service
, указываем неймспейс и имя Сервиса – Миникуб вернет нам URL для подключения:
[simterm]
$ 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...
[/simterm]
Здесь 192.168.59.108 – адрес нашего сервера VirtualBox, а 32350 – NodePort на нем, на котором работает Pritunl Server.
Также можно вывести все Kubernetes Service с помощью list
:
[simterm]
$ 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 | |---------------|-----------------|--------------|-----------------------------|
[/simterm]
Или получить URL одной строкой вместо таблицы:
[simterm]
$ kubectl -n priminikube service -n pritunl-local pritunl --url http://192.168.59.108:32350
[/simterm]
Пробуем подключиться:
[simterm]
$ telnet 192.168.59.108 32350 Trying 192.168.59.108... Connected to 192.168.59.108. Escape character is '^]'.
[/simterm]
Логи Pritunl:
«It works!» (c)
LoadBalancer externalIPs
Получим IP машинки VirtualBox:
[simterm]
$ minikube ip 192.168.59.108
[/simterm]
Редактируем LoadBalancer:
[simterm]
$ kubectl -n pritunl-local edit svc pritunl
[/simterm]
Указываем externalIPs
:
... externalIPs: - 192.168.59.108 ...
Сохраняем, проверяем сам Service:
[simterm]
$ 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
[/simterm]
И подключение к нему:
[simterm]
$ telnet 192.168.59.108 1194 Trying 192.168.59.108... Connected to 192.168.59.108. Escape character is '^]'.
[/simterm]
«It works!» (c)
Готово.