Wie melde ich mich im kubernetes Dashboard an?

127

Ich habe gerade kubeadm und kubelet auf v1.8.0 aktualisiert. Installieren Sie das Dashboard gemäß dem offiziellen Dokument .

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

Danach habe ich das Dashboard durch 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 auf eine Anmeldeseite wie diese weitergeleitet, die ich noch nie zuvor getroffen hatte. Geben Sie hier die Bildbeschreibung einEs sieht so aus, als gäbe es zwei Möglichkeiten der Authentifizierung.

Ich habe versucht, die /etc/kubernetes/admin.confals kubeconfig hochzuladen, bin aber fehlgeschlagen. Dann habe ich versucht, das Token zu verwenden, von dem ich mich angemeldet habe kubeadm token list, aber es ist erneut fehlgeschlagen.

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

ichbinblau
quelle
6
Ich sehe hier keine Programmierfrage. Versuchen Sie stattdessen serverfault.com.
Jolta
Wenn Sie NICHT auf localhost sind, müssen Sie möglicherweise nur https verwenden. Andernfalls schlägt das Anmeldeformular unbemerkt fehl (ohne Fehlermeldung). Details: stackoverflow.com/questions/53957413/…
Putnik
Sie müssen ein Token generieren, folgen Sie dieser Anleitung - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh
1
@Jolta Devops ist jetzt eine Programmieraktivität dank Kubernetes, Sie werden es zu Gesicht bekommen;)
Fabien Quatravaux

Antworten:

165

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

- - Dashboard auf Github

Zeichen

Hier Tokenkann sein Static Token, Service Account Token, OpenID Connect Tokenvon Kubernetes Authentifizieren , aber nicht die kubeadm Bootstrap Token.

Mit kubectl können wir ein Dienstkonto (z. B. Deployment Controller) erhalten, das standardmäßig 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

Das Dashboard benötigt den Benutzer in der kubeconfig-Datei entweder username & passwordoder token, hat aber admin.confnur client-certificate. Sie können die Konfigurationsdatei bearbeiten, um das Token hinzuzufügen, das mit der oben beschriebenen Methode extrahiert wurde.

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

Alternative (Nicht für die Produktion empfohlen)

Hier sind zwei Möglichkeiten, um die Authentifizierung zu umgehen, aber zur Vorsicht zu 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 geladen werdenkubectl proxy .

Gewähren von Administratorrechten für das Dashboard-Dienstkonto

$ 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 SkipOption auf der Anmeldeseite verwenden, um auf das Dashboard zuzugreifen.

Wenn Sie die Dashboard-Version v1.10.1 oder höher verwenden, müssen Sie auch --enable-skip-logindie Befehlszeilenargumente der Bereitstellung ergänzen . Sie können dies tun , um es in die durch Zugabe von argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Beispiel:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
Silber Fuchs
quelle
3
Können Sie uns ein Beispiel geben, wie Sie einen Benutzer erstellen und sich dann mit einem Token anmelden? Ich weiß immer noch nicht, wie man Token benutzt, um sich wie ein Benutzer zu verhalten.
Xren
Siehe Statische Token-Datei in Kubernetes Authentifizierung
Silverfox
96

TL; DR

So erhalten Sie den Token in einem einzigen Oneliner:

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. Und auch daskubectl config get-contexts dass Sie den richtigen Kontext (Cluster und Namespace) für das Dashboard verwenden, bei dem Sie sich anmelden.

Erläuterung

Ich habe diese Antwort aus dem abgeleitet, was ich aus der Antwort von @ silverfox gelernt habe. Das ist eine sehr informative Zusammenfassung. Leider kann man nicht sagen, wie man die Informationen tatsächlich in die Praxis umsetzt. Vielleicht habe ich DevOps zu lange gemacht, aber ich denke in Shell. Es ist viel schwieriger für mich, Englisch zu lernen oder zu lehren.

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 aus dem Token- Abschnitt von @ silverfox .
  • Zeile 3 - Druckt nur das erste Feld der Zeile, das mit beginnt deployment-controller-token-(dies ist der Pod-Name).
  • Zeile 1 - Dies ist der zweite Befehl aus dem Token- Abschnitt von @ silverfox .
  • Zeile 5 - Gibt nur das zweite Feld der Zeile aus, dessen erstes Feld "Token:" ist.
