it-swarm.com.de

Wie melde ich mich im kubernetes-Dashboard an?

Ich habe gerade kubeadm und kubelet auf v1.8.0 aktualisiert. Installieren Sie das Dashboard nach dem offiziellen document .

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

Danach habe ich das Dashboard mit dem Ausführen gestartet

$ kubectl proxy --address="192.168.0.101" -p 8001 --accept-hosts='^*$'

Dann konnte ich glücklicherweise über http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ auf das Dashboard zugreifen.

Ich wurde zu einer Login-Seite wie dieser weitergeleitet, die ich noch nie zuvor getroffen hatte.  enter image description here Es sieht so aus, als gäbe es zwei Arten der Authentifizierung. 

Ich habe versucht, den /etc/kubernetes/admin.conf als kubeconfig hochzuladen, ist aber fehlgeschlagen. Dann habe ich versucht, das Token zu verwenden, das ich von kubeadm token list zur Anmeldung erhielt, aber erneut fehlgeschlagen ist. 

Die Frage ist, wie ich mich im Dashboard anmelden kann. Es sieht so aus, als hätten sie viele Sicherheitsmechanismen hinzugefügt. Vielen Dank. 

51
ichbinblau

Seit Version 1.7 verwendet Dashboard ein sichereres Setup. Es bedeutet, dass durch Standardmäßig hat es minimale Berechtigungen und kann nur über .__ aufgerufen werden. HTTPS. Es wird empfohlen, Access .__ zu lesen. Steuerung Bevor Sie weitere Schritte ausführen.

Ab Version 1.7 unterstützt Dashboard die Benutzerauthentifizierung basierend auf:

--- Dashboard auf Github

Zeichen

Hier kann TokenStatic Token, Service Account Token, OpenID Connect Token von Kubernetes Authentication sein, nicht jedoch der kubeadm Bootstrap Token.

Mit kubectl können wir standardmäßig ein Dienstkonto (z. B. Implementierungscontroller) erhalten, das in kubernetes erstellt wird.

$ kubectl -n kube-system get secret
# All secrets with type 'kubernetes.io/service-account-token' will allow to log in.
# Note that they have different privileges.
NAME                                     TYPE                                  DATA      AGE
deployment-controller-token-frsqj        kubernetes.io/service-account-token   3         22h

$ kubectl -n kube-system describe secret deployment-controller-token-frsqj
Name:         deployment-controller-token-frsqj
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=deployment-controller
              kubernetes.io/service-account.uid=64735958-ae9f-11e7-90d5-02420ac00002

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZXBsb3ltZW50LWNvbnRyb2xsZXItdG9rZW4tZnJzcWoiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVwbG95bWVudC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjQ3MzU5NTgtYWU5Zi0xMWU3LTkwZDUtMDI0MjBhYzAwMDAyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRlcGxveW1lbnQtY29udHJvbGxlciJ9.OqFc4CE1Kh6T3BTCR4XxDZR8gaF1MvH4M3ZHZeCGfO-sw-D0gp826vGPHr_0M66SkGaOmlsVHmP7zmTi-SJ3NCdVO5viHaVUwPJ62hx88_JPmSfD0KJJh6G5QokKfiO0WlGN7L1GgiZj18zgXVYaJShlBSz5qGRuGf0s1jy9KOBt9slAN5xQ9_b88amym2GIXoFyBsqymt5H-iMQaGP35tbRpewKKtly9LzIdrO23bDiZ1voc5QZeAZIWrizzjPY5HPM1qOqacaY9DcGc7akh98eBJG_4vZqH2gKy76fMf0yInFTeNKr45_6fWt8gRM77DQmPwb3hbrjWXe1VvXX_g

Kubeconfig

Benutzer in der kubeconfig-Datei benötigen entweder username & password oder token, während admin.conf nur client-certificate hat.

$ kubectl config set-credentials cluster-admin --token=bearer_token

Alternative (nicht für die Produktion empfohlen)

Es gibt zwei Möglichkeiten, die Authentifizierung zu umgehen, aber zur Vorsicht verwenden. 

Stellen Sie das Dashboard mit HTTP bereit

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

Das Dashboard kann unter http: // localhost: 8001/ui mit kubectl proxy geladen werden.

Erteilen von Administratorrechten für das Dienstkonto des Dashboards

$ cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system
EOF

