<p>sertifikat fase kubeadm alpha memperbaharui semua juga harus memperbarui sertifikat dalam file KubeConfig</p>

Dibuat pada 25 Jan 2019  ·  41Komentar  ·  Sumber: kubernetes/kubeadm

PERMINTAAN FITUR

Versi

kubeadm versi v1.12.5

Lingkungan :

  • Kubernetes versi v1.12.5
  • konfigurasi perangkat keras : 1 Master (VM), 2 Nodes (Perangkat Keras)
  • OS (misalnya dari / etc / os-release): Ubuntu 16.04.5 LTS (Xenial Xerus)
  • Kernel (misalnya uname -a ): Linux node1 4.4.0-141-generic # 167-Ubuntu SMP Rab 5 Des 10:40:15 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

Apa yang terjadi?

3 cluster saya sekarang berusia 1 tahun. Karena beberapa sertifikat dikeluarkan dengan validitas 1 tahun, cluster berhenti berfungsi dengan benar. Saya telah meningkatkan kluster dari 1.10.12 menjadi 1.11.6 dan 1.12.5 sebelum sertifikat mencapai tanggal kedaluwarsa.

Saya mengalami beberapa masalah:

Bahkan dengan Rotasi Sertifikat diaktifkan, kubelet.conf menunjuk ke sertifikat yang sudah kadaluwarsa

  • Karena Rotasi Sertifikat telah diaktifkan di salah satu peningkatan (tidak yakin kapan), file pem /var/lib/kubelet/pki/kubelet-client-current.pem diputar dengan benar, tetapi

    • di Nodes: client-certificate dan client-key di /etc/kubernetes/kubelet.conf masih menunjuk ke /var/lib/kubelet/pki/kubelet-client.*

    • pada Master: client-certificate-data dan client-key-data dalam /etc/kubernetes/kubelet.conf masih berisi sertifikat yang akan segera kedaluwarsa.

    • Saya harus memperbarui client-certificate-data dan client-key-data secara manual pada semua node dan semua cluster

    • Alternatifnya, seseorang dapat menggunakan sudo kubeadm alpha phase kubeconfig kubelet untuk membuat ulang file ini di Master dan semua Node!

Rotasi Sertifikat dos tidak memperbarui sertifikat apiserver / etcd / front-proxy-client

  • Rotasi Sertifikat tampaknya tidak memperbarui salah satu sertifikat lain pada Master, yaitu

    • apiserver *

    • etcd *

    • front-proxy-client

Perintah kubeadm alpha phase certs renew all tidak memperbarui file KubeConfig

  • Saya secara manual mengeluarkan sudo kubeadm alpha phase certs renew all pada master yang memperbaharui semua sertifikat yang kadaluwarsa menjadi /etc/kubernetes/pki yang baik-baik saja, TAPI

    • File KubeConfig seperti berikut ini tidak diperbarui:



      • /etc/kubernetes/admin.conf


      • /etc/kubernetes/controller-manager.conf


      • /etc/kubernetes/scheduler.conf



  • Oleh karena itu pod statis masih menggunakan sertifikat lama, jadi saya harus menggunakan sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address=x.x.x.x

    • Selain itu, seseorang harus memulai ulang pod statis (atau server master yang lebih mudah) untuk membaca ulang sertifikat baru.

    • Lebih buruk lagi jika sertifikat sudah kedaluwarsa. Dalam hal ini Anda dapat kubectl -n kube-system delete pod kube-apiserver-mater yang tampaknya berfungsi, tetapi pada kenyataannya pod tidak pernah direstart - Saya harus berhenti dan memulai container dengan docker stop / start.

