¿Cómo iniciar sesión en el panel de Kubernetes?

127

Acabo de actualizar kubeadm y kubelet a v1.8.0. E instale el tablero siguiendo el documento oficial .

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

Después de eso, inicié el tablero ejecutando

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

Luego, afortunadamente, pude acceder al tablero a través de http://192.168.0.101:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Me redirigieron a una página de inicio de sesión como esta que nunca había conocido antes. ingrese la descripción de la imagen aquíParece que hay dos formas de autenticación.

Traté de cargar el /etc/kubernetes/admin.confcomo kubeconfig pero fallé. Luego intenté usar el token que obtuve kubeadm token listpara iniciar sesión, pero volví a fallar.

La pregunta es cómo puedo iniciar sesión en el panel. Parece que agregaron muchos mecanismos de seguridad que antes. Gracias.

ichbinblau
fuente
6
No veo una pregunta de programación aquí. Pruebe serverfault.com en su lugar.
Jolta
Si NO está en localhost, es posible que deba usar https solamente; de ​​lo contrario, el formulario de inicio de sesión fallará silenciosamente (sin err msg). Detalles: stackoverflow.com/questions/53957413/…
Putnik
Necesita generar token, siga esta guía - jhooq.com/setting-up-kubernetes-dashboard
Rahul Wagh
1
@Jolta Devops es ahora una actividad de programación gracias a kubernetes, lo enfrentarás;)
Fabien Quatravaux

Respuestas:

165

A partir de la versión 1.7, Dashboard admite la autenticación de usuarios basada en:

- Panel de control en Github

Simbólico

Aquí Tokenpuede ser Static Token, Service Account Token, OpenID Connect Tokena partir Kubernetes Autenticación , pero no el kubeadm Bootstrap Token.

Con kubectl, podemos obtener una cuenta de servicio (por ejemplo, controlador de implementación) creada en kubernetes de forma predeterminada.

$ 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

El panel necesita que el usuario en el archivo kubeconfig tenga username & passwordo token, pero admin.confsoloclient-certificate . Puede editar el archivo de configuración para agregar el token que se extrajo utilizando el método anterior.

$ kubectl config set-credentials cluster-admin --token = bearer_token

Alternativa (no recomendado para producción)

Aquí hay dos formas de omitir la autenticación, pero tenga cuidado.

Implementar panel con HTTP

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

El panel se puede cargar en http: // localhost: 8001 / ui conkubectl proxy .

Otorgar privilegios de administrador a la cuenta de servicio de Dashboard

$ 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

Luego, puede usar la Skipopción en la página de inicio de sesión para acceder al Tablero.

Si está utilizando la versión de panel v1.10.1 o posterior, también debe agregar --enable-skip-loginargumentos a la línea de comandos de la implementación. Puede hacerlo agregándolo al archivo argsin kubectl edit deployment/kubernetes-dashboard --namespace=kube-system.

Ejemplo:

      containers:
      - args:
        - --auto-generate-certificates
        - --enable-skip-login            # <-- add this line
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
zorro plateado
fuente
3
¿Puede darnos un ejemplo de cómo crear un usuario y luego iniciar sesión con un token? Todavía no sé cómo usar el token para actuar como un usuario.
xren
Ver archivo de token estático en la autenticación de
Kubernetes
97

TL; DR

Para obtener el token en una sola línea:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'

Esto supone que su ~ / .kube / config está presente y es válido. Y tambien quekubectl config get-contexts indica que está utilizando el contexto correcto (clúster y espacio de nombres) para el panel en el que está iniciando sesión.

Explicación

Derivé esta respuesta de lo que aprendí de la respuesta de @ silverfox. Esa es una redacción muy informativa. Desafortunadamente, no le dice cómo poner la información en práctica. Tal vez he estado haciendo DevOps demasiado tiempo, pero creo que en la cáscara. Es mucho más difícil para mí aprender o enseñar en inglés.

Aquí está ese delineador con saltos de línea y sangrías para facilitar la lectura:

kubectl -n kube-system describe secret $(
  kubectl -n kube-system get secret | \
  awk '/^deployment-controller-token-/{print $1}'
) | \
awk '$1=="token:"{print $2}'

Hay 4 comandos distintos y se llaman en este orden:

  • Línea 2: este es el primer comando de la sección Token de @ silverfox .
  • Línea 3: imprima solo el primer campo de la línea que comienza con deployment-controller-token-(que es el nombre del pod)
  • Línea 1: este es el segundo comando de la sección Token de @ silverfox .
  • Línea 5: imprima solo el segundo campo de la línea cuyo primer campo es "token:"
