Dokumen ini menjelaskan cara memperpanjang sertifikat yang telah habis masa berlakunya secara manual untuk Google Distributed Cloud. Sertifikat Transport Layer Security (TLS) digunakan oleh komponen bidang kontrol Google Distributed Cloud. Jika sertifikat ini habis masa berlakunya, kemampuan Anda untuk mengelola workload dan siklus proses cluster akan diblokir hingga sertifikat dapat diperpanjang. Untuk mengetahui informasi selengkapnya tentang dampak sertifikat yang habis masa berlakunya, lihat Masa berlaku sertifikat.
Halaman ini ditujukan untuk Admin dan arsitek serta Operator yang mengelola siklus proses infrastruktur teknologi yang mendasarinya, dan merespons pemberitahuan serta halaman saat tujuan tingkat layanan (SLO) tidak terpenuhi atau aplikasi gagal. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Secara default, sertifikat TLS, termasuk sertifikat etcd, memiliki masa berlaku 1 tahun. Google Distributed Cloud memperpanjang sertifikat ini selama upgrade cluster dan saat Anda Merotasi otoritas sertifikat. Sertifikat ini tidak diperbarui secara berkala dengan sendirinya. Sebaiknya upgrade cluster Anda secara rutin agar tetap aman, didukung, dan untuk mencegah sertifikat TLS habis masa berlakunya.
Error yang disebabkan oleh masa berlaku sertifikat
Jika sertifikat TLS di cluster Anda habis masa berlakunya, pengontrol inti tidak dapat membuat koneksi TLS dengan server Kubernetes API. Kurangnya konektivitas ini menyebabkan error berikut:
Unable to connect to the server: x509
Saat Anda menggunakan
kubectluntuk mendapatkan node cluster, respons akan menyertakan error bahwa sertifikat Anda telah habis masa berlakunya, mirip dengan output contoh berikut:Unable to connect to the server: x509: certificate has expired or is not yet validcould not connect: x509 atau rejected connection
Sertifikat yang habis masa berlakunya memblokir akses ke cluster etcd, karena peer tidak dapat berkomunikasi satu sama lain. Log etcd mungkin berisi entri error seperti berikut:
W | rafthttp: health check for peer 6221a1d241bb2d0a could not connect: x509: certificate has expired or is not yet valid I | embed: rejected connection from "10.200.0.4:46108" (error "remote error: tls: bad certificate", ServerName "")
Memeriksa waktu habis masa berlaku sertifikat
Untuk memeriksa waktu habis masa berlaku sertifikat, lakukan langkah-langkah berikut di setiap node bidang kontrol:
Login ke salah satu mesin node bidang kontrol dan jalankan perintah berikut:
sudo kubeadm certs check-expirationOutput perintah mencantumkan sertifikat yang dibuat oleh
kubeadmuntuk komponen bidang kontrol dan masa berlakunya, seperti yang ditunjukkan dalam output contoh berikut:CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED admin.conf Nov 28, 2021 19:09 UTC 53m no apiserver Nov 28, 2021 19:09 UTC 53m ca no apiserver-etcd-client Nov 28, 2021 19:09 UTC 53m etcd-ca no apiserver-kubelet-client Nov 28, 2021 19:09 UTC 53m ca no controller-manager.conf Nov 28, 2021 19:09 UTC 53m no etcd-healthcheck-client Nov 28, 2021 19:09 UTC 53m etcd-ca no etcd-peer Nov 28, 2021 19:09 UTC 53m etcd-ca no etcd-server Nov 28, 2021 19:09 UTC 53m etcd-ca no front-proxy-client Nov 28, 2021 19:09 UTC 53m front-proxy-ca no scheduler.conf Nov 28, 2021 19:09 UTC 53m no CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED ca Nov 26, 2031 18:06 UTC 9y no etcd-ca Nov 26, 2031 18:06 UTC 9y no front-proxy-ca Nov 26, 2031 18:06 UTC 9y noJalankan perintah berikut untuk memeriksa waktu habis masa berlaku sertifikat
kubelet:sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text | grep Validity -A2 sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -text | grep Validity -A2Respons untuk setiap perintah terlihat seperti output contoh berikut:
Validity Not Before: Sep 17 22:27:53 2021 GMT Not After : Sep 17 22:33:16 2022 GMTJika semua node bidang kontrol telah di-bootstrap pada waktu yang sama, waktu habis masa berlaku sertifikat akan berada dalam hitungan menit satu sama lain. Hubungan waktu ini berlaku di semua node bidang kontrol. Anda dapat memverifikasi waktu habis masa berlaku dengan menjalankan perintah sebelumnya di setiap node bidang kontrol.
Jalankan perintah berikut di workstation admin untuk memeriksa waktu habis masa berlaku sertifikat klien di file kubeconfig cluster:
grep 'client-certificate-data' KUBECONFIG_PATH | \ awk '{print $2}' | base64 -d | openssl x509 -text | grep Validity -A2Responsnya terlihat seperti output contoh ini:
Validity Not Before: Sep 17 22:27:53 2021 GMT Not After : Sep 17 22:33:16 2022 GMTJalankan perintah berikut untuk mencari masa berlaku sertifikat kubeconfig cluster di cluster admin:
kubectl get secret/CLUSTER_NAME-kubeconfig \ -n CLUSTER_NAMESPACE \ --kubeconfig ADMIN_KUBECONFIG \ -o jsonpath='{.data.value}' | base64 --decode | grep client-certificate-data | \ awk '{print $2}' | base64 -d | openssl x509 -text | grep Validity -A2Ganti kode berikut:
ADMIN_KUBECONFIG: jalur file kubeconfig cluster admin.CLUSTER_NAME: nama cluster yang sertifikatnya akan Anda perpanjang.CLUSTER_NAMESPACE: namespace cluster yang sertifikatnya akan Anda perpanjang.
Responsnya terlihat seperti output contoh ini:
Validity Not Before: Sep 17 22:27:53 2021 GMT Not After : Sep 17 22:33:16 2022 GMTSertifikat kubeconfig di cluster admin dan sertifikat di file kubeconfig di workstation admin sama. Oleh karena itu, output untuk perintah ini dan perintah dari langkah sebelumnya harus cocok.
Memperpanjang sertifikat secara manual
Untuk memperpanjang sertifikat TLS cluster secara manual, gunakan petunjuk di bagian berikut.
Memperpanjang sertifikat di setiap node bidang kontrol
Lakukan langkah-langkah berikut di setiap node bidang kontrol cluster yang terpengaruh:
Buat cadangan folder
/etc/kubernetes.Jalankan perintah
kubeadmberikut untuk memperpanjang semua sertifikat. Perintah ini memperpanjang sertifikat menggunakan Certificate Authority (CA) yang ada di mesin:sudo kubeadm certs renew allOutput perintah mirip dengan contoh berikut:
certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed certificate for serving the Kubernetes API renewed certificate the apiserver uses to access etcd renewed certificate for the API server to connect to kubelet renewed certificate embedded in the kubeconfig file for the controller manager to use renewed certificate for liveness probes to healthcheck etcd renewed certificate for etcd nodes to communicate with each other renewed certificate for serving etcd renewed certificate for the front proxy client renewed certificate embedded in the kubeconfig file for the scheduler manager to use renewedVerifikasi bahwa sertifikat memiliki waktu habis masa berlaku baru dengan menjalankan perintah berikut:
sudo kubeadm certs check-expirationTidak semua komponen bidang kontrol mendukung pemuatan ulang sertifikat dinamis. Untuk mengambil sertifikat yang diperpanjang, langkah-langkah berikut akan memulai ulang container berikut:
kube-apiserver,kube-scheduler, dankube-controller-manager.Ulangi langkah-langkah berikut untuk setiap dari empat container:
Temukan ID container untuk setiap container:
sudo crictl ps | grep CONTAINER_NAMEGanti
CONTAINER_NAMEdengan nama container berikut:kube-apiserver,kube-scheduler, ataukube-controller-manager.Responsnya mirip dengan output berikut:
c331ade490cb6 28df10594cd92 26 hours ago Running kube-apiserver ...ID container adalah nilai di kolom pertama.
Hentikan setiap container:
sudo crictl stop CONTAINER_IDGanti
CONTAINER_IDdengan ID container dari langkah sebelumnya.Saat container yang dihentikan keluar, kubelet akan membuat container baru di tempatnya dan menghapus container yang dihentikan. Jika Anda mengalami error, seperti
context deadline exceeded(kode errorDeadlineExceeded), jalankan kembali perintah tersebut.
Memverifikasi bahwa konektivitas telah dipulihkan
Sertifikat kubeadm kini harus diperpanjang di semua node bidang kontrol. Jika Anda memperpanjang sertifikat yang telah habis masa berlakunya, lakukan langkah berikut:
Untuk memverifikasi koneksi dengan server Kubernetes API, jalankan perintah
kubectlberikut di node bidang kontrol mana pun:kubectl get nodes --kubeconfig /etc/kubernetes/admin.conf
Respons harus menampilkan daftar node untuk cluster. Jika sertifikat Anda diperpanjang dengan benar, tidak ada error TLS atau sertifikat yang ditampilkan.
Memperbarui secret kubeconfig di cluster
Langkah-langkah berikut menggunakan sertifikat yang diperpanjang dari file admin.conf untuk memperbarui secret kubeconfig untuk cluster Anda. Namun, konten file admin.conf yang diperbarui tidak dapat digunakan apa adanya. Anda harus membuat salinan file admin.conf dengan beberapa pengeditan yang diperlukan terlebih dahulu.
Untuk memperbarui kubeconfig baru ke secret, lakukan langkah-langkah berikut di node bidang kontrol:
Gunakan
seduntuk menggantikubernetesdalam fileadmin.confdengan nama cluster Anda dan tulis perubahan ke file baru,kubeconfig_secret.conf:sed "s/kubernetes/CLUSTER_NAME/g" \ /etc/kubernetes/admin.conf > /etc/kubernetes/kubeconfig_secret.confGunakan
diffuntuk mengonfirmasi bahwa filekubeconfig_secret.conftelah diperbarui:diff /etc/kubernetes/admin.conf /etc/kubernetes/kubeconfig_secret.confRespons akan menampilkan semua tempat file
kubeconfig_secret.confberbeda dari fileadmin.confyang diperbarui. Misalnya, jika Anda melakukan langkah sebelumnya untuk cluster bernamademo-cluster, output-nya akan terlihat mirip dengan berikut ini:6c6 < name: kubernetes --- > name: demo-cluster 9,12c9,12 < cluster: kubernetes < user: kubernetes-admin < name: kubernetes-admin@kubernetes < current-context: kubernetes-admin@kubernetes --- > cluster: demo-cluster > user: demo-cluster-admin > name: demo-cluster-admin@demo-cluster > current-context: demo-cluster-admin@demo-cluster 16c16 < - name: kubernetes-admin --- > - name: demo-cluster-adminJalankan perintah berikut untuk memperbarui secret kubeconfig di cluster Anda:
CLUSTER_KUBECONFIG_BASE64=$(base64 /etc/kubernetes/kubeconfig_secret.conf -w 0) kubectl get secret/CLUSTER_NAME-kubeconfig \ -n CLUSTER_NAMESPACE \ --kubeconfig /etc/kubernetes/admin.conf -o json | jq \ --arg conf "${CLUSTER_KUBECONFIG_BASE64}" '.data."value" |= $conf' | kubectl apply \ --kubeconfig /etc/kubernetes/admin.conf -f -
Mengganti file kubeconfig cluster
Untuk mengganti file kubeconfig cluster Anda dengan file yang memiliki sertifikat yang diperpanjang, gunakan langkah-langkah berikut:
Salin file
admin.confdari salah satu node bidang kontrol cluster ke workstation admin.Seperti yang disebutkan di bagian sebelumnya, file
admin.confditemukan di direktorietc/kubernetespada node bidang kontrol cluster.Untuk membuat file kubeconfig baru, jalankan perintah
kubectlberikut di workstation admin:kubectl --kubeconfig ADMIN_CONF_PATH get secret/CLUSTER_NAME-kubeconfig \ -n "CLUSTER_NAMESPACE" -o jsonpath='{.data.value}' | \ base64 --decode > new_kubeconfig.confGanti kode berikut:
ADMIN_CONF_PATH: jalur fileadmin.confyang telah disalin ke workstation admin dari node bidang kontrol.CLUSTER_NAME: nama cluster yang sertifikatnya akan Anda perpanjang.CLUSTER_NAMESPACE: namespace cluster yang sertifikatnya akan Anda perpanjang.
File
new_kubeconfig.confberisi data sertifikat yang diperbarui.Verifikasi bahwa kubeconfig baru berfungsi dengan menjalankan perintah
kubectlapa pun, menggunakan kredensial baru:kubectl get nodes --kubeconfig new_kubeconfig.confGanti konten file kubeconfig lama yang disimpan di direktori cluster di workstation admin dengan konten file kubeconfig baru
new-kubeconfig.conf.Secara default, jalur ke file konfigurasi cluster adalah
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.
Memverifikasi sertifikat kubelet dan memulai ulang etcd-defrag
Untuk menyelesaikan proses memperpanjang sertifikat cluster secara manual, lakukan langkah-langkah berikut untuk setiap node bidang kontrol:
Login ke node bidang kontrol dan verifikasi waktu habis masa berlaku sertifikat klien dan server kubelet dengan menjalankan perintah berikut:
Sertifikat Kubelet dirotasi secara otomatis selama bidang kontrol dapat dijangkau. Periode perpanjangan otomatis sertifikat kubelet lebih singkat daripada periode habis masa berlaku sertifikat komponen bidang kontrol. Oleh karena itu, kemungkinan sertifikat kubelet telah diperpanjang sebelumnya:
sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text | grep Validity -A2 sudo openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -text | grep Validity -A2Output dari salah satu perintah terlihat seperti contoh berikut:
Validity Not Before: Nov 28 18:04:57 2022 GMT Not After : Nov 28 19:04:57 2023 GMTGunakan perintah berikut untuk memulai ulang container
etcd-defrag:Container
etcd-defragmenggunakan sertifikat klienapiserver-etcduntuk berkomunikasi dengan etcd dan harus dimulai ulang untuk mengambil sertifikat yang diperbarui.kubectl rollout restart daemonset etcd-defrag -n kube-system --kubeconfig KUBECONFIG_PATH
Setelah Anda menyelesaikan langkah-langkah manual ini untuk memperpanjang sertifikat cluster, verifikasi bahwa semua Pod berjalan dengan benar dan tidak ada error TLS yang dilaporkan untuk container bidang kontrol.
Langkah berikutnya
Jika Anda memerlukan bantuan tambahan, hubungi Layanan Pelanggan Cloud. Anda juga dapat melihat Mendapatkan dukungan untuk mengetahui informasi selengkapnya tentang resource dukungan, termasuk hal berikut:
- Persyaratan untuk membuka kasus dukungan.
- Alat untuk membantu Anda memecahkan masalah, seperti konfigurasi lingkungan, log, dan metrik.
- Komponen yang didukung .