Как получить доступ к пользовательскому интерфейсу Kubernetes через браузер?

Я установил Kubernetes, используя сценарии contrib/ansible. Когда я запускаю файл-кластер:

[[email protected] ~]$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
Elasticsearch is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging
Heapster is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/heapster
Kibana is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kibana-logging
KubeDNS is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kube-dns
kubedash is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/kubedash
Grafana is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana
InfluxDB is running at http://localhost:8080/api/v1/proxy/namespaces/kube-system/services/monitoring-influxdb

Кластер отображается на локальном хосте с небезопасным портом и отображается на защищенном порту 443 через ssl

kube 18103 1 0 12:20 ? 00:02:57 /usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=https://10.57.50.161:443 -- kubeconfig=/etc/kubernetes/controller-manager.kubeconfig --service-account-private-key-file=/etc/kubernetes/certs/server.key --root-ca-file=/etc/kubernetes/certs/ca.crt kube 18217 1 0 12:20 ? 00:00:15 /usr/bin/kube-scheduler --logtostderr=true --v=0 --master=https://10.57.50.161:443 --kubeconfig=/etc/kubernetes/scheduler.kubeconfig root 27094 1 0 12:21 ? 00:00:00 /bin/bash /usr/libexec/kubernetes/kube-addons.sh kube 27300 1 1 12:21 ? 00:05:36 /usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://10.57.50.161:2379 --insecure-bind-address=127.0.0.1 --secure-port=443 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota --tls-cert-file=/etc/kubernetes/certs/server.crt --tls-private-key-file=/etc/kubernetes/certs/server.key --client-ca-file=/etc/kubernetes/certs/ca.crt --token-auth-file=/etc/kubernetes/tokens/known_tokens.csv --service-account-key-file=/etc/kubernetes/certs/server.crt

Я скопировал сертификаты с машины kube-master на мой локальный компьютер, я установил корневой сертификат ca. Браузеры chrome/safari принимают сертификат root. Когда я пытаюсь получить доступ к https://10.57.50.161/ui Я получаю "Несанкционированный"

Как я могу получить доступ к кубернетам ui?

Ответ 1

Вы можете использовать kubectl прокси.

В зависимости от того, используете ли вы файл конфигурации, через командную строку запустите

kubectl proxy

или же

kubectl --kubeconfig=kubeconfig proxy

Вы должны получить аналогичный ответ

Начиная служить 127.0.0.1:8001

Теперь откройте ваш браузер и перейдите к

http://127.0.0.1:8001/ui/ (устарело, см. kubernetes/dashboard)
HTTP://локальный: 8001/API/v1/пространство имен/Кубэ-система/услуги /HTTPS: kubernetes-панели:/прокси/

Вы должны убедиться, что порты совпадают.

Ответ 2

Это работает для меня, что вы можете получить доступ из сети

kubectl proxy --address 0.0.0.0 --accept-hosts '.*'

Ответ 3

Если вы посмотрите на конфигурацию вашего apirusver, вам нужно либо представить токен-носитель (действительные токены будут перечислены в /etc/kubernetes/tokens/known_tokens.csv), либо сертификат клиента (подписанный сертификатом CA в /etc/kubernetes/certs/ca.crt), чтобы доказать, что вы должен иметь доступ к кластеру.

https://github.com/kubernetes/kubernetes/issues/7307#issuecomment-96130676 описывает, как мне удалось настроить клиентские сертификаты для кластера GKE на моем Mac.

Чтобы передать токены-носители, вам необходимо передать HTTP-заголовок Авторизация со значением Bearer ${KUBE_BEARER_TOKEN}. Вы можете увидеть пример того, как это делается с помощью curl здесь; в браузере вам нужно будет установить надстройку/плагин для передачи пользовательских заголовков.

Ответ 4

Быстрый n-грязный (и небезопасный) способ доступа к Личному кабинету:

$ kubectl edit svc/kubernetes-dashboard --namespace=kube-system

Это загрузит конфигурацию Dashboard (yaml) в редактор, где вы можете ее редактировать.

Измените строку type: ClusterIP на type: NodePort.

Получить порт tcp:

$ kubectl get svc kubernetes-dashboard -o json --namespace=kube-system

Строка с портом tcp будет выглядеть так:

            "nodePort": 31567

В более новых версиях кубернетов вы можете получить nodeport с get svc:

# This is kubernetes 1.7:
[email protected]:~$ sudo kubectl get svc --namespace=kube-system
NAME                   CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   10.3.0.234   <nodes>       80:31567/TCP   2h

Сделайте kubectl describe nodes, чтобы получить IP-адрес node.

Обзор: http://NODE_IP:31567

Хорошо для тестирования. Не подходит для производства из-за отсутствия безопасности.

Ответ 5

Вы можете использовать kubectl proxy --address=clusterIP --port 8001 --accept-hosts '.*'

Ответ 6

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

  2. kubectl прокси &

  3. Запустите следующую команду на своем локальном ноутбуке (или там, где вы хотите получить доступ к GUI)

    ssh -L 8877: 127.0.0.1: 8001 -N -f -L root master_IPADDRESS

  4. Получить секретный ключ kubectl -N kube-system description secret $ (kubectl -N kube-system получить секрет | awk '/^ deploy-controller-token -/{print $ 1}') | awk '$ 1 == "token:" {print $ 2}'

  5. Откройте панель мониторинга http://localhost: 8877/api/v1/пространства имен /kube-system/services/https: kubernetes-dashboard: /proxy/

Выполните связывание ролей, если вы получаете какие-либо ошибки.

Ответ 7

Сервер API уже доступен через порт 6443 на узле, но не разрешает доступ к https://: 6443/api/v1/пространства имен /kube-system/services/https: kubernetes-dashboard: /proxy/

я сгенерировал клиентские сертификаты, подписанные kubernetes ca cert, преобразованные в pkcs12 и интегрированные в мой браузер... при попытке доступа к этому URL они говорят, что пользователь не авторизован для доступа к URI...