Bruno Bronosky
quelle
2
Gibt es eine Powershell, die awk entspricht?
duct_tape_coder
1
@duct_tape_coder nur kubectl -n kube-system erhalte Geheimnisse und finde das Tokenm mit dem Namen Deployment-Controller-Token-SOMEHASH, danach beschreibe nur kubectl -n kube-System das geheime Deployment-Controller-Token-SOMEHASH. Das macht der Awk.
Qubits
2
Gute Antwort. Um es noch einen Schritt weiter zu machen: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Oder schieben Sie es direkt in Ihre Zwischenablage kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
javajon
@duct_tape_coder kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)von github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik
48

Wenn Sie dem Dashboard-Dienstkonto keine Administratorberechtigung erteilen möchten, können Sie ein Cluster-Verwaltungsdienstkonto 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-Verwaltungsdienstkontos 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 aus dem giantswarm-Leitfaden zitiert - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

SunghoMoon
quelle
5
Dieser funktionierte gut für mich, während die akzeptierte Antwort in mir unterschrieben war, aber mit einigen Autorisierungsfehlern.
ZedTuX
3
Beachten Sie, dass dieser Befehl dem Dienstkonto viele Rechte einräumt und in einer Produktionsumgebung möglicherweise nicht ratsam ist.
X. Wang
4
Vielleicht möchten Sie das Servicekonto auch unter kube-system hinzufügen, da hier das Dashboard lebt
atomaras
Hat für mich gearbeitet! Ich habe den Dienst mit Port 8001 verfügbar gemacht und einen SSH-Tunnel verwendet, um von meinem lokalen Computer aus darauf zuzugreifen.
Anuradha Fernando
18

Zwei Antworten kombinieren : 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}')
Abdennour TOUMI
quelle
8

Ein selbsterklärender einfacher Einzeiler zum Extrahieren von Token für die Kubernetes-Dashboard-Anmeldung.

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

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

Rewanth Cool
quelle
5

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

Julien Nyambal
quelle
Nachdem Sie einige der obigen Antworten ausprobiert hatten, funktionierte diese eine Antwort. Ich habe einen Token kopiert, eingefügt und
bin sofort fertig
5

Sie müssen diese Schritte vor der Tokenauthentifizierung ausführen

  1. Erstellen Sie ein Cluster Admin-Dienstkonto

    kubectl create serviceaccount dashboard -n default
    
  2. Fügen Sie die Clusterbindungsregeln zu Ihrem Dashboard-Konto hinzu

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Holen Sie sich das geheime Token mit diesem Befehl

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Wählen Sie die Token-Authentifizierung auf der Anmeldeseite des Kubernetes-Dashboards Geben Sie hier die Bildbeschreibung ein

  5. Jetzt können Sie sich anmelden

UDIT JOSHI
quelle
0

Laden Sie https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml herunter

hinzufügen

type: NodePort for the Service

Führen Sie dann diesen Befehl aus:

kubectl apply -f kubernetes-dashboard.yaml

Suchen Sie den exponierten Port mit dem folgenden Befehl:

kubectl get services -n kube-system

Sie sollten in der Lage sein, das Dashboard unter http: // Hostname: Exposedport / ohne Authentifizierung abzurufen

Rajesh Guptan
quelle
Dies ist ein absolut schrecklicher Rat. Auch wenn es technisch korrekt ist
Christopher Thomas
0

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

Ravi
quelle
1
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Stefan Becker
1
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - Aus dem Rückblick
Rick
@StefanBecker der Link ist nicht die Antwort, sondern die Quelle zu beweisen The skip login has been disabled by default due to security issues. Der Antwortversuch ist - --enable-skip-login. Es ist vielleicht nicht die beste Antwort, aber dies ist keine Link-Antwort.
derHugo
@ Rick der Link ist nicht die Antwort, sondern die Quelle zu beweisen The skip login has been disabled by default due to security issues. Der Antwortversuch ist - --enable-skip-login. Es ist vielleicht nicht die beste Antwort, aber dies ist keine Link-Antwort.
derHugo