Подключитесь к удаленному кластеру minikube с помощью kubectl

Подключитесь к удаленному кластеру minikube с помощью kubectl

Я пытаюсь проверить, смогу ли я подключиться к удаленному кластеру 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:

  1. создать кластер minikube, прослушивающий публичный интерфейс, добавить удаленное имя хоста и/или IP-адреса в сгенерированный сертификат minikube start --listen-address=0.0.0.0 --apiserver-names=example.com --apiserver-ips=1.2.3.4
  2. используйте docker psдля получения публичного порта для сервера API - он должен подключаться к порту 8443 внутри контейнера minikube (это будет выглядеть так 0.0.0.0:32774->8443/tcp- порт - 32774)
  3. получить конфигурацию kube для использования minikube minikube kubectl -- config viewи сохранить ее в локальном файле (например ~/minikube.config, )
  4. поле редактирования clusters[0].cluster.serverв ~/minikube.config- установите его на соответствующий удаленный хост и порт, полученные на шаге 2
  5. создайте локальный каталог для сертификатов и ключа:mkdir -p ~/.minikube/profiles/minikube
  6. копировать client.keyи client.crtс ca.crtхоста minikube на локальный хост: scp 'example.com:.minikube/profiles/minikube/client.*' ~/.minikube/profiles/minikube/иscp 'example.com:.minikube/ca.crt' ~/.minikube/
  7. запустить локально, 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

Связанный контент