Kubeadm: tidak ada cara terprogram untuk mendapatkan token penemuan ca hash

Dibuat pada 12 Jan 2018  ·  11Komentar  ·  Sumber: kubernetes/kubeadm

jika Anda membuat token, melalui kubeadm token create .. atau mekanisme lainnya, tidak ada cara untuk mendapatkan hash sertifikat ca token di luar mencoba mengurai output yang dapat dibaca manusia (dan karenanya tidak stabil) dari kubeadm init. Seharusnya ada cara yang dapat dibaca mesin untuk membuat token dengan hash ca, jika tidak, seseorang terpaksa menggunakan --discovery-token-unsafe-skip-ca-verification bahkan jika ada keinginan untuk melakukan hal yang benar (tm). Atm alternatifnya adalah mem-parsing output baca manusia yang mungkin diubah dari kubeadm init atau mengimplementasikan kembali perhitungan hash kubeadm di atas ca. nanti tidak akan terlalu buruk jika tidak perlu membaca sumbernya karena tidak sesederhana yaitu tidak ada keluaran dari cd /etc/kubernetes/pki && sha256sum * menunjukkan sha yang sama dengan keluaran kubeadm init.

kinfeature prioritbacklog

Komentar yang paling membantu

Sudahkah Anda mencoba kubeadm versi terbaru?

# kubeadm token create --print-join-command
kubeadm join --token 5d2dc8.3e93f8449167639b 10.0.2.66:6443 --discovery-token-ca-cert-hash sha256:44a68d4a2c2a86e05cc0d4ee8c9c6b64352c54e450021331c483561e45b34388

Semua 11 komentar

Sudahkah Anda mencoba kubeadm versi terbaru?

# kubeadm token create --print-join-command
kubeadm join --token 5d2dc8.3e93f8449167639b 10.0.2.66:6443 --discovery-token-ca-cert-hash sha256:44a68d4a2c2a86e05cc0d4ee8c9c6b64352c54e450021331c483561e45b34388

itu masih tidak bagus - siapa pun yang mencoba menggunakan ini secara terprogram harus mengurai perintah untuk mengekstrak token dan token penemuan hash. Akan lebih baik jika kita dapat menentukan bentuk keluaran seperti json sehingga kita dapat menguraikannya dengan aman

terima kasih, saya tidak menyadari bahwa ada perintah terpisah/baru untuk ini. Saya setuju, akan lebih baik untuk memiliki ini di json. alur kerja saya sebelumnya untuk 1.6 dan 1.7, adalah token kubeadm yang dihasilkan, dan kemudian menggunakan kembali nilai itu saat memulai dan bergabung, token kubeadm yang dihasilkan adalah baris nilai tunggal yang dapat dibaca mesin, tetapi sekarang secara efektif merupakan perintah mati karena tidak memiliki cert hash (dan tidak dapat diperluas karena format itu). mengapa mesin dapat dibaca, saya memiliki parameter tambahan untuk lulus untuk bergabung dan beberapa yang perlu saya ganti seperti dns untuk ip.

Yup, saya harus membuang perintah gabung ke file, dan kemudian menggunakan sed untuk menambahkan flag abaikan-preflight-errors, tidak buruk tetapi juga tidak terlalu ramah.

Jadi ada upaya berkelanjutan untuk memangkas fase agar lebih terprogram dan menghilangkan penipuan, ini hanya satu cerita pengguna. @fabriziopandini apakah Anda memiliki masalah orang tua untuk ini di suatu tempat?

@timothysc
Masalah untuk fase kelulusan adalah #454, tetapi agak ketinggalan jaman dan mungkin masuk akal untuk memulai dengan yang baru segera setelah KEP yang akan datang disetujui.

Namun, sehubungan dengan masalah ini, IMO kita harus membuka masalah payung khusus untuk menangani permintaan output yang dapat dibaca mesin secara konsisten di semua perintah, karena permintaan mencakup dari kubeadm init/phases hingga kubeadm token dan juga kubeadm upgrade (lihat #494).

WDYT? jika tidak apa-apa untuk Anda, saya akan membuka edisi payung baru ...

Saya sendiri baru saja mengalami masalah ini. Saya dapat menghitung sha256sum dari kunci publik sertifikat menggunakan yang berikut:

$ openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1

Tidak cantik...

Saya menggunakan ekspresi reguler. Saya menguji dengan 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

Hasil:

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"
}

Penutupan karena ada beberapa solusi.

Ini tidak direkomendasikan tetapi, Di https://github.com/cablespaghetti/kubeadm-aws/blob/master/worker.sh#L45 --discovery-token-unsafe-skip-ca-verification juga berfungsi

di Azure, menggunakan tag untuk sumber daya pekerja dan master:
rg adalah variabel dengan nama RG

masterPrivateIp=$(az network nic list -g $rg --query "[?tags.module == 'k8smasters'].ipConfigurations[0].privateIpAddress" -o tsv)
tokenId=$(ssh $masterIp "daftar token 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 bergabung dengan $master PrivateIp :6443 --token $tokenId --discovery-token-ca-cert-hash sha256:$tokenSHA"

untuk ip di $(az network public-ip list -g $rg --query [?tags.module == 'k8sworkers'].ipAddress -o tsv)
melakukan
ssh $ip $joinCommand
selesai

Apakah halaman ini membantu?
0 / 5 - 0 peringkat