Comment se connecter au tableau de bord Kubernetes?

127

Je viens de mettre à jour kubeadm et kubelet vers la v1.8.0. Et installez le tableau de bord en suivant le document officiel .

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

Après cela, j'ai démarré le tableau de bord en exécutant

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

Puis, heureusement, j'ai pu accéder au tableau de bord via http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

J'ai été redirigé vers une page de connexion comme celle-ci que je n'avais jamais rencontrée auparavant. entrez la description de l'image iciIl semble qu'il existe deux méthodes d'authentification.

J'ai essayé de télécharger le /etc/kubernetes/admin.confcomme kubeconfig mais j'ai échoué. Ensuite, j'ai essayé d'utiliser le jeton que j'ai obtenu kubeadm token listpour me connecter, mais j'ai de nouveau échoué.

La question est de savoir comment je peux me connecter au tableau de bord. Il semble qu'ils aient ajouté beaucoup de mécanismes de sécurité qu'auparavant. Merci.

ichbinblau
la source
6
Je ne vois pas de question de programmation ici. Essayez plutôt serverfault.com.
Jolta
Si vous n'êtes PAS sur localhost, vous devrez peut-être utiliser uniquement https, sinon le formulaire de connexion échouera silencieusement (sans erreur msg). Détails: stackoverflow.com/questions/53957413/…
Putnik
Vous devez générer un jeton, suivez ce guide - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh
1
@Jolta Devops est désormais une activité de programmation grâce à kubernetes, vous allez y faire face;)
Fabien Quatravaux

Réponses:

165

À partir de la version 1.7, le tableau de bord prend en charge l'authentification des utilisateurs basée sur:

- Tableau de bord sur Github

Jeton

Ici Tokenpeut être Static Token, Service Account Token, OpenID Connect Tokende Kubernetes Authentifier , mais pas le kubeadm Bootstrap Token.

Avec kubectl, nous pouvons obtenir un compte de service (par exemple, un contrôleur de déploiement) créé dans kubernetes par défaut.

$ 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

Le tableau de bord a besoin que l'utilisateur dans le fichier kubeconfig ait soit username & passwordou token, mais a admin.confseulement client-certificate. Vous pouvez modifier le fichier de configuration pour ajouter le jeton qui a été extrait à l'aide de la méthode ci-dessus.

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

Alternative (non recommandé pour la production)

Voici deux façons de contourner l'authentification, mais à utiliser avec prudence.

Déployer le tableau de bord avec HTTP

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

Le tableau de bord peut être chargé à l' adresse http: // localhost: 8001 / ui avec kubectl proxy.

Accorder des privilèges d'administrateur au compte de service de 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

Ensuite, vous pouvez utiliser l' Skipoption sur la page de connexion pour accéder au tableau de bord.

Si vous utilisez la version v1.10.1 ou ultérieure du tableau de bord, vous devez également ajouter --enable-skip-loginles arguments de ligne de commande du déploiement. Vous pouvez le faire en l'ajoutant au fichier argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Exemple:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
silverfox
la source
3
Pouvez-vous nous donner un exemple comment créer un utilisateur puis vous connecter avec un jeton? Je ne sais toujours pas comment utiliser le jeton agissant comme un utilisateur.
xren
Voir le fichier de jeton statique dans l'authentification
Kubernetes
97

TL; DR

Pour obtenir le jeton dans une seule ligne:

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

Cela suppose que votre ~ / .kube / config est présent et valide. Et cela kubectl config get-contextsindique également que vous utilisez le bon contexte (cluster et espace de noms) pour le tableau de bord auquel vous vous connectez.

Explication

J'ai tiré cette réponse de ce que j'ai appris de la réponse de @ silverfox. C'est un article très instructif. Malheureusement, il ne vous dit pas comment mettre réellement les informations en pratique. Peut-être que je fais du DevOps depuis trop longtemps, mais je pense en shell. C'est beaucoup plus difficile pour moi d'apprendre ou d'enseigner en anglais.

Voici cet oneliner avec des sauts de ligne et des retraits pour la lisibilité:

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

Il existe 4 commandes distinctes et elles sont appelées dans cet ordre:

  • Ligne 2 - Ceci est la première commande de la section Token de @ silverfox .
  • Ligne 3 - N'imprimez que le premier champ de la ligne commençant par deployment-controller-token-(qui est le nom du pod)
  • Ligne 1 - Ceci est la deuxième commande de la section Token de @ silverfox .
  • Ligne 5 - N'imprimez que le deuxième champ de la ligne dont le premier champ est "token:"
