2016-03-28 5 views
12

Я установил Kubernetes используя сценарии contrib/ansible. При запуске кластер-инфо:Как получить доступ к пользовательскому интерфейсу Kubernetes через браузер?

[[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- мастер на мой локальный компьютер, я установил корневой сертификат ca. Браузеры chrome/safari принимают сертификат root. Когда я пытаюсь получить доступ к https://10.57.50.161/ui Я получаю «Несанкционированное»

Как я могу получить доступ к kubernetes щ?

ответ

7

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

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

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

+4

Это не удобный опыт для тех, кто просто хочет, чтобы увидеть интерфейс в браузере. –

+1

Я полностью согласен (проблема, с которой я связан, была открыта по этой причине). Другой способ доступа к пользовательскому интерфейсу - открыть его как внешнюю службу и напрямую подключиться к ней. К сожалению, он не предлагает никаких authn/z или https, так что это не безопасно. –

+0

Это звучит многообещающе - как выставлять пользовательский интерфейс как внешнюю службу? –

5

Quick-н-загрязнен (и небезопасный) способ доступа к Dashboard:

$ 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 

В новых версиях kubernetes вы можете получить 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-адрес узла.

Просмотр в: http://NODE_IP:31567

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

+0

и как изменить это от NodePort до ClusterIP? –

14

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

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

kubectl proxy 

или

kubectl --kubeconfig=kubeconfig proxy 

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

Начиная служить на 127,0 .0.1: 8001

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

http://127.0.0.1:8001/ui/

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

6

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

kubectl proxy --address 0.0.0.0 --accept-hosts '.*' 
Смежные вопросы