Anschließend können Sie die Option Skip auf der Anmeldeseite verwenden, um auf das Dashboard zuzugreifen.

75
silverfox

TL; DR

Um das Token in einem einzigen Oneliner zu erhalten:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'

Dies setzt voraus, dass Ihre ~/.kube/config vorhanden und gültig ist. Außerdem gibt kubectl config get-contexts an, dass Sie den richtigen Kontext (Cluster und Namespace) für das Dashboard verwenden, in dem Sie sich anmelden.

Erläuterung

Diese Antwort habe ich aus den Antworten von @ silverfox abgeleitet. Das ist ein sehr informatives Schreiben. Leider kann man nicht sagen, wie man die Informationen tatsächlich in die Praxis umsetzt. Vielleicht habe ich zu lange DevOps gemacht, aber ich denke in Shell. Es ist viel schwieriger für mich, Englisch zu lernen oder zu unterrichten.

Hier ist der Oneliner mit Zeilenumbrüchen und Einrückungen zur besseren Lesbarkeit:

kubectl -n kube-system describe secret $(
  kubectl -n kube-system get secret | \
  awk '/^deployment-controller-token-/{print $1}'
) | \
awk '$1=="token:"{print $2}'

Es gibt 4 verschiedene Befehle, die in dieser Reihenfolge aufgerufen werden:

  • Zeile 2 - Dies ist der erste Befehl von @ silverfox Token .
  • Zeile 3 - Nur das erste -Feld der Zeile ausgeben, die mit deployment-controller-token- beginnt (der Name des Pods)
  • Zeile 1 - Dies ist der zweite Befehl von @ silverfox Token .
  • Zeile 5 - Nur das zweite Feld der Zeile ausgeben, dessen erstes Feld "token:" ist.
44
Bruno Bronosky

Wenn Sie dem Dashboard-Dienstkonto keine Administratorberechtigung erteilen möchten, können Sie ein Cluster-Admin-Dienstkonto erstellen.

$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

Anschließend können Sie das Token des gerade erstellten Cluster-Admin-Dienstkontos verwenden.

$ kubectl get secret | grep cluster-admin-dashboard-sa
cluster-admin-dashboard-sa-token-6xm8l   kubernetes.io/service-account-token   3         18m
$ kubectl describe secret cluster-admin-dashboard-sa-token-6xm8l

Ich habe es von giantswarm guide zitiert - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

25
SunghoMoon

Kombination von zwei Antworten: 49992698 und 47761914

# Create service account
kubectl create serviceaccount cluster-admin-dashboard-sa

# Bind ClusterAdmin role to the service account
kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

# Parse the token
TOKEN=$(kubectl describe secret $(kubectl -n kube-system get secret | awk '/^cluster-admin-dashboard-sa-token-/{print $1}') | awk '$1=="token:"{print $2}')
9
Abdennour TOUMI

Alle vorherigen Antworten sind gut für mich. Eine direkte Antwort auf meiner Seite würde jedoch von https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token kommen. Verwenden Sie einfach kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Sie haben viele Werte für einige Schlüssel (Name, Namespace, Labels, ..., token). Die wichtigste ist die token, die Ihrem Namen entspricht. Kopieren Sie das Token und fügen Sie es in das Tokenfeld ein. Hoffe das hilft.

4
Julien Nyambal

Ein selbsterklärender einfacher Einzeiler zum Extrahieren des Tokens für die Anmeldung am kubernetes Dashboard.

kubectl describe secret -n kube-system | grep deployment -A 12

Kopieren Sie das Token und fügen Sie es in das Kubernetes-Dashboard unter Token-Anmeldeoption ein. Sie können dann das Kubernetes-Dashboard verwenden

1
Rewanth Cool

Das Überspringen der Anmeldung wurde aus Sicherheitsgründen standardmäßig deaktiviert. https://github.com/kubernetes/dashboard/issues/2672

fügen Sie in Ihrem Dashboard yaml dieses Argument hinzu 

- --enable-skip-login

um es zurückzubekommen

1
Ravi

Download https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

hinzufügen

type: NodePort for the Service

Führen Sie dann diesen Befehl aus:

kubectl apply -f kubernetes-dashboard.yaml

Finden Sie den freigelegten Port mit dem Befehl:

kubectl get services -n kube-system

Sie sollten das Dashboard unter http: // hostname: exposedport/ Ohne Authentifizierung abrufen können

0
Rajesh Guptan