Jak zalogować się do panelu Kubernetes?


127

Właśnie zaktualizowałem kubeadm i kubelet do wersji 1.8.0. I zainstaluj pulpit nawigacyjny zgodnie z oficjalnym dokumentem .

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

Następnie uruchomiłem pulpit nawigacyjny, uruchamiając

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

Na szczęście udało mi się uzyskać dostęp do pulpitu nawigacyjnego przez http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Zostałem przekierowany na stronę logowania, taką jak ta, której nigdy wcześniej nie spotkałem. wprowadź opis obrazu tutajWygląda na to, że istnieją dwa sposoby uwierzytelniania.

Próbowałem przesłać /etc/kubernetes/admin.confjako kubeconfig, ale nie udało mi się. Następnie spróbowałem użyć tokena, z którego otrzymałem, kubeadm token listdo zalogowania się, ale znowu się nie udało.

Pytanie brzmi, jak mogę zalogować się na desce rozdzielczej. Wygląda na to, że dodali dużo mechanizmów bezpieczeństwa niż wcześniej. Dzięki.


6
Nie widzę tutaj pytania programistycznego. Spróbuj zamiast tego serverfault.com.
Jolta

Jeśli NIE jesteś na hoście lokalnym, może być wymagane użycie tylko https, w przeciwnym razie formularz logowania po cichu nie powiedzie się (bez błędu msg). Szczegóły: stackoverflow.com/questions/53957413/…
Putnik

Musisz wygenerować token, postępuj zgodnie z tym przewodnikiem - jhooq.com/setting-up-kubernetes-dashboard
Rahul

1
@Jolta Devops jest teraz zajęciem programistycznym dzięki kubernetes, zmierzysz się z tym;)
Fabien Quatravaux

Odpowiedzi:


165

Od wersji 1.7 Dashboard obsługuje uwierzytelnianie użytkowników na podstawie:

- Pulpit nawigacyjny na Github

Znak

Tutaj Tokenmoże być Static Token, Service Account Token, OpenID Connect Tokenz Kubernetes autoryzowania , ale nie kubeadm Bootstrap Token.

Za pomocą kubectl możemy domyślnie uzyskać konto usługi (np. Kontroler wdrażania) utworzone w kubernetes.

$ 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

Pulpit nawigacyjny wymaga, aby użytkownik w pliku kubeconfig miał opcję username & passwordlub token, ale admin.conftylko client-certificate. Możesz edytować plik konfiguracyjny, aby dodać token, który został wyodrębniony przy użyciu powyższej metody.

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

Alternatywa (niezalecana do produkcji)

Oto dwa sposoby na ominięcie uwierzytelniania, ale zachowaj ostrożność.

Wdróż pulpit nawigacyjny za pomocą protokołu HTTP

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

Pulpit nawigacyjny można załadować pod adresem http: // localhost: 8001 / ui z kubectl proxy.

Przyznawanie uprawnień administratora do konta usługi Dashboard

$ 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

Następnie możesz użyć Skipopcji na stronie logowania, aby uzyskać dostęp do Dashboardu.

Jeśli używasz pulpitu nawigacyjnego w wersji 1.10.1 lub nowszej, musisz również dodać --enable-skip-loginargumenty wiersza poleceń wdrożenia. Możesz to zrobić, dodając go do pliku argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Przykład:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

3
Czy możesz podać przykład, jak stworzyć użytkownika, a następnie zalogować się za pomocą tokena? Nadal nie wiem, jak używać tokena, zachowuj się jak użytkownik.
xren

Zobacz statyczny plik tokena w Kubernetes Authenticating
silverfox

97

TL; DR

Aby otrzymać token w jednym onelinerze:

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

Zakłada się, że twój ~ / .kube / config jest obecny i ważny. kubectl config get-contextsOznacza to również, że używasz właściwego kontekstu (klastra i przestrzeni nazw) dla pulpitu nawigacyjnego, do którego się logujesz.

Wyjaśnienie

Wyprowadziłem tę odpowiedź z tego, czego nauczyłem się z odpowiedzi @ silverfox. To bardzo pouczający opis. Niestety nie jest w stanie powiedzieć, jak faktycznie zastosować te informacje w praktyce. Może zbyt długo zajmowałem się DevOps, ale myślę w powłoce. Dużo trudniej jest mi uczyć się lub nauczać po angielsku.

Oto ten oneliner z podziałami linii i wcięciami dla większej czytelności:

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

