Tableau de bord Kubernetes - Erreur de serveur inconnue après la connexion


9

J'ai réussi à déployer Kubernetes via Kubespray et tout semble fonctionner correctement. Je peux accéder au cluster via kubectl et lister les nœuds, les pods, les services, les secrets, etc. Il est également possible d'appliquer de nouvelles ressources et le point de terminaison du tableau de bord me donne la page de connexion au tableau de bord.

Je me suis connecté avec des jetons de différents comptes de service (par défaut, kubernetes-dashboard, kubernetes-admin, ...) ... à chaque connexion, j'obtiens les mêmes popups que ceux décrits dans kubespray dashboard warning popups interdits par exemple.

J'ai donc appliqué le clusterrolebinding pour le compte de service par défaut comme décrit. Lorsque je me connecte maintenant avec le jeton de compte par défaut, je ne reçois qu'un

Unknown Server Error (404)
the server could not find the requested resource
Redirecting to previous state in 3 seconds...

boîte qui me redirige ensuite vers la page de connexion. C'est le même comportement si je me connecte à Dashboard via kubectl proxy. L'accès est HTTPS sur une IP de cluster public et également HTTP sur proxy

J'utilise Kubernetes 1.16.2 et le dernier commit maître Kubespray 18d19d9e

EDIT: J'ai détruit et réapprovisionné le cluster pour obtenir une nouvelle instance provisionnée par Kubespray pour rendre toutes les étapes déterministes, en ajoutant plus d'informations ...

kubectl -n kube-system logs --follow kubernetes-dashboard-556b9ff8f8-jbmgg -- lors d'une tentative de connexion me donne

2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/csrftoken/login request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 POST /api/v1/login request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/login/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/csrftoken/token request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 POST /api/v1/token/refresh request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/login/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/csrftoken/token request from 10.233.74.0:57458: {}
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 POST /api/v1/token/refresh request from 10.233.74.0:57458: { contents hidden }
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:02 [2019-12-16T12:35:02Z] Incoming HTTP/2.0 GET /api/v1/overview/default?filterBy=&itemsPerPage=10&name=&page=1&sortBy=d,creationTimestamp request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 Getting config category
2019/12/16 12:35:03 Getting discovery and load balancing category
2019/12/16 12:35:03 Getting lists of all workloads
2019/12/16 12:35:03 the server could not find the requested resource
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 404 status code
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 Getting pod metrics
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 No metric client provided. Skipping metrics.
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Incoming HTTP/2.0 GET /api/v1/systembanner request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Incoming HTTP/2.0 GET /api/v1/login/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Incoming HTTP/2.0 GET /api/v1/rbac/status request from 10.233.74.0:57458: {}
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:03 [2019-12-16T12:35:03Z] Outcoming response to 10.233.74.0:57458 with 200 status code
2019/12/16 12:35:12 Metric client health check failed: the server could not find the requested resource (get services heapster). Retrying in 30 seconds.
2019/12/16 12:35:42 Metric client health check failed: the server could not find the requested resource (get services heapster). Retrying in 30 seconds.

J'ai trouvé une solution de contournement étrange pour faire fonctionner le tableau de bord , mais ce n'est pas utilisable pour nous en production, peut-être que quelqu'un peut expliquer cela:

  1. Je prends par exemple le compte de service kube-system:default(Remarque: celui-ci n'est PAS affecté cluster-adminà ce stade
  2. Je reçois son jeton et je me connecte avec ça
  3. Le tableau de bord me montre évidemment les "popups interdits"
  4. Bien que toujours connecté, je lance kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=kube-system:default
  5. Je rafraîchis l'onglet du navigateur qui contient ma session de tableau de bord ... et le tour est joué, tout s'affiche correctement.

Par conséquent, je ne suis pas en mesure de me déconnecter et de me reconnecter, je dois toujours supprimer le clusterrolebinding, me connecter puis appliquer à nouveau le clusterrolebinding.

Cela semble être fortement lié aux clusters provisionnés par kubespray, donc quiconque est capable de reproduire cela avec kubespray?


Pouvez-vous partager les journaux du module de tableau de bord Kubernetes et le jeton de compte de service que vous utilisez pour vous connecter?
Umesh Kumhar

partager les noms de déploiement et les étapes que vous avez essayées
P Ekambaram

Réponses:


7

Si vous utilisez un certificat pour vous connecter, votre certificat doit être dans le système: groupe de maîtres. Incluez donc le "Sujet: O = système: maîtres, CN ="

Vous pouvez également créer un jeton, puis utiliser le jeton à la place du certificat:

Il se peut que votre rôle de cluster soit lié à "Compte de service" mais pas à votre groupe. Vous devez vérifier votre groupe dans le fichier yaml. Votre compte de service dispose d'un jeton d'accès, utilisez-le pour vous authentifier à la place de votre certificat.

Utilisez-le pour créer un jeton et l'utiliser.

kubectl describe secret $(kubectl get secret | grep cluster-admin | awk '{print $1}')

jeton:

Mettez à jour kubeconfig pour vous authentifier à l'aide de ce jeton, au lieu du certificat que vous utilisez actuellement, et vous devriez être authentifié avec succès en tant que compte de service d'administration de cluster.

Kubernetes RBAC - tentative interdite d'accorder des privilèges supplémentaires


Cela me renvoie le jeton du compte de service "par défaut" dans l'espace de noms "par défaut", car aucun "cluster-admin" n'est défini. Même lorsque j'ajoute "--all-namespaces", il semble que Kubespray n'ait pas provisionné de compte de service d'administration de cluster. De manière générale: je suis conscient de l'utilisation de jetons pour s'authentifier en tant que compte de service spécifique lié à ce jeton. Malheureusement, mon compte de service ne fonctionne pas, même si je définis le clusterrolebinding
Jürgen Zornig

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.