Apa yang Anda harapkan terjadi?

  • Saya pikir tidak banyak yang bisa dilakukan tentang masalah pertama, jika file konfigurasi salah, bagaimana seharusnya cluster memberi tahu admin ...
  • Rotasi sertifikat bertanggung jawab atas kubelet, jadi tidak banyak yang bisa dilakukan tentang masalah kedua
  • Untuk pembaruan sertifikat, saya sarankan untuk memperbarui dokumentasi (https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) dan menyatakan kapan harus menjalankan perintah ini (setahun sekali). Pada pandangan pertama tidak jelas apakah perintah ini harus dijalankan pada master dan semua node atau hanya pada master, ...
  • Saya juga menyarankan agar perintah tersebut memperbarui file KubeConfig juga atau setidaknya memberikan beberapa petunjuk kepada pengguna bahwa dia harus melakukannya secara manual. Ini juga akan menyarankan untuk memulai ulang pod statis setelah memperbarui file KubeConfig
  • kubeadm alpha phase kubeconfig harus merestart pod statis setelah config ditulis atau memberitahu pengguna untuk melakukannya.

salam Hormat
Andreas

aresecurity kinbug kindocumentation lifecyclactive prioritimportant-soon

Komentar yang paling membantu

/menetapkan
/ siklus hidup aktif