Istnieją 4 różne polecenia, które są wywoływane w następującej kolejności:

  • Linia 2 - To jest pierwsze polecenie z sekcji Token @ silverfox .
  • Linia 3 - Drukuj tylko pierwsze pole linii zaczynającej się od deployment-controller-token-(jest to nazwa kapsuły)
  • Linia 1 - To jest drugie polecenie z sekcji Token @ silverfox .
  • Linia 5 - drukuj tylko drugie pole wiersza, którego pierwszym polem jest „token:”

2
Czy istnieje odpowiednik programu PowerShell dla awk?
channel_tape_coder

1
@duct_tape_coder po prostu kubectl -n kube-system pobierz sekrety i znajdź tokenm o nazwie deployment-controller-token-SOMEHASH, potem po prostu kubectl -n kube-system opisz tajne wdrożenie-kontroler-token-SOMEHASH. To właśnie robi awk.
kubity

2
Świetna odpowiedź. Aby zrobić jeszcze jeden krok: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Lub kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
wrzuć

@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)z github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik

49

Jeśli nie chcesz przyznawać uprawnień administratora do konta usługi pulpitu nawigacyjnego, możesz utworzyć konto usługi administratora klastra.

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

Następnie możesz użyć tokenu właśnie utworzonego konta usługi administratora klastra.

$ 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

Zacytowałem to z przewodnika giantswarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/


5
Ten działał dobrze dla mnie, podczas gdy zaakceptowaną odpowiedzią było logowanie mnie, ale z pewnymi błędami autoryzacji.
ZedTuX

3
Zwróć uwagę, że to polecenie daje kontu usługi wiele praw i może nie być zalecane w środowisku produkcyjnym.
X. Wang

4
może chciałbym dodać konto serwisowe pod kube-system również dlatego, że to tutaj mieszka deska rozdzielcza
atomaras

Pracował dla mnie! Udostępniłem usługę na porcie 8001 i użyłem tunelu SSH, aby uzyskać dostęp z mojego lokalnego komputera.
Anuradha Fernando

18

Łącząc dwie odpowiedzi: 49992698 i 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}')

8

Nie wymaga objaśnień, prosta jedna linijka do wyodrębnienia tokena do logowania kubernetes do dashboardu.

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

Skopiuj token i wklej go na pulpicie kubernetes pod opcją logowania tokena i możesz korzystać z panelu kubernetes


5

Wszystkie poprzednie odpowiedzi są dla mnie dobre. Ale prosta odpowiedź z mojej strony pochodziłaby z https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Po prostu użyj kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Będziesz mieć wiele wartości dla niektórych przycisków ( Name, Namespace, Labels, ..., token). Najważniejsze jest to, tokenco odpowiada Twojemu imieniu. skopiuj ten token i wklej go w polu tokena. Mam nadzieję że to pomoże.


Po wypróbowaniu kilku z powyższych odpowiedzi ta jedna odpowiedź zadziałała. Skopiowałem token, wkleiłem go i presto, jestem w
środku

5

Musisz wykonać te kroki przed uwierzytelnieniem tokena

  1. Utwórz konto usługi administratora klastra

    kubectl create serviceaccount dashboard -n default
    
  2. Dodaj reguły powiązań klastra do swojego konta pulpitu nawigacyjnego

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Zdobądź tajny token za pomocą tego polecenia

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Wybierz uwierzytelnianie tokenu na stronie logowania do panelu Kubernetes wprowadź opis obrazu tutaj

  5. Teraz możesz się zalogować


0

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

Dodaj

type: NodePort for the Service

A następnie uruchom to polecenie:

kubectl apply -f kubernetes-dashboard.yaml

Znajdź odsłonięty port za pomocą polecenia:

kubectl get services -n kube-system

Pulpit nawigacyjny powinien być dostępny pod adresem http: // nazwa_hosta: eksponowany port / bez uwierzytelniania


To jest absolutnie okropna rada. Nawet jeśli jest technicznie poprawne
Christopher Thomas

0

Pomijanie logowania zostało domyślnie wyłączone ze względów bezpieczeństwa. https://github.com/kubernetes/dashboard/issues/2672

w swoim dashboardzie yaml dodaj ten argument

- --enable-skip-login

odzyskać to


1
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Stefan Becker

1
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
Rick

@StefanBecker link nie jest odpowiedzią, ale źródłem do udowodnienia The skip login has been disabled by default due to security issues. Próba odpowiedzi brzmi - --enable-skip-login. Może to nie jest najlepsza odpowiedź, ale to nie jest tylko odpowiedź na link.
derHugo

@Rick link nie jest odpowiedzią, ale źródłem do udowodnienia The skip login has been disabled by default due to security issues. Próba odpowiedzi brzmi - --enable-skip-login. Może to nie jest najlepsza odpowiedź, ale to nie jest tylko odpowiedź na link.
derHugo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.