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.
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
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
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).
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é.
Solution:
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
Deux choses se passent ici
Le moyen habituel de déployer l’application Dashboard est juste
kubectl apply
un fichier YAML extrait de la configuration recommandé au projet Github (pour le tableau de bord)) : /src/deploy/recommended/kubernetes-dashboard.yaml
maître • v1.10.1kubectl proxy
et accédez au tableau de bord par le biais du port 8001 mappé localement .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ésentkubectl get secrets -n kube-system
devrait lister un secret pour ce comptekubectl 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:
kubeconfig
et collez le jeton dans l'utilisateur admin fourni ici