Kubeadm: Mejor usabilidad para el token de unión

Creado en 4 nov. 2017  ·  22Comentarios  ·  Fuente: kubernetes/kubeadm

/ tipo de característica
@ kubernetes / sig-cli
Que paso :
He descubierto que si no es tan fácil agregar nuevas máquinas, si no tiene la salida original de la cadena joun de kubeadm. "¿Hay alguna manera de generar el comando de combinación completo? Siento que tengo que restablecer todo el clúster para poder" alcanzar "la cadena mágica " (c) @alexellis

Qué esperabas que sucediera :
Del mismo modo, en Docker Swarm, siempre puede decirle al maestro que imprima una cadena de unión que se pueda copiar y pegar para agregar ... ¿o asimilar? más máquinas.

Entrada de ejemplo:

kubeadm token string

Salida de ejemplo:

kubeadm join --token TOK MASTER_IP:6443 --discovery-token-ca-cert-hash sha256:HASH

¿Algo más que necesitemos saber? :
¡Usted es maravilloso!

(Seguimiento de: https://github.com/kubernetes/kubernetes/pull/41663)
@luxas @mattmoyer @jamiehannaford

areUX prioritimportant-soon

Comentario más útil

@zcalusic, la forma actual es calcular el hash con OpenSSL de esta manera (ejecutar en el maestro o donde tenga una copia de /etc/kubernetes/pki/ca.crt ):

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

Todos 22 comentarios

+1 en algo como esto.

Algunos riffs sobre esta idea:

  • Un nuevo comando kubeadm ca-cert-hash (nombre TBD) que simplemente imprime el hash de CA actual. Básicamente, esto sería lo mismo que el comando openssl que damos en los documentos kubeadm join .
  • Agregue una bandera --print-join-command para kubeadm token create que imprima el comando de unión completo tal como lo hace kubeadm init . Con suerte, esto facilitaría la automatización ejecutando algo como kubeadm token create --print-join-command >> worker_init.sh durante el aprovisionamiento.

  • Un nuevo comando kubeadm token get <token id> que obtiene el token completo dado el ID, con una bandera --print-join-command para imprimir opcionalmente el comando de unión completo en lugar de solo el token.

Gracias por etiquetarme en esto. Tome una nota de la UX de Docker Swarm: en cualquier momento puede escribir docker swarm join-token worker y tener un comando para pegar en un trabajador o enviar por SSH. Con Kubeadm es tan difícil que literalmente derribo el clúster para agregar un nuevo nodo; tengo bastante confianza con las CLI, así que estoy seguro de que no soy el único.

Además, la salida de inicio es tan pesada que realmente no puede obtener solo el comando de unión y guardarlo en algún lugar ... actualmente estoy recurriendo a kubeadm init ... | grep 'kubeadm join --token' > /some_file .
Sería genial tener un modo silencioso donde lo único en stdout es el comando de unión.

De todos modos, ¿cuál es la forma de obtener ese ca-cert-hash ahora mismo? Por supuesto, la salida de kubeadm init desapareció hace mucho tiempo en este punto ... y no la guardé esperando que fuera fácil extraer esa información más tarde, a pedido.

Me las arreglé para unirme al token con kubeadm token list y me uní a otro nodo con kubeadm join --token , pero dice:

[validation] WARNING: using token-based discovery without DiscoveryTokenCACertHashes can be unsafe (see https://kubernetes.io/docs/admin/kubeadm/#kubeadm-join).
[validation] WARNING: Pass --discovery-token-unsafe-skip-ca-verification to disable this warning. This warning will become an error in Kubernetes 1.9.

Entonces, antes de que se convierta en un error, ¿cómo paso ese parámetro? ¡Gracias por cualquier ayuda!

@zcalusic, la forma actual es calcular el hash con OpenSSL de esta manera (ejecutar en el maestro o donde tenga una copia de /etc/kubernetes/pki/ca.crt ):

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

Gracias @mattmoyer por la pista. Tu delineador funcionó a la perfección.

Por supuesto, debo estar de acuerdo en que --print-join-command sería una experiencia de usuario mucho mejor.

De acuerdo con --print-join-command

Concluimos en la reunión del SIG que procederemos con https://github.com/kubernetes/kubernetes/pull/55468 _y_ esta función adicional.
Veremos en qué forma exactamente en un momento

Esto se discutió en la llamada de zoom del 21 de noviembre de 2017; los minutos de esa llamada están en https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#

Ayer le eché un vistazo rápido, pero todavía no he trabajado en él :)

Agregue un indicador --print-join-command para kubeadm token create que imprima el comando de unión completo tal como lo hace kubeadm init. Con suerte, esto facilitaría la automatización ejecutando algo como kubeadm token create --print-join-command >> worker_init.sh durante el aprovisionamiento.

Si preferimos este, creo que ya existe la misma lógica en la creación de tokens de arranque . Podemos usar eso aquí.

Un nuevo comando kubeadm token getque obtiene el token completo dado el ID, con una marca --print-join-command para imprimir opcionalmente el comando de combinación completo en lugar de solo el token.

Yo prefiero este personalmente. Pero parece que ambas ideas necesitan más contexto cuando se implementan, por ejemplo, necesitamos MasterConfiguration para obtener una dirección de publicidad de servidor. Actualmente, token create no tiene la configuración.

ACTUALIZACIÓN: ¿tal vez podamos implementar ambas ideas? @luxas @mattmoyer

Implementé solo la primera idea en https://github.com/kubernetes/kubernetes/pull/56185. No me opongo a implementar la idea kubeadm get también, pero tenemos poco tiempo.

En lugar de crear un nuevo kubeadm get , IMO deberíamos imprimir el hash / la declaración de unión kubeadm al final del kubeadm token list ya existente.

¡Creo que kubeadm token list --print-join-command sería genial!

Me gusta esa idea @luxas. Creo que podríamos hacerlo menos detallado, encuentro que estoy escribiendo indicadores muy largos kubeadm comparación con el docker CLI.

kubeadm token list --verbose

kubeadm token list --tokens

kubeadm token list --join-token

kubeadm token list --verbose|-v me funciona

Oye, ¿esto está hecho?
¿Cómo puedo hacer que el token se una a nuevos nodos en mi clúster?

@tzurE se fusionó pero aún no se lanzó, será parte de Kubernetes 1.9, que se lanzará a finales de esta semana .

La nueva funcionalidad le permite ejecutar este comando para unir nodos:

# on a master node (or any node with admin access to your cluster)
$ kubeadm token create --print-join-command
kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889
# on the new node (copy-pasted from the output above)
$ kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889

bien gracias.
¿Hay alguna solución mientras tanto? ¿Una forma de extraerlo sin usar los comandos habituales?

@tzurE ver este comentario: https://github.com/kubernetes/kubeadm/issues/519#issuecomment -343192126

Hola @mattmoyer

El comando "kubeadm token create --print-join-command" funciona muy bien en 1.9. Pero obtengo el estado NotReady en mi nodo. Estoy usando ubuntu 16.04 con k8s 1.9.0. ¿Alguna sugerencia?

@ siddharthjoshi745 Implemente una red Pod como Weave Net (como se puede ver en nuestros documentos).
Sin embargo, no comentes sobre problemas antiguos, abre uno nuevo si encuentras algo mal o pide ayuda en Slack.
¡Qué tengas un lindo día!

¿Cómo podemos generar un solo valor? Diga la ficha o la ficha de descubrimiento sha, etc.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

jbrandes picture jbrandes  ·  4Comentarios

atoato88 picture atoato88  ·  4Comentarios

ep4eg picture ep4eg  ·  3Comentarios

kvaps picture kvaps  ·  3Comentarios

ggee picture ggee  ·  4Comentarios