2016-03-28 2 views
12

Ich habe Kubernetes mit contrib/ansible Skripten installiert. Wenn ich laufe Cluster-info:Zugriff auf Kubernetes UI über Browser?

[[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 

Der Cluster auf localhost mit unsicher Port und ausgesetzt auf sicher Port 443 über 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

ich die Zertifikate kopiert habe von kube- ausgesetzt ist Master-Maschine zu meinem lokalen Rechner, ich habe das CA-Root-Zertifikat installiert. Die Chrome/Safari Browser akzeptieren das ca root Zertifikat. Wenn ich versuche, die https://10.57.50.161/ui zugreifen Ich erhalte die ‚unerlaubt‘

Wie kann ich die Kubernetes ui zugreifen?

Antwort

7

Ein Blick auf Ihrer apiserver Konfiguration, müssen Sie entweder ein Träger Token oder Client-Zertifikat (unterzeichnet von der CA cert in /etc/kubernetes/certs/ca.crt) an die apiserver beweisen (gültige Token werden in /etc/kubernetes/tokens/known_tokens.csv aufgeführt werden), die Sie erlaubt sein sollen, um auf den Cluster zuzugreifen.

https://github.com/kubernetes/kubernetes/issues/7307#issuecomment-96130676 beschreibt, wie ich Client-Zertifikate für einen GKE-Cluster auf meinem Mac konfigurieren konnte.

Um Träger-Token zu übergeben, müssen Sie eine HTTP-Header-Autorisierung mit einem Wert Bearer ${KUBE_BEARER_TOKEN} übergeben. Sie können ein Beispiel sehen, wie dies mit curl here; In einem Browser müssen Sie ein Add-On/Plugin installieren, um benutzerdefinierte Header zu übergeben.

+4

Dies ist keine benutzerfreundliche Erfahrung für jemanden, der will nur die Benutzeroberfläche in einem Browser sehen. –

+1

Ich stimme völlig zu (das Problem, mit dem ich verlinkt habe, wurde aus diesem Grund geöffnet). Eine andere Möglichkeit, auf die Benutzeroberfläche zuzugreifen, besteht darin, sie als externen Dienst verfügbar zu machen und direkt eine Verbindung zu ihr herzustellen. Leider bietet es weder authn/z noch https an, also ist das nicht sicher. –

+0

Das klingt vielversprechend - wie stellt man die UI als externen Service zur Verfügung? –

5

Schnell-n-dirty (und unsichere) Art und Weise auf das Dashboard zuzugreifen:

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

Dies wird den Dashboard-config (yaml) in einen Editor geladen werden, wo Sie es bearbeiten kann.

Linie type: ClusterIP zu type: NodePort ändern.

den TCP-Port-Adresse:

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

Die Zeile mit dem TCP-Port wird wie folgt aussehen:

# 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 
:

  "nodePort": 31567 

In neueren Versionen von Kubernetes Sie die nodeport von get svc bekommen

Do kubectl describe nodes, um eine Knoten-IP-Adresse zu erhalten.

Wechseln Sie zu: http://NODE_IP:31567

Gute zum Testen. Nicht gut für die Produktion wegen mangelnder Sicherheit.

+0

und wie kann ich das von NodePort zu ClusterIP ändern? –

14

Sie können kubectl-Proxy verwenden.

Je nachdem, ob Sie eine Konfigurationsdatei verwenden, über Befehlszeilenlauf

kubectl proxy 

oder

kubectl --kubeconfig=kubeconfig proxy 

Sie sollten eine ähnliche Antwort erhalten

Ab 127.0 dienen .0.1: 8001

Nun öffnen Sie Ihren Browser und navigieren Sie zu

http://127.0.0.1:8001/ui/

Sie müssen die Ports zusammenpassen, um sicherzustellen. Diese

6

funktioniert für mich, dass Sie von Netzwerk zugreifen können

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