Come accedere al dashboard di Kubernetes?


127

Ho appena aggiornato kubeadm e kubelet alla v1.8.0. E installa la dashboard seguendo il documento ufficiale .

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

Successivamente, ho avviato il dashboard eseguendo

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

Quindi fortunatamente, sono stato in grado di accedere alla dashboard tramite http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Sono stato reindirizzato a una pagina di accesso come questa che non avevo mai incontrato prima. inserisci qui la descrizione dell'immagineSembra che ci siano due modi di autenticazione.

Ho provato a caricare il /etc/kubernetes/admin.confcome kubeconfig ma non è riuscito. Quindi ho provato a utilizzare il token da cui ho ricevuto kubeadm token listper accedere ma non è riuscito di nuovo.

La domanda è come posso accedere alla dashboard. Sembra che abbiano aggiunto molti meccanismi di sicurezza rispetto a prima. Grazie.


6
Non vedo una domanda di programmazione qui. Prova invece serverfault.com.
Jolta

Se NON sei su localhost, ti potrebbe essere richiesto di utilizzare solo https, altrimenti il ​​modulo di accesso fallirà silenziosamente (senza err msg). Dettagli: stackoverflow.com/questions/53957413/…
Putnik

Devi generare il token, segui questa guida - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh

1
@Jolta Devops è ora un'attività di programmazione grazie a kubernetes, dovrai affrontarlo;)
Fabien Quatravaux

Risposte:


165

A partire dalla versione 1.7 Dashboard supporta l'autenticazione dell'utente basata su:

- Dashboard su Github

Gettone

Qui Tokenpuò essere Static Token, Service Account Token, OpenID Connect Tokenda kubernetes Autenticazione , ma non il kubeadm Bootstrap Token.

Con kubectl, possiamo ottenere un account di servizio (ad es. Controller di distribuzione) creato in kubernetes per impostazione predefinita.

$ 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

Il dashboard richiede che l'utente nel file kubeconfig abbia o username & passwordo token, ma admin.confsolo client-certificate. È possibile modificare il file di configurazione per aggiungere il token che è stato estratto utilizzando il metodo sopra.

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

Alternativa (non consigliata per la produzione)

Qui ci sono due modi per aggirare l'autenticazione, ma usare per cautela.

Distribuisci dashboard con HTTP

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

Dashboard può essere caricato su http: // localhost: 8001 / ui con kubectl proxy.

Concessione dei privilegi di amministratore all'account di servizio di 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

Successivamente è possibile utilizzare l' Skipopzione nella pagina di accesso per accedere alla dashboard.

Se si utilizza la versione del dashboard v1.10.1 o successiva, è necessario aggiungere anche --enable-skip-logingli argomenti della riga di comando della distribuzione. Puoi farlo aggiungendolo al file argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Esempio:

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

3
Puoi farci un esempio su come creare un utente e poi accedere con il token? Non so ancora come usare il token per agire come un utente.
xren

Vedere File token statico nell'autenticazione Kubernetes
silverfox

97

TL; DR

Per ottenere il token in un unico oneliner:

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

Questo presuppone che il tuo ~ / .kube / config sia presente e valido. Inoltre, ciò kubectl config get-contextsindica che stai utilizzando il contesto corretto (cluster e spazio dei nomi) per il dashboard a cui stai effettuando l'accesso.

Spiegazione

Ho derivato questa risposta da ciò che ho imparato dalla risposta di @ silverfox. Questo è un articolo molto informativo. Sfortunatamente non è sufficiente dirti come mettere effettivamente in pratica le informazioni. Forse sto facendo DevOps troppo a lungo, ma penso in shell. È molto più difficile per me imparare o insegnare in inglese.

Ecco quell'oneliner con interruzioni di riga e rientri per la leggibilità:

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

Ci sono 4 comandi distinti e vengono chiamati in questo ordine:

  • Riga 2: questo è il primo comando dalla sezione Token di @ silverfox .
  • Riga 3: stampa solo il primo campo della riga che inizia con deployment-controller-token-(che è il nome del pod)
  • Riga 1: questo è il secondo comando dalla sezione Token di @ silverfox .
  • Riga 5: stampa solo il secondo campo della riga il cui primo campo è "token:"

