Jak zalogować się na pulpicie nawigacyjnym kubernetes?

Właśnie uaktualniłem kubeadm i kubelet do v1.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

Potem 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 taką stronę logowania, której nigdy wcześniej nie spotkałem. Tutaj wpisz opis obrazka wygląda tak istnieją dwa sposoby uwierzytelniania.

Próbowałem wgrać /etc/kubernetes/admin.conf jako kubeconfig, ale się nie udało. Następnie próbowałem użyć tokena, który dostałem od kubeadm token list, aby się zalogować, ale ponownie się nie udało.

Pytanie brzmi, Jak mogę się zalogować na pulpicie nawigacyjnym. Wygląda na to, że dodali dużo mechanizmu bezpieczeństwa niż wcześniej. Dzięki.

Author: ichbinblau, 2017-10-10

6 answers

Od wersji 1.7 Dashboard używa bardziej bezpiecznej konfiguracji. Oznacza to, że przez domyślnie ma minimalny zestaw uprawnień i może być dostępny tylko przez HTTPS. Zaleca się przeczytanie dostępu Kontrola przewodnik przed wykonaniem dalszych kroków.

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

--- Dashboard na Githubie

Token

Tutaj Token może być Static Token, Service Account Token, OpenID Connect Token z Kubernetes uwierzytelnia , ale nie kubeadm Bootstrap Token.

Dzięki kubectl możemy uzyskać konto serwisowe (np. deployment controller) domyślnie utworzony 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

Użytkownik w pliku kubeconfig musi albo username & password lub token, podczas gdy admin.conf mają tylko client-certificate.

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

Alternatywa (niezalecana do produkcji)

Oto dwa sposoby obejścia uwierzytelniania, ale należy zachować ostrożność.

Wdrażaj pulpit nawigacyjny za pomocą HTTP

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

Deska rozdzielcza może być załadowana na http://localhost:8001/ui z kubectl proxy.

[41]}przyznawanie uprawnień administratora do konta usługi dashboardu
$ 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ć opcji Skip na stronie logowania, aby uzyskać dostęp Deska rozdzielcza.

 50
Author: silverfox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-12 22:59:40

TL;DR

Aby otrzymać token w jednym jednym:

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

To zakłada, że Twój ~/.kube / config jest obecny i ważny. Ponadto kubectl config get-contexts wskazuje, że używasz właściwego kontekstu (klastra i przestrzeni nazw) dla Pulpitu Nawigacyjnego, do którego się logujesz.

Wyjaśnienie

Uzyskałem tę odpowiedź z tego, czego nauczyłem się z odpowiedzi @silverfox. To bardzo pouczający zapis. Niestety nie można powiedzieć, jak rzeczywiście umieścić informacje w praktyka. Może robię DevOps zbyt długo, ale myślę, że w shell. O wiele trudniej jest mi uczyć się lub uczyć po angielsku.

Oto jeden z podziałów linii i wcięć dla 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 komendy i są wywoływane w tej kolejności:

  • Line 2 - jest to pierwsze polecenie z Token sekcji @silverfox.
  • linia 3-wypisuje tylko pierwsze pole linii zaczynającej się od deployment-controller-token- (które jest nazwa pod)
  • Line 1 - jest to drugie polecenie z Token sekcji @silverfox.
  • linia 5-wypisuje tylko drugie pole linii, której pierwsze } pole to "token:"
 29
Author: Bruno Bronosky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 15:19:00

Jeśli nie chcesz przyznać uprawnień administratora do konta usługi dashboard, 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

A następnie możesz użyć tokenu właśnie utworzonego konta 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 giantswarm guide - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

 12
Author: SunghoMoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 05:12:31

Łączenie dwóch odpowiedzi: 49992698 oraz 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}')
 3
Author: Abdennour TOUMI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 12:04:24

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

 2
Author: Julien Nyambal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-10 08:07:48

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

Dodaj

type: NodePort for the Service

A następnie uruchom polecenie:

kubectl apply -f kubernetes-dashboard.yaml

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

kubectl get services -n kube-system

Powinieneś być w stanie uzyskać pulpit nawigacyjny w http://hostname:exposedport/ bez autoryzacji

 0
Author: Rajesh Guptan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 17:12:04