se você está criando um token, por meio de criação de token kubeadm .. ou qualquer outro mecanismo, não há nenhuma maneira de obter o hash de certificado ca token fora de tentar analisar a saída legível por humanos (e, portanto, não estável) de init kubeadm. Deve haver uma maneira legível por máquina de criar tokens com ca hashes, caso contrário, será forçado a usar --discovery-token-unsafe-skip-ca-verification mesmo se houver desejo de fazer a coisa certa (tm). Atm, as alternativas são analisar a provável saída de leitura humana alterada de kubeadm init ou reimplementar o cálculo de hash de kubeadm no ca. o último não seria tão ruim se não exigisse a leitura do código-fonte, pois não é tão simples, como, por exemplo, nenhuma das saídas de cd / etc / kubernetes / pki && sha256sum * mostra o mesmo sha que a saída do kubeadm init.
Você experimentou a versão recente do kubeadm?
# kubeadm token create --print-join-command
kubeadm join --token 5d2dc8.3e93f8449167639b 10.0.2.66:6443 --discovery-token-ca-cert-hash sha256:44a68d4a2c2a86e05cc0d4ee8c9c6b64352c54e450021331c483561e45b34388
ainda não é ótimo - qualquer pessoa que tentar fazer isso de forma programática terá que analisar o comando para extrair o token e o hash do token de descoberta. Seria melhor se pudéssemos especificar um formulário de saída como json para que possamos analisá-lo com segurança
obrigado, eu não percebi que havia um comando novo / separado para isso. Eu concordo, seria melhor ter isso em JSON. meu fluxo de trabalho anterior para 1.6 e 1.7 era kubeadm token generate e, em seguida, reutilizava esse valor ao iniciar e juntar, o kubeadm token generate era delimitado por linha de valor único legível por máquina, mas agora é efetivamente um comando morto, já que falta o hash cert (e não extensível per se devido a esse formato). Re por que legível por máquina, eu tenho parâmetros adicionais para passar para o join e alguns que preciso substituir, como dns para o ip.
Sim, eu tive que despejar o comando join em um arquivo e então usar o sed para adicionar um sinalizador ignore-preflight-errors, não horrível, mas também não particularmente amigável.
Portanto, há um esforço contínuo para aparar as fases para torná-lo mais programático e desduplicar os sinalizadores. Essa é apenas uma história de usuário. @fabriziopandini , você tem um problema com os pais para isso em algum lugar?
@timothysc
O problema para as fases de graduação é o nº 454, mas está meio desatualizado e pode fazer sentido começar com um novo assim que o próximo KEP for aprovado.
No entanto, com relação a este problema, IMO, devemos abrir um problema guarda-chuva dedicado para lidar com a demanda por saída legível por máquina de uma forma consistente em todos os comandos, porque a solicitação se estende de kubeadm init/phases
a kubeadm token
e também kubeadm upgrade
(consulte # 494).
WDYT? se estiver bom para você, abrirei a nova edição do guarda-chuva ...
Acabei de resolver esse problema sozinho. Consegui calcular o sha256sum da chave pública do ca cert usando o seguinte:
$ openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1
Feio...
Eu uso as expressões regulares. Eu testei com o Ansible.
- hosts: localhost
tasks:
- shell: kubeadm token create --print-join-command
register: results
- debug:
var: results.stdout
- set_fact:
token: "{{ results.stdout | regex_search(regexp, '\\2') | first }}"
vars:
regexp: '([^\s]+\s){4}([^\s]+)'
- debug:
var: token
- set_fact:
hash: "{{ results.stdout | regex_search(regexp, '\\2') | first }}"
vars:
regexp: '([^\s]+\s){6}([^\s]+)'
- debug:
var: hash
Resultado:
TASK [debug] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"results.stdout": "kubeadm join 192.168.1.2:6443 --token 3a0fje.octau87o6x30dz8i --discovery-token-ca-cert-hash sha256:1fd18093fb89b364879d5667b7ec84fd24171c30de0070deb6a3801b54a0f85c"
}
TASK [set_fact] ****************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"token": "3a0fje.octau87o6x30dz8i"
}
TASK [set_fact] ****************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"hash": "sha256:1fd18093fb89b364879d5667b7ec84fd24171c30de0070deb6a3801b54a0f85c"
}
Fechando, pois há várias soluções alternativas.
Isso não é recomendado, mas em https://github.com/cablespaghetti/kubeadm-aws/blob/master/worker.sh#L45 --discovery-token-unsafe-skip-ca-verification
também funciona
no Azure, usando marcas para recursos de trabalho e mestre:
rg é uma variável com o nome RG
masterPrivateIp = $ (lista nic de rede az -g $ rg --query "[? tags.module == 'k8smasters']. ipConfigurations [0] .privateIpAddress" -o tsv)
tokenId = $ (ssh $ masterIp "lista de tokens kubeadm | grep -v TOKEN | cut -d '' -f1")
tokenSHA = $ (ssh $ masterIp "openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2> / dev / null | sha256sum | cut -d '' -f1 ")
joinCommand = "kubeadm join $ master PrivateIp : 6443 --token $ tokenId --discovery-token-ca-cert-hash sha256: $ tokenSHA"
para ip em $ (lista de ip público de rede az -g $ rg --query [? tags.module == 'k8sworkers']. ipAddress -o tsv)
Faz
ssh $ ip $ joinCommand
feito
Comentários muito úteis
Você experimentou a versão recente do kubeadm?