Saya mulai menangani masalah ini.
Ada poin berbeda untuk dibahas (_diupdate 14 Mei 2019_)

  • Bahkan dengan Rotasi Sertifikat diaktifkan, kubelet.conf menunjuk ke sertifikat yang kedaluwarsa (sudah dilacak oleh https://github.com/kubernetes/kubeadm/issues/1317)
  • Rotasi Sertifikat tidak memperbarui sertifikat apiserver / etcd / front-proxy-client (diperbaiki oleh https://github.com/kubernetes/kubernetes/pull/76862)
  • Perintah fase alpha kubeadm memperbarui semua tidak memperbarui file KubeConfig (diperbaiki oleh https://github.com/kubernetes/kubernetes/pull/77180)
  • Dokumentasi tentang pembaruan sertifikat (dengan lebih detail tentang di mana perintah harus dijalankan, kapan, kubeconfig, HA)

Dan saya akan menangani semuanya dalam PR terpisah

Semua 41 komentar

@Tokopedia
tentu saja, tetapi harap dicatat bahwa fase bergabung adalah prioritas tinggi.

kedengarannya bagus! Terima kasih banyak.

Hai,

ada satu hal lagi tentang topik ini.

kubeadm alpha phase kubeconfig all menampilkan pesan ini jika file conf ada saat menjalankan perintah:

[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/admin.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Using existing up-to-date KubeConfig file: "/etc/kubernetes/scheduler.conf"

Itu tidak memeriksa apakah sertifikat kedaluwarsa, jadi menurut saya up-to-date salah.

Untuk mendapatkan sertifikat yang diperbarui ke dalam file, file HARUS dihapus terlebih dahulu, daripada log yang terlihat seperti:

[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"   

Dalam kasus saya, saya pikir saya baik-baik saja, tetapi beberapa hari kemudian pod statis tidak dapat berkomunikasi karena sertifikat yang sudah ketinggalan zaman.

Salam Hormat
Andreas

Ditugaskan ke @MalloZup

@MalloZup : GitHub tidak mengizinkan saya untuk menetapkan pengguna berikut: MalloZup.

Perhatikan bahwa hanya anggota kubernetes dan repo kolaborator yang dapat ditugaskan dan masalah / PR hanya dapat memiliki 10 penerima pada waktu yang sama.
Untuk informasi lebih lanjut, silakan lihat panduan kontributor

Menanggapi ini :

/menetapkan

Instruksi untuk berinteraksi dengan saya menggunakan komentar PR tersedia di sini . Jika Anda memiliki pertanyaan atau saran terkait dengan perilaku saya, harap ajukan masalah ke kubernetes / test-infra repository.

hai @adoerler thx untuk masalah. Mengenai info menyesatkan, saya telah mengirimkan PR https://github.com/kubernetes/kubernetes/pull/73798.

Saya akan melihat masalah lainnya setelah saya punya waktu. Terima kasih atas waktu dan ketepatan masalah ini

@adoerler saya telah mengirim pr DOC untuk saran Anda. Jangan ragu untuk melihat-lihat tia: rocket:
(https://github.com/kubernetes/website/pull/12579)

Hai @ooupt ,

terima kasih untuk PR!

Saya kehilangan satu kalimat tentang file kubeconfig, karena certs renew hanya salah satu bagian dari permainan.
Sesuatu seperti:

Setelah sertifikat diperbarui, jangan lupa untuk membuat ulang file KubeConfig menggunakan kubeadm alpha phase kubeconfig ...

Terima kasih. Saya tidak menambahkan dokumen karena saya berpikir bahwa sebenarnya kami juga dapat memperbarui file kubeconfig. Pod lain yang direstart dapat kami delegasikan ke pengguna dan menulis dokumen minimal. @fabriziopandini @lubomir @ereslibre Saya melewatkan sesuatu dalam implementasi ini? Tia

@MalloZup Saya tidak memiliki pengetahuan yang mendalam tentang cara kerja pembaruan sertifikat.

Secara pribadi, saya ingin menjelaskan sedikit tentang keseluruhan sejarah sebelum mengambil tindakan - termasuk apa yang diusulkan di atas -:

  • apa yang harus dikelola oleh kubeadm alpha phase certs renew
  • apa yang seharusnya dikelola secara otomatis selama kubeadm upgrade
  • apa yang harus didokumentasikan (dan dikelola oleh pengguna)
  • bagaimana ini berlaku untuk cluster HA
  • bagaimana hal ini dipengaruhi oleh varian cluster (seperti misalnya Eksternal dlld, CA Eksternal)
  • dll.

tetapi saya menyerahkan kata terakhir kepada orang-orang yang lebih terampil daripada saya di bidang ini

saya pikir kita harus menyediakan waktu pada pertemuan untuk membahas seperti apa kebijakan perpanjangan sertifikat yang kami rekomendasikan. halaman tentang manajemen sertifikat mungkin memerlukan beberapa detail tambahan:
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs

dan kita perlu menulis panduan kecil, untuk cluster bidang kontrol tunggal sebagai permulaan setidaknya.

apa yang telah dilakukan pengguna adalah mencari tahu sendiri:
https://github.com/kubernetes/kubeadm/issues/581#issuecomment -421477139
^ komentar ini dan di atas berisi panduan buatan pengguna.

ini tandanya kita perlu menambahkan panduan resmi.
cc @timothysc @liztio

/ tetapkan @ereslibre

Cluster kami dengan beberapa ratus pengguna terhenti saat ini. Bisakah saya mendapatkan panduan cepat tentang apa yang harus dilakukan dengan sertifikat kadaluarsa?

@ dim

apa yang telah dilakukan pengguna adalah mencari tahu sendiri:
# 581 (komentar)
^ komentar ini dan di atas berisi panduan buatan pengguna.

ini adalah satu-satunya panduan yang kami miliki ATM.

[root<strong i="5">@controller0</strong> ~]# kubeadm alpha phase certs apiserver --apiserver-advertise-address 1.2.3.4
Error: unknown flag: --apiserver-advertise-address
Usage:

Flags:
  -h, --help   help for phase

Global Flags:
      --log-file string   If non-empty, use this log file
      --rootfs string     [EXPERIMENTAL] The path to the 'real' host root filesystem.
      --skip-headers      If true, avoid header prefixes in the log messages
  -v, --v Level           log level for V logs

error: unknown flag: --apiserver-advertise-address
[root<strong i="6">@controller0</strong> ~]# kubeadm alpha phase certs apiserver
This command is not meant to be run on its own. See list of available subcommands.

dalam 1.13 fase init telah lulus ke perintah init induk:
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd -phase-certs

di 1,12 bendera harus ada di sana:
https://v1-12.docs.kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-alpha/#cmd -phase-certs

1.11 akan segera keluar dari dukungan.

menghapus siklus hidup / label aktif.
pindah ke 1,15.

kemungkinan ide pembaruan dokumen di sini:
https://github.com/kubernetes/kubeadm/issues/1361#issuecomment -463192631

@bayu_joo
Pertanyaan: di 1.14 dengan master HA, apakah cukup mengikuti https://github.com/kubernetes/kubeadm/issues/581#issuecomment -421477139 pada satu master, atau kita harus bergabung kembali dengan master sekunder lagi untuk ambil kembali sertifikatnya?

bergabung kembali dengan node bidang kontrol sekunder, sepertinya merupakan pilihan yang cepat dan dapat dijalankan di 1,14.
kami belum memiliki dokumen apa pun dalam hal rotasi sertifikasi HA.
(belum lagi kami belum menambahkan langkah-langkah yang tepat seperti yang dilakukan https://github.com/kubernetes/kubeadm/issues/581#issuecomment-421477139).

Bukankah --experimental-upload-certs memberikan dasar untuk solusi yang lebih mudah untuk rotasi sertifikat di HA?

salah satu cara untuk melakukan rotasi sertifikat HA adalah:

  • pada node bidang kontrol tunggal, ikuti langkah-langkah yang disebutkan di atas untuk memperbarui sertifikatnya
  • pada panggilan node CP yang sama:
kubeadm init phase upload-certs --experimental-upload-certs

simpan kunci sertifikat.

kubeadm token create --print-join-command

simpan perintah join dengan token.

bergabung kembali dengan node bidang kontrol lainnya menggunakan token dan kunci sertifikat, satu per satu menggunakan --certs-key .... --experimental-control-plane-join

untuk para pekerja: tiriskan, gabung kembali menggunakan token baru, uncordon, satu per satu.

secara opsional menghapus token yang dihasilkan.

@bayu_joo
Dalam 3 kelompok master, saat kita mengubah sertifikat pada master "utama", etcd akan berhenti bekerja, karena sertifikat diubah (dan kuorum harus minimal 51%)? Jika demikian, mungkin kita harus menjaga 2 master sekunder dan baru kemudian mengubah sertifikat? Apakah "cordon master" mungkin?

Saya bukan ahli di sini, tetapi menurut saya salinan sertifikat otomatis tidak harus masuk ke dalam gambar ini

Sertifikat penyalinan otomatis menangani CA, front-proxy-CA, etcd-CA (dengan 10 tahun TTL) dan kunci SA (tanpa TTL)

Perintah perpanjang sertifikat menyentuh semua sertifikat lainnya (dengan 1 tahun TTL), yang berbeda antar master.
AFAIK, saat ini tidak ada yang menangani pembaruan sertifikat untuk file kubeconfig

ok, saya tidak mempertimbangkan apa yang sebenarnya dilakukan "salinan sertifikat" di sini.
kita perlu menulis dokumen bersertifikat yang tepat, dengan cara apa pun.

/menetapkan
/ siklus hidup aktif

Saya mulai menangani masalah ini.
Ada poin berbeda untuk dibahas (_diupdate 14 Mei 2019_)

  • Bahkan dengan Rotasi Sertifikat diaktifkan, kubelet.conf menunjuk ke sertifikat yang kedaluwarsa (sudah dilacak oleh https://github.com/kubernetes/kubeadm/issues/1317)
  • Rotasi Sertifikat tidak memperbarui sertifikat apiserver / etcd / front-proxy-client (diperbaiki oleh https://github.com/kubernetes/kubernetes/pull/76862)
  • Perintah fase alpha kubeadm memperbarui semua tidak memperbarui file KubeConfig (diperbaiki oleh https://github.com/kubernetes/kubernetes/pull/77180)
  • Dokumentasi tentang pembaruan sertifikat (dengan lebih detail tentang di mana perintah harus dijalankan, kapan, kubeconfig, HA)

Dan saya akan menangani semuanya dalam PR terpisah

@ neol123 @ neol123
langkah-langkah yang Anda sebutkan juga untuk merotasi sertifikat CA? Bisakah ini didokumentasikan juga? Bagaimana dengan merotasi kunci privat termasuk yang untuk CA?

Rotasi @ tushar00jain sertifikat CA terlacak di masalah lain https://github.com/kubernetes/kubeadm/issues/1350
Masalah ini fokus hanya pada sertifikat yang ditandatangani

@fabriziopandini saya melihat penutupan tiket hari ini karena Anda dapat mengirim PR untuk bagian pembaruan. haruskah tiket ditutup?

Bahkan dengan Rotasi Sertifikat diaktifkan, kubelet.conf menunjuk ke sertifikat yang kedaluwarsa (sudah dilacak oleh # 1317)

ya, ini dilacak dalam masalah terpisah, mungkin memerlukan diskusi / dokumen tentang solusi apa yang harus kami sediakan.

Rotasi Sertifikat tidak memperbarui sertifikat apiserver / etcd / front-proxy-client (diperbaiki oleh kubernetes / kubernetes # 76862)

Perintah kubeadm alpha phase certs memperbaharui semua tidak memperbarui file KubeConfig (diperbaiki oleh kubernetes / kubernetes # 77180)

Dokumentasi tentang pembaruan sertifikat (dengan lebih detail tentang di mana perintah harus dijalankan, kapan, kubeconfig, HA)

3 di atas harus dilakukan.

/Menutup
Sesuai komentar di atas, sebagian besar pekerjaan sudah selesai; bit yang hilang dilacak dalam masalah terpisah / khusus

@fabriziopandini : Menutup masalah ini.

Menanggapi ini :

/Menutup
Sesuai komentar di atas, sebagian besar pekerjaan sudah selesai; bit yang hilang dilacak dalam masalah terpisah / khusus

Instruksi untuk berinteraksi dengan saya menggunakan komentar PR tersedia di sini . Jika Anda memiliki pertanyaan atau saran terkait dengan perilaku saya, harap ajukan masalah ke kubernetes / test-infra repository.

Bisakah seseorang menjelaskan kepada saya bagaimana bagian "Bahkan dengan Rotasi Sertifikat diaktifkan, kubelet.conf menunjuk ke sertifikat yang kedaluwarsa" ditangani? Satu-satunya masalah terkait yang menyebutkan ini secara eksplisit ditutup untuk masalah lain yang ditutup dengan "Saya tidak yakin apakah ini masalah jadi buka tiket baru jika ada".
Saya di 1.16 tidak melihat ada pembaruan yang terjadi pada kubelet.conf dengan sudo kubeadm alpha certs renew all . Apa yang hilang? @bayu_joo

ringkasan singkat dari diskusi yang sangat panjang.

  1. rotasi sertifikat untuk semua sertifikat kecuali kubelet.conf sekarang dikelola oleh kubeadm alpha cert renew.
  2. rotasi sertifikat untuk kubelet.conf akan dikelola oleh kubelet itu sendiri (kecuali pengguna memilih keluar dari rotasi sertifikat otomatis)

Poin kedua ini sudah mulai hari ini berfungsi untuk semua node kecuali node tempat Anda menjalankan kubeadm init; https://github.com/kubernetes/kubernetes/pull/84118 akan memperbaikinya

@fabriziopandini Terima kasih untuk ini, masuk akal.

Bagi orang lain yang menghadapi masalah sertifikat di kubelte.conf sudah kedaluwarsa antara sekarang dan ketika hal di atas diperbaiki, saya menemukan artikel ini berguna:

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#check -certificate-expiration

Pada node yang dibuat dengan kubeadm init, sebelum kubeadm versi 1.17, terdapat bug di mana Anda harus memodifikasi konten kubelet.conf secara manual. Setelah kubeadm init selesai, Anda harus memperbarui kubelet.conf agar mengarah ke sertifikat klien kubelet yang telah dirotasi, dengan mengganti client-certificate-data dan client-key-data dengan:

client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

@AndrewSav Terima kasih untuk ini. Saya telah menggunakan operator promethes untuk memantau cluster. Saya baru-baru ini menerima peringatan "Sertifikat API Kubernetes akan kedaluwarsa dalam waktu kurang dari 7 hari", yang menurut saya terkait dengan masalah ini. Saya telah memperbarui konten kubelet.conf di node master. Tapi saya masih waspada. Apakah Anda punya saran? Tks.

@tannh jika Anda menginstal cluster dengan kubeadm, gunakan kubeadm untuk memeriksa percobaan sertifikat. Jika tidak, masalah Anda mungkin tidak terkait.

Pada node yang dibuat dengan kubeadm init, sebelum kubeadm versi 1.17, terdapat bug di mana Anda harus memodifikasi konten kubelet.conf secara manual. Setelah kubeadm init selesai, Anda harus memperbarui kubelet.conf agar mengarah ke sertifikat klien kubelet yang telah dirotasi, dengan mengganti client-certificate-data dan client-key-data dengan:

ini juga akan ada dalam catatan rilis untuk 1,17.

@adoerler Saya masih menjalankan versi lama kubeadm, bagaimana cara memperbarui kubelet.conf, admin.con, ... dll, setelah perpanjangan sertifikat?

Saya menjalankan "kubeadm alpha certs renew all", yang menghasilkan sertifikat baru, lalu saya perlu mengedit semua .conf di / etc / kubernetes, bagaimana caranya? di mana tepatnya mereka harus menunjuk?
dan dalam kasus multi master node, haruskah saya menjalankan perintah di semua master?

Halo @SuleimanWA ,

Saya tidak dapat memberi tahu Anda apa yang harus dilakukan pada multi master env, saya hanya memiliki satu master dalam pengaturan saya.

Inilah yang telah saya lakukan:

Pertama-tama pastikan untuk memindahkan file conf yang ada, karena file yang sudah ada tidak akan ditimpa!

mv /etc/kubernetes/admin.conf /backup
mv /etc/kubernetes/kubelet.conf /backup
mv /etc/kubernetes/controller-manager.conf /backup
mv /etc/kubernetes/scheduler.conf /backup

lalu perbarui file ini:

user<strong i="13">@master</strong>:~$ sudo kubeadm alpha phase kubeconfig all --apiserver-advertise-address=<INSERT-YOUR-APISERVER-IP-HERE>
I0124 21:56:14.253641   15040 version.go:236] remote version is much newer: v1.13.2; falling back to: stable-1.12
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"    

Untuk menerapkan sertifikat baru di pod sistem statis, cara termudah bagi saya adalah dengan mem-boot ulang server master.

Jangan lupa salin client-certificate-data dan client-key-data dari /etc/kubernetes/admin.conf ke .kube/config .

Semoga ini membantu

Andreas

Ada ide bagaimana menjalankan perintah ini di 1.14.10? Yang saya dapatkan hanyalah:

kubeadm alpha phase kubeconfig all --apiserver-advertise-address=192.168.102.170 Error: unknown flag: --apiserver-advertise-address

Kemudian dokumen mengatakan:
kubeadm alpha phase kubeconfig all
dan saya mendapatkan:
This command is not meant to be run on its own. See list of available subcommands.

Terima kasih

Hai @provggoryabdo ,

apa keluaran kubeadm version ?

BR Andreas

@provgregoryabdo perintah phase dipindahkan dari alfa dan ke init di versi yang lebih baru sehingga Anda dapat menggunakan sesuatu seperti

kubeadm init phase kubeconfig all --apiserver-advertise-address=<your_address>

@adoerler terima kasih atas bantuannya!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat