Panel de Kubernetes: error de servidor desconocido después de iniciar sesión


9

He implementado con éxito Kubernetes a través de Kubespray y todo parece funcionar bien. Puedo acceder al clúster a través de kubectl y enumerar nodos, pods, servicios, secretos, etc. También es posible aplicar nuevos recursos y el punto final del tablero me da acceso a la página de inicio del tablero.

He iniciado sesión con tokens de diferentes cuentas de servicio (por defecto, kubernetes-dashboard, kubernetes-admin, ...) ... con cada inicio de sesión obtengo las mismas ventanas emergentes como se describe en el panel de control de kubespray, por ejemplo, ventanas emergentes prohibidas .

Así que apliqué el clusterrolebinding para la cuenta de servicio predeterminada como se describe. Cuando inicio sesión ahora con el token de cuenta predeterminado, solo obtengo un

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

cuadro que me redirige a la página de inicio de sesión después. Es el mismo comportamiento si me conecto a Dashboard a través de kubectl proxy. El acceso es HTTPS sobre una IP de clúster público y también HTTP sobre proxy

Estoy usando Kubernetes 1.16.2 y el último Kubespray master commit 18d19d9e

EDITAR: Destruí y reaprovisioné el clúster para obtener una nueva instancia aprovisionada por Kubespray para hacer que todos los pasos sean deterministas, agregando más información ...

kubectl -n kube-system logs --follow kubernetes-dashboard-556b9ff8f8-jbmgg -- durante un intento de inicio de sesión me da

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.

Encontré una solución alternativa extraña para que el tablero funcione , pero esto no es usable para nosotros en producción, quizás alguien pueda explicar esto:

  1. Tomo, por ejemplo, la cuenta de servicio kube-system:default(Nota: esta NO está asignada cluster-adminen este momento
  2. Recibo su token e inicio sesión con eso
  3. Dashboard obviamente me muestra las "ventanas emergentes prohibidas"
  4. Mientras sigo conectado, ejecuto kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=kube-system:default
  5. Actualizo la pestaña del navegador que contiene mi sesión de tablero ... y listo, todo se muestra correctamente.

Por lo tanto, no puedo cerrar sesión y volver a iniciar sesión, siempre tengo que eliminar el clusterrolebinding, iniciar sesión y luego aplicar clusterrolebinding nuevamente.

Esto parece estar fuertemente relacionado con los clústeres aprovisionados de kubespray, por lo que ¿alguien puede reproducir esto con kubespray?


¿Puede compartir los registros del panel de instrumentos de Kubernetes y qué token de cuenta de servicio está utilizando para iniciar sesión?
Umesh Kumhar

compartir los ñames de implementación y los pasos que ha intentado
P Ekambaram

Respuestas:


7

Si está utilizando un certificado para conectarse, su certificado debe estar en el sistema: grupo de maestros Así que incluya el "Asunto: O = sistema: maestros, CN ="

También puede crear un token y luego usar el token en lugar del certificado:

Es posible que su rol de clúster esté vinculado a "Cuenta de servicio" pero no a su grupo. Debe verificar su grupo en el archivo yaml. Su cuenta de servicio tiene un token de acceso, utilícelo para autenticar en lugar de su certificado.

Use esto para crear un token y úselo.

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

simbólico:

Actualice kubeconfig para autenticarse utilizando ese token, en lugar del certificado que está utilizando actualmente, y debería autenticarse correctamente como esa cuenta de servicio de administrador de clúster.

Kubernetes RBAC - intento prohibido de otorgar privilegios adicionales


Esto me devuelve el token de la cuenta de servicio "predeterminada" en el espacio de nombres "predeterminado", ya que no se define "cluster-admin". Incluso cuando agrego "--todos los espacios de nombres" parece que Kubespray no proporcionó una cuenta de servicio de administración de clúster. En general: soy consciente del uso de tokens para autenticar como una cuenta de servicio específica que está vinculada a ese token. Desafortunadamente, mi cuenta de servicio no funciona, incluso si defino el enlace de clúster
Jürgen Zornig

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.