195 votes

Comment se connecter au tableau de bord kubernetes?

Je viens de mettre kubeadm et kubelet pour v1.8.0. Et installer le tableau de bord à la suite de la officielle du document.

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

Après ça, j'ai commencé le tableau de bord en cours d'exécution

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

Alors heureusement, j'ai pu accéder au tableau de bord thru 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 ceci que je n'avais jamais rencontré avant. enter image description here On dirait qu'il y a deux façons d'authentification.

J'ai essayé de télécharger l' /etc/kubernetes/admin.conf comme le kubeconfig mais ai échoué. Ensuite, j'ai essayé d'utiliser le jeton que j'ai eu de kubeadm token list à la signer, mais a échoué à nouveau.

La question est de savoir comment je peux le signer dans le tableau de bord. On dirait qu'ils ajoutent beaucoup de mécanisme de sécurité qu'avant. Merci.

247voto

silverfox Points 3344

Depuis la version 1.7 tableau de bord utilise plus sûr de l'installation. Cela signifie, que par par défaut on a un minimum de privilèges et ne peut être consulté sur HTTPS. Il est recommandé de lire l'Accès Contrôle guide avant d'effectuer d'autres mesures.

À partir de la version 1.7 tableau de bord prend en charge l'authentification de l'utilisateur basée sur:

--- Tableau de bord sur Github

Jeton

Ici, Token peut Static Token, Service Account Token, OpenID Connect Token de Kubernetes l'Authentification, mais pas le kubeadm Bootstrap Token.

Avec kubectl, nous pouvons obtenir un compte de service (par exemple. déploiement contrôleur) créé en 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

Utilisateur dans kubeconfig fichier besoin d' username & password ou token, tandis que l' admin.conf seulement client-certificate.

$ 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 précaution.

Déployer un tableau de bord avec HTTP

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

Tableau de bord peut être chargé à http://localhost:8001/ui avec kubectl proxy.

L'octroi de privilèges d'administrateur pour tableau de bord du Compte de Service

$ 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 Skip option sur la page de login d'accès tableau de bord.

Si vous utilisez le tableau de bord de la version v1.10.1 ou une version ultérieure, vous devez également ajouter --enable-skip-login pour le déploiement arguments de ligne de commande. Vous pouvez le faire en ajoutant à l' args en 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

149voto

Richard Bronosky Points 3163

TL;DR

Pour obtenir le jeton dans un seul oneliner:

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 aussi qu' kubectl config get-contexts indique que vous utilisez le bon contexte (le cluster et l'espace de noms) pour le tableau de bord de vous connecter.

Explication

J'ai tiré de cette réponse de ce que j'ai appris de @silverfox de réponse. C'est un très instructif à écrire. Malheureusement, il tombe à court de vous dire comment mettre l'information dans la pratique. Peut-être que j'ai fait DevOps trop long, mais je pense que dans le shell. Il est beaucoup plus difficile pour moi d'apprendre ou d'enseigner en anglais.

Ici, c'est que oneliner avec des sauts de ligne et des tirets pour plus de 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 ils ont, dans cet ordre:

  • Ligne 2 - C'est la première commande de @silverfox du Jeton de la section.
  • Ligne 3 - Imprimer uniquement le premier champ de la ligne commençant par deployment-controller-token- (ce qui est la gousse de nom)
  • Ligne 1 - C'est la deuxième commande de @silverfox du Jeton de la section.
  • Ligne 5 - Imprimer uniquement le deuxième champ de la ligne dont le premier champ est de jeton":"

58voto

SunghoMoon Points 418

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/

29voto

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}')
 

9voto

Julien Nyambal Points 121

Toutes les réponses précédentes sont bonnes pour moi. Mais tout droit vers l'avant de répondre sur mon côté viendrait de https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token. Suffit d'utiliser 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 l' token qui correspond à votre nom. copiez le jeton et le coller dans le jeton de la boîte. Espérons que cette aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X