web-dev-qa-db-fra.com

Comment se connecter au tableau de bord kubernetes?

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

$ 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='^*$'

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.  enter image description here On dirait qu'il y a deux moyens d'authentification. 

J'ai essayé de télécharger le /etc/kubernetes/admin.conf en tant que kubeconfig mais j'ai échoué. Ensuite, j'ai essayé d'utiliser le jeton que j'ai reçu de kubeadm token list pour me connecter mais j'ai échoué à nouveau. 

La question est de savoir comment je peux me connecter au tableau de bord. On dirait qu'ils ont ajouté beaucoup de mécanisme de sécurité qu'auparavant. Merci. 

51
ichbinblau

Depuis la version 1.7, Dashboard utilise une configuration plus sécurisée. Cela signifie que par Par défaut, il dispose d'un ensemble minimal de privilèges et est accessible uniquement via HTTPS. Il est recommandé de lire Accès Contrôle guide avant d'effectuer toute autre étape.

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

--- Tableau de bord sur Github

Jeton

Ici Token peut être Static Token, Service Account Token, OpenID Connect Token à partir de Kubernetes Authenticating , mais pas le kubeadm Bootstrap Token.

Avec kubectl, nous pouvons obtenir un compte de service (par exemple, 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

L'utilisateur dans le fichier kubeconfig a besoin de username & password ou token, alors que admin.conf n'a que client-certificate.

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

Alternative (Non recommandé pour la production)

Il existe deux façons de contourner l’authentification, mais il convient d’être prudent. 

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.

Octroi de 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

Vous pouvez ensuite utiliser l'option Skip sur la page de connexion pour accéder à Dashboard.

75
silverfox

TL; DR

Pour obtenir le jeton dans un seul doublon:

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. De plus, kubectl config get-contexts indique que vous utilisez le contexte (cluster et espace de noms) correct pour le tableau de bord auquel vous vous connectez.

Explication

J'ai dérivé cette réponse de ce que j'ai appris de la réponse de @ silverfox. C'est une écriture très informative. Malheureusement, cela ne vous dit pas comment mettre réellement ces informations en pratique. Peut-être que je fais DevOps depuis trop longtemps, mais je pense à Shell. C'est beaucoup plus difficile pour moi d'apprendre ou d'enseigner en anglais.

Voici ce que l'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 y a 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'imprime que le deuxième champ de la ligne dont le premier champ est "jeton:"
44
Bruno Bronosky

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'administration 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'administration de cluster que vous venez de créer.

$ 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/

25
SunghoMoon

En 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}')
9
Abdennour TOUMI

Toutes les réponses précédentes sont bonnes pour moi. Mais une réponse directe 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 plusieurs valeurs pour certaines clés (Name, Namespace, Labels, ..., token). Le plus important est la token qui correspond à votre nom. copiez ce jeton et collez-le dans la boîte à jetons. J'espère que cela t'aides.

4
Julien Nyambal

Une ligne simple et intuitive pour extraire un 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 dans le tableau de bord kubernetes sous l'option de connexion au jeton et utilisez le tableau de bord kubernetes.

1
Rewanth Cool

Le login par skip a été désactivé par défaut pour des raisons de sécurité. https://github.com/kubernetes/dashboard/issues/2672

dans votre tableau de bord yaml ajouter cet argument 

- --enable-skip-login

pour le récupérer

1
Ravi

Télécharger 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: // nomhôte: exposéeport/ Sans authentification.

0
Rajesh Guptan