Kubeadm: Melhor usabilidade para o token de junção

Criado em 4 nov. 2017  ·  22Comentários  ·  Fonte: kubernetes/kubeadm

/ tipo recurso
@ kubernetes / sig-cli
O que aconteceu :
Eu descobri que não é tão fácil adicionar novas máquinas se você não tiver a saída de string joun original do kubeadm. "Existe uma maneira de gerar todo o comando de junção? Sinto que preciso redefinir todo o cluster para poder" alcançar "a string mágica " (c) @alexellis

O que você esperava que acontecesse :
Da mesma forma no Docker Swarm, você sempre pode dizer ao mestre para imprimir uma string de junção que pode ser copiada e colada para adicionar ... ou assimilar? mais máquinas.

Exemplo de entrada:

kubeadm token string

Exemplo de saída:

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

Mais alguma coisa que precisamos saber? :
Você é demais!

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

areUX prioritimportant-soon

Comentários muito úteis

@zcalusic a maneira atual é calcular o hash com OpenSSL assim (execute no mestre ou onde quer que você tenha uma cópia 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 comentários

+1 em algo assim.

Alguns riffs dessa ideia:

  • Um novo comando kubeadm ca-cert-hash (nome TBD) que apenas imprime o hash CA atual. Isso seria basicamente a mesma coisa que o comando openssl que fornecemos nos documentos kubeadm join .
  • Adicione um sinalizador --print-join-command para kubeadm token create que imprime todo o comando de junção exatamente como kubeadm init faz. Esperançosamente, isso tornaria mais fácil automatizar, executando algo como kubeadm token create --print-join-command >> worker_init.sh durante o provisionamento.

  • Um novo comando kubeadm token get <token id> que obtém o token completo dado o ID, com um sinalizador --print-join-command para imprimir opcionalmente o comando de junção completo em vez de apenas o token.

Obrigado por me marcar nisso. Anote o UX do Docker Swarm - a qualquer momento, você pode digitar docker swarm join-token worker e ter um comando para colar em um trabalhador ou enviar por SSH. Com o Kubeadm é tão difícil que literalmente destruo o cluster para adicionar um novo nó - estou bastante confiante com CLIs, então tenho certeza de que não sou o único.

Além disso, a saída do init é tão pesada que você não pode realmente pegar apenas o comando join e armazená-lo em algum lugar ... atualmente estou recorrendo a kubeadm init ... | grep 'kubeadm join --token' > /some_file .
Seria legal ter um modo silencioso onde a única coisa no stdout fosse o comando join.

Enfim, qual é a maneira de obter esse ca-cert-hash agora? Claro, a saída de kubeadm init já se foi neste ponto ... e eu não a salvei esperando que seria fácil extrair essa informação mais tarde, sob demanda.

Consegui obter o token de junção com kubeadm token list e juntei-me a outro nó com kubeadm join --token , mas está dizendo:

[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.

Então, antes que se transforme em erro, como passo esse parâmetro? Obrigado por qualquer ajuda!

@zcalusic a maneira atual é calcular o hash com OpenSSL assim (execute no mestre ou onde quer que você tenha uma cópia 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/^.* //'

Obrigado @mattmoyer pela dica. Seu oneliner funcionou perfeitamente.

Claro, devo concordar que --print-join-command seria uma experiência de usuário muito melhor.

Concordar com --print-join-command

Concluímos na reunião do SIG que continuaremos com https://github.com/kubernetes/kubernetes/pull/55468 _e_ com esta adição de recurso.
Veremos de que forma exatamente daqui a pouco

Isso foi discutido na chamada de zoom de 21 de novembro de 2017; os minutos dessa chamada estão em https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#

Acabei de dar uma olhada rápida nisso ontem, mas não trabalhei nisso ainda :)

Adicione uma sinalização --print-join-command para kubeadm token create que imprime todo o comando de junção, assim como o kubeadm init. Esperançosamente, isso tornaria mais fácil automatizar, executando algo como kubeadm token create --print-join-command >> worker_init.sh durante o provisionamento.

Se preferirmos este, acho que já existe a mesma lógica na criação de token de bootstrap . Podemos usar isso aqui.

Um novo token kubeadm getque obtém o token completo dado o ID, com um sinalizador --print-join-command para imprimir opcionalmente o comando de junção completo em vez de apenas o token.

Eu prefiro este pessoalmente. Mas parece que as duas ideias precisam de mais contexto durante a implementação, por exemplo, precisamos do MasterConfiguration para obter o endereço de anúncio de um servidor. Atualmente, token create não tem a configuração.

ATUALIZAÇÃO: talvez possamos implementar ambas as ideias? @luxas @mattmoyer

Implementei apenas a primeira ideia em https://github.com/kubernetes/kubernetes/pull/56185. Não me oponho a implementar a ideia kubeadm get também, mas estamos com pouco tempo.

Em vez de criar um novo kubeadm get , IMO, devemos imprimir o hash / a instrução de junção kubeadm no final do kubeadm token list já existente.

Acho que kubeadm token list --print-join-command seria ótimo!

Gosto dessa ideia @luxas. Acho que poderíamos torná-lo menos prolixo, acho que estou digitando sinalizadores muito longos kubeadm comparação com docker CLI.

kubeadm token list --verbose

kubeadm token list --tokens

kubeadm token list --join-token

kubeadm token list --verbose|-v funciona para mim

Ei, isso é feito?
Como posso fazer com que o token se junte a novos nós em meu cluster?

O @tzurE foi mesclado, mas ainda não foi lançado. Ele fará parte do Kubernetes 1.9, que está programado para ser lançado no final desta semana .

A nova funcionalidade permite que você execute este comando para juntar nós:

# 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

legal, obrigado.
existe uma solução entretanto? Uma maneira de extraí-lo sem usar os comandos regulares?

@tzurE veja este comentário: https://github.com/kubernetes/kubeadm/issues/519#issuecomment -343192126

Oi @mattmoyer

O comando "kubeadm token create --print-join-command" funciona muito bem no 1.9. Mas estou recebendo o status NotReady no meu nó. Estou usando o ubuntu 16.04 com k8s 1.9.0. Alguma sugestão?

@ siddharthjoshi745 Implante uma rede de pod como Weave Net (como pode ser visto em nossos documentos).
Porém, não comente sobre problemas antigos; em vez disso, abra um novo se encontrar algo errado ou peça ajuda no Slack
Tenha um ótimo dia!

Como podemos produzir apenas um valor? Diga o token ou o token de descoberta sha, etc.

Esta página foi útil?
0 / 5 - 0 avaliações