Bruno Bronosky
fuente
2
¿Existe un powershell equivalente a awk?
duct_tape_coder
1
@duct_tape_coder solo kubectl -n kube-system obtenga secretos y encuentre el tokenm con el nombre deployment-controller-token-SOMEHASH, luego solo kubectl -n kube-system describa la implementación secreta-controller-token-SOMEHASH. Eso es lo que hace el awk.
qubits
2
Gran respuesta. Para dar un paso más: kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' O empuje directamente a su portapapeles kubectl describe secret $(kubectl get secret | awk '/^dashboard-token-/{print $1}') | awk '$1=="token:"{print $2}' | xclip -selection clipboard -i
javajon
@duct_tape_coder kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)de github.com/kubernetes/dashboard/blob/master/docs/user/…
Putnik
48

Si no desea otorgar permiso de administrador a la cuenta de servicio del panel, puede crear una cuenta de servicio de administrador de clúster.

$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:cluster-admin-dashboard-sa

Y luego, puede usar el token de la cuenta de servicio de administrador del clúster que acaba de crear.

$ 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

Lo cité de la guía Giantswarm: https://docs.giantswarm.io/guides/install-kubernetes-dashboard/

SunghoMoon
fuente
5
Este me funcionó bien, mientras que la respuesta aceptada fue iniciar sesión, pero con algunos errores de autorización.
ZedTuX
3
Tenga en cuenta que este comando otorga a la cuenta de servicio muchos derechos y puede que no sea recomendable en un entorno de producción.
X. Wang
4
También podría querer agregar la cuenta de servicio en el sistema kube, ya que aquí es donde vive el tablero
atomaras
¡Trabajó para mi! Estaba exponiendo el servicio con el puerto 8001 y usé un túnel SSH para acceder desde mi máquina local.
Anuradha Fernando
18

Combinando dos respuestas: 49992698 y 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}')
Abdennour TOUMI
fuente
8

Una línea simple y autoexplicativa para extraer el token para el inicio de sesión del panel de Kubernetes.

kubectl describe secret -n kube-system | grep deployment -A 12

Copie el token y péguelo en el panel de Kubernetes en la opción de inicio de sesión del token y estará listo para usar el panel de Kubernetes.

Rewanth Cool
fuente
5

Todas las respuestas anteriores son buenas para mí. Pero una respuesta directa de mi lado vendría de https://github.com/kubernetes/dashboard/wiki/Creating-sample-user#bearer-token . Solo usa kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'). Tendrá muchos valores para algunas teclas ( Name, Namespace, Labels, ..., token). El más importante es el tokenque corresponde a tu nombre. copia ese token y pégalo en el cuadro del token. Espero que esto ayude.

Julien Nyambal
fuente
Después de probar varias de las respuestas anteriores, esta respuesta funcionó. Copié una ficha, la pegué y listo, estoy dentro.
CENTURION
5

Debe seguir estos pasos antes de la autenticación del token

  1. Crear una cuenta de servicio de administrador de clúster

    kubectl create serviceaccount dashboard -n default
    
  2. Agregue las reglas de vinculación del clúster a su cuenta de panel

    kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
    
  3. Obtén el token secreto con este comando

    kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
    
  4. Elija la autenticación de token en la página de inicio de sesión del panel de Kubernetes ingrese la descripción de la imagen aquí

  5. Ahora puedes iniciar sesión

UDIT JOSHI
fuente
0

Descarga https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml

añadir

type: NodePort for the Service

Y luego ejecuta este comando:

kubectl apply -f kubernetes-dashboard.yaml

Encuentre el puerto expuesto con el comando:

kubectl get services -n kube-system

Debería poder obtener el panel en http: // nombre de host: puerto expuesto / sin autenticación

Rajesh Guptan
fuente
Este es un consejo absolutamente terrible. Incluso si es técnicamente correcto
Christopher Thomas
0

La omisión de inicio de sesión se ha desactivado de forma predeterminada debido a problemas de seguridad. https://github.com/kubernetes/dashboard/issues/2672

en su tablero yaml agregue este argumento

- --enable-skip-login

para recuperarlo

Ravi
fuente
1
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada.
Stefan Becker
1
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada. - De la crítica
Rick
@StefanBecker, el enlace no es la respuesta sino la fuente para probar The skip login has been disabled by default due to security issues. El intento de respuesta es - --enable-skip-login. Puede que no sea la mejor respuesta, pero esta no es una respuesta de solo enlace.
derHugo
@Rick el enlace no es la respuesta sino la fuente para probar The skip login has been disabled by default due to security issues. El intento de respuesta es - --enable-skip-login. Puede que no sea la mejor respuesta, pero esta no es una respuesta de solo enlace.
derHugo