Как получить доступ к пользовательскому интерфейсу 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
-
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
-
kubectl прокси &
-
Запустите следующую команду на своем локальном ноутбуке (или там, где вы хотите получить доступ к GUI)
ssh -L 8877: 127.0.0.1: 8001 -N -f -L root master_IPADDRESS
-
Получить секретный ключ kubectl -N kube-system description secret $ (kubectl -N kube-system получить секрет | awk '/^ deploy-controller-token -/{print $ 1}') | awk '$ 1 == "token:" {print $ 2}'
-
Откройте панель мониторинга 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...