Как получить доступ к локальным панелям миникуба kubernetes удаленно

Вопрос Kubernetes о новичках (или, скорее, базовый): Установлен одиночный мини-куб node (выпуск 0.23) в ящике ubuntu, запущенном на моем языке (по IP-адресу 192.168.0.20) с помощью виртуального бокса.

Команда запуска minikube также успешно завершена

minikube start
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.

панель инструментов minikube также подходит успешно. (работает на 192.168.99.100:30000)

то, что я хочу сделать, - это доступ к панели инструментов minikube из моей macbook (работает на 192.168.0.11) в той же локальной сети.

Также я хочу получить доступ к одной и той же панели мониторинга minikube из Интернета.

Для доступа к локальной сети: Теперь из того, что я понимаю, я использую virtualbox (опция vm по умолчанию), я могу изменить тип сети (на NAT с переадресацией портов) с помощью команды vboxnet

VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,,2222,,22"

как указано здесь

В моем случае это будет что-то вроде этого

VBoxManage modifyvm "VM name" --natpf1 "guesthttp,http,,30000,,8080"

Я думаю о правильных строках здесь?

Также для удаленного доступа к одному и тому же адресу панели мини-коммутатора, я могу настроить службу no-ip.com как услугу. Они попросили установить свою утилиту в linux box, а также настроить переадресацию портов в настройках маршрутизатора, которые будут перенаправляться с порта хоста на гостевой порт. Это верно? Я что-то пропустил?

Ответ 1

Я смог запустить с чем-то простым:

kubectl proxy --address='0.0.0.0' --disable-filter=true

Ответ 2

Способ ssh

Предположим, что у вас есть ssh в вашем блоке ubuntu.

Сначала запустите kubectl proxy &, чтобы открыть панель управления на http://localhost:8001

Затем выведите панель управления с помощью перенаправления портов ssh, выполнив:

ssh -R 30000:127.0.0.1:8001 [email protected]

Теперь вы должны получить доступ к панели управления из своего macbook в своей локальной сети, указав браузер на http://192.168.0.20:30000

Чтобы открыть его извне, просто выведите порт 30000 с помощью no-ip.com, возможно, измените его на какой-то стандартный порт, например 80.

Обратите внимание, что это не самое простое решение, но в некоторых местах работало бы без прав суперпользователя;) Вы можете автоматизировать логин после перезапуска окна ubuntu с помощью init script и установки открытого ключа для подключения.

Ответ 3

@Джефф дал идеальный ответ, давай больше советов новичкам.

  1. Запустите прокси-сервер, используя скрипт @Jeff, по умолчанию он откроет прокси-сервер на 0.0.0.0:8001.

    kubectl proxy --address='0.0.0.0' --disable-filter=true
    
  2. Посетите панель инструментов по ссылке ниже:

    curl http://your_api_server_ip:8001/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/
    

Более подробную информацию вы можете найти в официальном документе.

Ответ 4

Недавно у меня была такая же проблема, и я решил ее следующим образом:

  1. Подключите виртуальную машину Minikube к локальной сети, добавив еще один сетевой адаптер в режиме сети bridge. Для меня это было сделано путем изменения виртуальной машины minikube в пользовательском интерфейсе VirtualBox и требовало остановки/запуска виртуальной машины. Не уверен, как это будет работать, если вы используете гиперкит. Не связывайтесь с сетевыми адаптерами по умолчанию, настроенными minikube: от них зависит minikube. https://github.com/kubernetes/minikube/issues/1471
  2. Если вы еще этого не сделали, установите kubectl на свой Mac: https://kubernetes.io/docs/tasks/tools/install-kubectl/
  3. Добавьте кластер и связанную конфигурацию к ~/.kube/config, как показано ниже, изменив IP-адрес сервера в соответствии с вашим недавно выставленным IP-адресом виртуальной машины. Имена также могут быть изменены при желании. Обратите внимание, что insecure-skip-tls-verify: true необходим, потому что сертификат https, сгенерированный minikube, действителен только для внутренних IP-адресов виртуальной машины.

    clusters:
    - cluster:
        insecure-skip-tls-verify: true
        server: https://192.168.0.101:8443
      name: mykubevm
    contexts:
    - context:
        cluster: mykubevm
        user: kubeuser
      name: mykubevm
    users:
    - name: kubeuser
      user:
        client-certificate: /Users/myname/.minikube/client.crt
        client-key: /Users/myname/.minikube/client.key
    
  4. Скопируйте файлы ~/.minikube/client.*, на которые есть ссылки в конфигурации, с вашего хоста Linux Minikube. Это файлы ключей безопасности, необходимые для доступа.

  5. Установите контекст kubectl: kubectl config set-context mykubevm. На этом этапе ваш кластер миникубов должен быть доступен (попробуйте kubectl cluster-info).

  6. Запустите kubectl proxy http://localhost:8000, чтобы создать локальный прокси для доступа к панели мониторинга. Перейдите по этому адресу в вашем браузере.

Также возможно ssh к миникубе VM. Скопируйте пару ключей ssh из ~/.minikube/machines/minikube/id_rsa* в каталог .ssh (переименование, чтобы избежать удаления других ключей, например mykubevm и mykubevm.pub). Тогда ssh -i ~/.ssh/mykubevm [email protected]<kubevm-IP>

Ответ 5

Незначительные изменения в подходе выше.

У меня есть веб-сервис http с NodePort 30003. Я делаю его доступным через порт 80, запустив:

sudo ssh -v -i ~/.ssh/id_rsa -N -L 0.0.0.0:80:localhost:30003 ${USER}@$(hostname)

Ответ 6

Джефф Прути добавил полезный ответ:

Я смог запустить что-то такое простое, как:

kubectl proxy --address='0.0.0.0' --disable-filter=true

Но для меня это не сработало изначально.

Я запускаю эту команду на компьютере CentOS 7 с запущенным kubectl (локальный IP: 192.168.0.20).

Когда я попытался получить доступ к панели мониторинга с другого компьютера (который, очевидно, находился в локальной сети):

http://192.168.0.20:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/

тогда в моем веб-браузере был только тайм-аут.

Решение для моего случая состоит в том, что в CentOS 7 (и, возможно, других дистрибутивах) вам нужно открыть порт 8001 в брандмауэре ОС.

Так что в моем случае мне нужно работать в терминале CentOS 7:

 sudo firewall-cmd --zone=public --add-port=8001/tcp --permanent
 sudo firewall-cmd --reload

И после этого. Оно работает! :)

Конечно, вы должны знать, что это небезопасное решение, потому что сейчас у кого-нибудь есть доступ к вашей панели инструментов. Но я думаю, что для локального лабораторного тестирования этого будет достаточно.

В других дистрибутивах Linux команда для открытия портов в брандмауэре может отличаться. Пожалуйста, используйте Google для этого.

Ответ 7

Спасибо за ваши ценные ответы. Если вам нужно использовать прокси-команду kubectl, которая не может быть просмотрена постоянно, используйте объект "Сервис", указанный ниже, в файле YAML, который можно просматривать удаленно, пока вы не остановите его. Создайте новый файл yaml minikube-dashboard.yaml и напишите код вручную, я не рекомендую копировать и вставлять его.

apiVersion : v1
kind: Service
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard-test
  namespace: kube-system
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30000
  selector:
    app: kubernetes-dashboard
  type: NodePort

Выполнить команду,

$ sudo kubectl apply -f minikube-dashboard.yaml

Наконец, откройте URL:http://your-public-ip-address:30000/#!/persistentvolume?namespace=default