2
Esiste un PowerShell equivalente a awk?
duct_tape_coder

1
@duct_tape_coder solo kubectl -n kube-system ottiene i segreti e trova il token con nome deployment-controller-token-SOMEHASH, successivamente solo kubectl -n kube-system descrive la distribuzione segreta-controller-token-SOMEHASH. Questo è ciò che fa l'awk.
qubit

2
Bella risposta. Per fare un altro passo: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' oppure kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
premi

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

48

Se non desideri concedere l'autorizzazione di amministratore all'account del servizio del dashboard, puoi creare un account del servizio di amministrazione del cluster.

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

Quindi, puoi utilizzare il token dell'account del servizio di amministrazione del cluster appena creato.

$ 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

L'ho citato dalla guida di giantswarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/


5
Questo ha funzionato bene per me mentre la risposta accettata era firmata da me ma con alcuni errori di autorizzazione.
ZedTuX

3
Si noti che questo comando concede all'account di servizio molti diritti e potrebbe non essere consigliabile in un ambiente di produzione.
X. Wang

4
potrei voler aggiungere l'account di servizio sotto il sistema kube anche poiché è qui che risiede il dashboard
atomaras

Ha funzionato per me! stavo esponendo il servizio con la porta 8001 e ho utilizzato un tunnel SSH per accedere dalla mia macchina locale.
Anuradha Fernando

18

Combinando due risposte: 49992698 e 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

Un semplice one-liner autoesplicativo per estrarre il token per l'accesso al dashboard di Kubernetes.

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

Copia il token e incollalo nella dashboard di Kubernetes sotto l'opzione di accesso del token e sei a posto per usare la dashboard di Kubernetes


5

Tutte le risposte precedenti sono buone con me. Ma una risposta diretta da parte mia verrebbe da https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Basta usare kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Avrete molti valori per alcuni tasti ( Name, Namespace, Labels, ..., token). Il più importante è quello tokenche corrisponde al tuo nome. copia quel token e incollalo nella casella del token. Spero che questo ti aiuti.


Dopo aver provato molte delle risposte sopra, questa risposta ha funzionato. Ho copiato un token, l'ho incollato e presto, ci sono.
CENTURION

5

È necessario seguire questi passaggi prima dell'autenticazione del token

  1. Crea un account del servizio di amministrazione del cluster

    kubectl create serviceaccount dashboard -n default
    
  2. Aggiungi le regole di associazione del cluster al tuo account dashboard

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Ottieni il token segreto con questo comando

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Scegli l'autenticazione tramite token nella pagina di accesso del dashboard di Kubernetes inserisci qui la descrizione dell'immagine

  5. Ora puoi accedere


0

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

Inserisci

type: NodePort for the Service

E poi esegui questo comando:

kubectl apply -f kubernetes-dashboard.yaml

Trova la porta esposta con il comando:

kubectl get services -n kube-system

Dovresti essere in grado di ottenere il dashboard su http: // hostname: editedport / senza autenticazione


Questo è un consiglio assolutamente terribile. Anche se è tecnicamente corretto
Christopher Thomas il

0

L'accesso con salto è stato disabilitato per impostazione predefinita a causa di problemi di sicurezza. https://github.com/kubernetes/dashboard/issues/2672

nella tua dashboard yaml aggiungi questo arg

- --enable-skip-login

per riaverlo


1
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Stefan Becker

1
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - Dalla recensione
Rick

@StefanBecker il link non è la risposta ma la fonte da provare The skip login has been disabled by default due to security issues. Il tentativo di risposta è - --enable-skip-login. Potrebbe non essere la risposta migliore, ma questa non è solo una risposta di collegamento.
derHugo

@Rick il link non è la risposta ma la fonte da provare The skip login has been disabled by default due to security issues. Il tentativo di risposta è - --enable-skip-login. Potrebbe non essere la risposta migliore, ma questa non è solo una risposta di collegamento.
derHugo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.