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.
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.
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:]}
- Token na okaziciela , który może być używany na desce rozdzielczej widok logowania .
- nazwa użytkownika/hasło, które mogą być używane na pulpicie nawigacyjnym widok logowania.
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
.
$ 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.
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:"
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/
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}')
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.
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
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
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