web-dev-qa-db-fra.com

Accès au tableau de bord Kubernetes à l'aide d'un fichier de configuration Données insuffisantes pour créer une structure d'informations d'authentification.

J'essaie d'accéder au tableau de bord kubernetes à l'aide du fichier de configuration. Lors de l’authentification lorsque je sélectionne le fichier de configuration, il donne ‘Not enough data to create auth info structure.’ Bu. Le même fichier de configuration fonctionne pour la commande kubectl.

 enter image description here

voici mon fichier de configuration.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://kubemaster:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

Toute aide pour résoudre ce problème?

MerciSR

11
sfgroups

Après avoir regardé cette réponse Comment se connecter au tableau de bord kubernetes? et le code source figurait l’authentification de kubeconfig.

Après l'installation de kubeadm sur le serveur maître, récupérez le jeton de compte de service default et ajoutez-le au fichier de configuration. Ensuite, utilisez le fichier de configuration pour vous authentifier.

Vous pouvez l'utiliser pour ajouter le jeton.

#!/bin/bash
TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')

kubectl config set-credentials kubernetes-admin --token="${TOKEN}"

votre fichier de configuration devrait ressembler à ceci.

kubectl config view |cut -c1-50|tail -10
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.ey
4
sfgroups

Seules les options d'authentification spécifiées par l'indicateur --authentication-mode sont prises en charge dans le fichier kubeconfig.

Vous pouvez effectuer une authentification avec un jeton (n'importe quel jeton dans l'espace de noms kube-system):

$ kubectl get secrets -n kube-system
$ kubectl get secret $SECRET_NAME -n=kube-system -o json | jq -r '.data["token"]' | base64 -d > user_token.txt

et auth avec le jeton (voir user_token.txt fichier).

9
Arslanbekov

1 - En supposant que l’on a suivi les instructions pour configurer le tableau de bord ici . https://docs.aws.Amazon.com/eks/latest/userguide/dashboard-tutorial.html

2 - Et votre accès kubectl normal fonctionne à partir de la ligne de commande (c’est-à-dire que kubectl get services).

3 - Et vous pouvez vous connecter manuellement au tableau de bord avec le jeton (avec kubectl -n kube-system décris secret ...), en utilisant copier/coller.

4 - Mais maintenant, vous voulez utiliser l'option "Kubeconfig" (au lieu de "Jeton") pour vous connecter au tableau de bord, pour des raisons de simplicité.

 enter image description here

Solution:

  • Recherchez votre utilisateur dans le fichier de configuration utilisé pour accéder au cluster.
  • L'utilisateur est "kubernetes-admin" dans cette question originale.
  • Ajoutez une ligne avec le "jeton:".
  • N'oubliez pas que c'est YAML, utilisez donc des espaces, pas des tabulations.

Voici à quoi cela devrait ressembler ...

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://kubemaster:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: PUT_YOUR_TOKEN_HERE_THAT_YOU_USED_TO_MANUALLY_LOGIN
1
Sagan

Deux choses se passent ici

  • l'application Kubernetes Dashboard a besoin d'un jeton d'authentification
  • et ce jeton d'authentification doit être lié à un compte disposant de privilèges suffisants.

Le moyen habituel de déployer l’application Dashboard est juste

Cependant, cette configuration par défaut est générique et minimale. Il mappe simplement une liaison de rôle avec des privilèges minimaux. Et, en particulier sur DigitalOcean, le fichier kubeconfig fourni lors de la mise en service du cluster ne contient pas le jeton lui-même, qui est nécessaire pour se connecter au tableau de bord.

Ainsi, pour remédier à ces lacunes, nous devons nous assurer qu'il existe un compte doté d'un RoleBinding vers le cluster-admin ClusterRole dans l'espace de noms kube-system. La configuration par défaut mentionnée ci-dessus fournit simplement un lien vers kubernetes-dashboard-minimal. Nous pouvons résoudre ce problème en expliquant explicitement

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

Et nous devons également obtenir le jeton pour ce compte de service ...

  • kubectl get serviceaccount -n kube-system vous listera tous les comptes de service. Vérifiez que celui que vous voulez/créé est présent
  • kubectl get secrets -n kube-system devrait lister un secret pour ce compte
  • et avec kubectl describe secret -n kube-system admin-user-token-XXXXXX vous obtiendrez les informations sur le jeton.

Les autres réponses à cette question fournissent de nombreuses indications sur la manière dont cet accès pourrait être scripté de manière pratique (par exemple, en utilisant awk, en utilisant grep, en utilisant kubectl get avec -o=json et en connectant jq, ou en utilisant -o=jsonpath).

Vous pouvez alors soit:

  • stocke ce jeton dans un fichier texte et télécharge ce
  • éditez votre fichier kubeconfig et collez le jeton dans l'utilisateur admin fourni ici
0
Ichthyo