Я пытаюсь проверить, смогу ли я подключиться к удаленному кластеру minikube (Ubuntu box) с помощью локального (Mac) kubectl. В настоящее время я использую Docker и могу сделать это очень легко с помощью docker-machine
. Просто выполните eval для имени машины, и docker будет использовать удаленную машину.
Мне было интересно, есть ли что-то подобное для minikube/kubectl? Я нашел несколько статей, в которых упоминается, что мне нужно скопировать удаленный ~/.minikube
каталог в локальный и изменить некоторые настройки. Но это кажется довольно сложным для того, что такой инструмент docker-machine
делает без проблем.
Существует ли аналогичный инструмент, или если нет, может ли кто-нибудь помочь мне с шагами, необходимыми для подключения к удаленному кластеру?
Удаленная машина
В настоящее время я использую docker
драйвер (это полный вывод команды, только одна строка):
$ minikube config view
- driver: docker
И имеем ряд NodePort
услуг:
$ kubectl get service -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default apigateway NodePort 10.100.122.255 <none> 8080:30601/TCP 19h
default discoveryserver NodePort 10.101.106.231 <none> 8761:30602/TCP 19h
default elasticsearch NodePort 10.97.197.14 <none> 9200:30604/TCP 19h
default harness NodePort 10.97.233.245 <none> 9090:30603/TCP 19h
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 19h
default mongo NodePort 10.97.172.108 <none> 27017:32625/TCP 19h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 19h
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/meanwhileinhell/.minikube/ca.crt
server: https://192.168.50.2:8443 <<<<<< `minikube ip`
name: minikube
contexts:
- context:
cluster: minikube
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/meanwhileinhell/.minikube/profiles/minikube/client.crt
client-key: /home/meanwhileinhell/.minikube/profiles/minikube/client.key
Локальная машина
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes.docker.internal:6443
name: docker-desktop
- cluster:
certificate-authority: /Users/mih.mac/remote/.minikube/ca.crt
server: https://192.168.1.5:8443 <<<<<< Static IP of my remote machine
name: minikube
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
- context:
cluster: minikube
user: minikube
name: minikube
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
- name: minikube
user:
client-certificate: /Users/mih.mac/remote/.minikube/client.crt
client-key: /Users/mih.mac/remote/.minikube/client.key
решение1
Нет доступного инструмента. Способ удаленного доступа к minikube — сделать SSH-туннелирование.
1- Вам необходимо иметь возможность подключиться по SSH с Mac к Ubuntu.
2- Добавьте соответствующие флаги переадресации портов SSH. Выполните следующую команду
ssh -N -p 22 <user>@<public_ip> -L 127.0.0.1:18443:<minikube_ip>:8443
Где:
пользователь ваше имя
public_ip — это публичный IP вашего сервера
minikube_ip — это IP-адрес minikube, его можно узнать на сервере с помощью команды minikube ip. Скорее всего, это будет 192.168.49.2.
3- Затем просто введите соответствующие учетные данные K8s в kubectl на Mac.
Более подробную информацию можно получить, перейдя по ссылке:
https://www.zepworks.com/posts/access-minikube-remotely-kvm/ https://www.chevdor.com/post/2021/02/docker_to_k8s/
решение2
Действия по подключению к удаленному кластеру minikube из kubectl:
- создать кластер minikube, прослушивающий публичный интерфейс, добавить удаленное имя хоста и/или IP-адреса в сгенерированный сертификат
minikube start --listen-address=0.0.0.0 --apiserver-names=example.com --apiserver-ips=1.2.3.4
- используйте
docker ps
для получения публичного порта для сервера API - он должен подключаться к порту 8443 внутри контейнера minikube (это будет выглядеть так0.0.0.0:32774->8443/tcp
- порт - 32774) - получить конфигурацию kube для использования minikube
minikube kubectl -- config view
и сохранить ее в локальном файле (например~/minikube.config
, ) - поле редактирования
clusters[0].cluster.server
в~/minikube.config
- установите его на соответствующий удаленный хост и порт, полученные на шаге 2 - создайте локальный каталог для сертификатов и ключа:
mkdir -p ~/.minikube/profiles/minikube
- копировать
client.key
иclient.crt
сca.crt
хоста minikube на локальный хост:scp 'example.com:.minikube/profiles/minikube/client.*' ~/.minikube/profiles/minikube/
иscp 'example.com:.minikube/ca.crt' ~/.minikube/
- запустить локально,
kubectl --kubeconfig ~/minikube.config get pod -A
чтобы проверить, что это работает
решение3
Вы можете использовать socat для переадресации IP-адреса minikube и порта по умолчанию (192.168.49.2:8443) на IP-адрес сетевой карты системы по умолчанию.
socat TCP4-LISTEN:8443,fork TCP4:192.168.49.2:8443