Bruno Bronosky
la source
2
Existe-t-il un PowerShell équivalent à awk?
duct_tape_coder
1
@duct_tape_coder juste kubectl -n kube-system récupère les secrets et trouve le tokenm avec le nom deployment-controller-token-SOMEHASH, ensuite juste kubectl -n kube-system décrit le secret deployment-controller-token-SOMEHASH. C'est ce que fait le awk.
qubits
2
Très bonne réponse. Pour faire un pas de plus: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' Ou poussez à droite dans votre pressekubectl 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)de github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik
48

Si vous ne souhaitez pas accorder l'autorisation d'administrateur au compte de service de tableau de bord, vous pouvez créer un compte de service d'administrateur de cluster.

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

Et puis, vous pouvez utiliser le jeton du compte de service d'administrateur de cluster qui vient d'être créé.

$ 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

Je l'ai cité dans le guide giantswarm - https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

SunghoMoon
la source
5
Celui-ci fonctionnait très bien pour moi alors que la réponse acceptée était de me connecter, mais avec quelques erreurs d'autorisation.
ZedTuX
3
Notez que cette commande donne au compte de service de nombreux droits et peut ne pas être conseillée dans un environnement de production.
X. Wang
4
vous voudrez peut-être ajouter le compte de service sous kube-system aussi puisque c'est là que vit le tableau de bord
atomaras
A travaillé pour moi! J'exposais le service avec le port 8001 et j'ai utilisé un tunnel SSH pour accéder à partir de ma machine locale.
Anuradha Fernando
18

Combinant deux réponses: 49992698 et 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
la source
8

Un simple one-liner explicite pour extraire le jeton pour la connexion au tableau de bord kubernetes.

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

Copiez le jeton et collez-le sur le tableau de bord kubernetes sous l'option de connexion par jeton et vous êtes prêt à utiliser le tableau de bord kubernetes

Rewanth Cool
la source
5

Toutes les réponses précédentes sont bonnes pour moi. Mais une réponse simple de mon côté viendrait de https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Utilisez simplement kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Vous aurez beaucoup de valeurs pour certaines touches ( Name, Namespace, Labels, ..., token). Le plus important est celui tokenqui correspond à votre nom. copiez ce jeton et collez-le dans la boîte de jetons. J'espère que cela t'aides.

Julien Nyambal
la source
Après avoir essayé plusieurs des réponses ci-dessus, cette réponse a fonctionné. J'ai copié un jeton, je l'ai collé et hop, je suis
dedans
5

Vous devez suivre ces étapes avant l'authentification par jeton

  1. Créer un compte de service d'administration de cluster

    kubectl create serviceaccount dashboard -n default
    
  2. Ajouter les règles de liaison de cluster à votre compte de tableau de bord

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Obtenez le jeton secret avec cette commande

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Choisissez l'authentification par jeton dans la page de connexion du tableau de bord Kubernetes entrez la description de l'image ici

  5. Vous pouvez maintenant vous connecter

UDIT JOSHI
la source
0

Téléchargez https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

ajouter

type: NodePort for the Service

Et puis exécutez cette commande:

kubectl apply -f kubernetes-dashboard.yaml

Trouvez le port exposé avec la commande:

kubectl get services -n kube-system

Vous devriez pouvoir obtenir le tableau de bord à l' adresse http: // hostname: exposéport / sans authentification

Rajesh Guptan
la source
C'est un conseil absolument terrible. Même si c'est techniquement correct
Christopher Thomas
0

Le saut de connexion a été désactivé par défaut en raison de problèmes de sécurité. https://github.com/kubernetes/dashboard/issues/2672

dans votre tableau de bord yaml ajoutez cet argument

- --enable-skip-login

pour le récupérer

Ravi
la source
1
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change.
Stefan Becker
1
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change. - De l'avis
Rick
@StefanBecker le lien n'est pas la réponse mais la source à prouver The skip login has been disabled by default due to security issues. La tentative de réponse est - --enable-skip-login. Ce n'est peut-être pas la meilleure réponse, mais ce n'est pas seulement un lien.
derHugo
@Rick le lien n'est pas la réponse mais la source à prouver The skip login has been disabled by default due to security issues. La tentative de réponse est - --enable-skip-login. Ce n'est peut-être pas la meilleure réponse, mais ce n'est pas seulement un lien.
derHugo