Memperpanjang sertifikat cluster yang telah habis masa berlakunya secara manual

Dokumen ini menjelaskan cara memperpanjang sertifikat yang habis masa berlakunya secara manual untuk Google Distributed Cloud. Sertifikat Transport Layer Security (TLS) digunakan oleh komponen bidang kontrol Google Distributed Cloud. Kapan sertifikat ini tidak berlaku lagi, kemampuan Anda untuk mengelola workload dan siklus proses cluster diblokir hingga sertifikat dapat diperpanjang. Untuk informasi selengkapnya tentang dampak sertifikat yang kedaluwarsa, lihat Masa berlaku sertifikat.

Halaman ini ditujukan untuk Admin, arsitek, serta Operator yang mengelola siklus proses infrastruktur teknologi dasar, serta merespons pemberitahuan dan halaman saat tujuan tingkat layanan (SLO) tidak terpenuhi atau aplikasi gagal. Untuk mempelajari informasi lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di Google Cloud konten, lihat Peran dan tugas pengguna GKE Enterprise yang umum.

Secara default, sertifikat TLS memiliki periode habis masa berlaku 1 tahun. Google Distributed Cloud memperpanjang sertifikat ini secara otomatis selama cluster upgrade dan kapan Anda Rotasikan certificate authority. Saran dari kami Anda secara teratur mengupgrade cluster untuk menjaganya tetap aman, didukung, dan mencegah kedaluwarsa sertifikat TLS.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Error yang disebabkan oleh masa berlaku sertifikat

Jika masa berlaku sertifikat TLS di cluster Anda berakhir, pengontrol inti tidak dapat membuat koneksi TLS dengan server Kubernetes API. Kurangnya yang menyebabkan error berikut:

  • Tidak dapat terhubung ke server: x509

    Saat Anda menggunakan kubectl untuk mendapatkan node cluster, responsnya akan menyertakan sebuah kesalahan bahwa sertifikat Anda telah kedaluwarsa, mirip dengan contoh berikut {i>output<i}:

    Unable to connect to the server: x509: certificate has expired or is not yet valid
    
  • tidak dapat terhubung: x509 atau koneksi ditolak

    Sertifikat yang habis masa berlakunya memblokir akses ke cluster {i>etcd<i}, karena peer tidak dapat berkomunikasi satu sama lain. Log {i>etcd<i} mungkin berisi entri {i>error<i} seperti hal 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 pada setiap node bidang kontrol:

  1. Login ke salah satu mesin node bidang kontrol dan jalankan perintah berikut:

    sudo kubeadm certs check-expiration
    

    Output perintah mencantumkan sertifikat yang dibuat oleh kubeadm untuk komponen bidang kontrol dan masa berlakunya, seperti yang ditunjukkan pada contoh berikut {i>output<i}:

    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              no
    
  2. Jalankan perintah berikut guna memeriksa waktu habis masa berlaku untuk kubelet sertifikat:

    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 -A2
    

    Respons untuk setiap perintah akan terlihat seperti contoh output berikut:

    Validity
        Not Before: Sep 17 22:27:53 2021 GMT
        Not After : Sep 17 22:33:16 2022 GMT
    

    Jika semua simpul bidang kontrol telah di-bootstrap bersamaan, maka waktu kedaluwarsa sertifikat berada dalam hitungan menit satu sama lain. Waktu ini hubungan berlaku di semua node bidang kontrol. Anda dapat memverifikasi waktu masa berlaku habis dengan menjalankan perintah sebelumnya pada setiap node bidang kontrol.

  3. Jalankan perintah berikut di workstation admin untuk memeriksa masa berlaku sertifikat klien di file kubeconfig cluster:

    grep 'client-certificate-data' KUBECONFIG_PATH | \
        awk '{print $2}' | base64 -d | openssl x509 -text | grep Validity -A2
    

    Responsnya akan terlihat seperti contoh output ini:

    Validity
        Not Before: Sep 17 22:27:53 2021 GMT
        Not After : Sep 17 22:33:16 2022 GMT
    
  4. Jalankan perintah berikut untuk mencari tahu masa berlaku sertifikat untuk {i>cluster kubeconfig<i} di cluster admin:

    kubectl get secret/CLUSTER_NAME-kubeconfig -n CLUSTER_NAMESPACE -o --kubeconfig=ADMIN_KUBECONFIG jsonpath='{.data.value}' | base64 --decode | grep client-certificate-data | awk '{print $2}' | base64 -d | openssl x509 -text | grep Validity -A2
    

    Responsnya akan terlihat seperti contoh output ini:

    Validity
        Not Before: Sep 17 22:27:53 2021 GMT
        Not After : Sep 17 22:33:16 2022 GMT
    

    Sertifikat kubeconfig di cluster admin dan sertifikat di file {i>kubeconfig<i} di workstation admin sama. Oleh karena itu, {i>output<i} untuk perintah ini dan perintah dari langkah sebelumnya harus cocok.

Perpanjang sertifikat secara manual

Untuk memperpanjang sertifikat TLS secara manual untuk cluster, gunakan petunjuk di bagian berikut ini.

Memperpanjang sertifikat di setiap node bidang kontrol

Lakukan langkah-langkah berikut pada setiap node bidang kontrol dari cluster yang terpengaruh:

  1. Cadangkan folder /etc/kubernetes.

  2. Jalankan perintah kubeadm berikut untuk memperpanjang semua sertifikat. Tujuan memperpanjang sertifikat menggunakan Certificate Authority yang ada (CA) pada komputer:

    sudo kubeadm certs renew all
    

    Output 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 renewed
    
  3. Pastikan sertifikat memiliki waktu habis masa berlaku yang baru dengan menjalankan perintah berikut berikut:

    sudo kubeadm certs check-expiration
    
  4. Tidak semua komponen bidang kontrol mendukung pemuatan ulang sertifikat dinamis. Untuk memilih sertifikat yang diperpanjang, langkah berikut akan memulai ulang hal berikut penampung: kube-apiserver, kube-scheduler, kube-controller-manager, dan etcd.

    Ulangi langkah-langkah berikut untuk masing-masing dari keempat penampung:

    1. Temukan ID penampung untuk setiap penampung:

      sudo crictl ps | grep CONTAINER_NAME
      

      Ganti CONTAINER_NAME dengan nama penampung berikut: kube-apiserver, kube-scheduler, kube-controller-manager, atau etcd (bukan etcd-defrag).

      Responsnya serupa dengan output berikut:

      c331ade490cb6       28df10594cd92      26 hours ago       Running          kube-apiserver ...
      

      ID penampung adalah nilai di kolom pertama.

    2. Hentikan setiap penampung:

      sudo crictl stop CONTAINER_ID
      

      Ganti CONTAINER_ID dengan ID penampung dari langkah sebelumnya.

      Saat container yang dihentikan keluar, kubelet membuat container baru di dan menghapus yang berhenti. Jika Anda menemukan error, seperti context deadline exceeded (kode error DeadlineExceeded), jalankan kembali perintah.

Memverifikasi bahwa konektivitas telah dipulihkan

Sertifikat kubeadm kini akan diperpanjang pada semua node bidang kontrol. Jika Anda memperpanjang sertifikat yang habis masa berlakunya, lakukan langkah berikut:

  • Untuk memverifikasi koneksi dengan server Kubernetes API, jalankan perintah berikut Perintah kubectl di node bidang kontrol apa pun:

    kubectl get nodes --kubeconfig=/etc/kubernetes/admin.conf
    

Respons akan menampilkan daftar node untuk cluster. Jika sertifikat diperpanjang dengan benar, tidak ada error TLS atau sertifikat yang ditampilkan.

Mengganti file kubeconfig cluster

Guna mengganti file kubeconfig untuk cluster Anda dengan file yang diperpanjang sertifikatnya, gunakan langkah-langkah berikut:

  1. Untuk membuat file kubeconfig yang baru, jalankan perintah kubectl berikut di workstation admin:

    kubectl --kubeconfig="ADMIN_KUBECONFIG" get secret/CLUSTER_NAME-kubeconfig  \
        -n "CLUSTER_NAMESPACE"  -o jsonpath='{.data.value}'  | base64 --decode > new_kubeconfig.conf
    

    Ganti kode berikut:

    • ADMIN_KUBECONFIG: ke file kubeconfig cluster admin.

    • CLUSTER_NAME: nama cluster yang sertifikatnya Anda perpanjang.

    • CLUSTER_NAMESPACE: namespace cluster yang sertifikatnya Anda perpanjang.

    File new_kubeconfig.conf berisi data sertifikat yang diperbarui.

  2. Pastikan bahwa kubeconfig baru berfungsi dengan menjalankan perintah kubectl apa pun, kredensial baru:

    kubectl get nodes --kubeconfig new_kubeconfig.conf
    
  3. Ganti konten file kubeconfig lama yang disimpan di direktori cluster di workstation admin dengan isi dari file kubeconfig new-kubeconfig.conf.

    Secara default, jalur ke file konfigurasi cluster adalah bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

Verifikasi sertifikat kubelet dan mulai ulang etcd-defrag

Untuk menyelesaikan proses perpanjangan sertifikat cluster secara manual, lakukan langkah-langkah berikut untuk setiap node bidang kontrol:

  1. Masuk ke {i>node<i} bidang kontrol dan verifikasi klien kubelet dan menyalurkan waktu habis masa berlaku sertifikat dengan menjalankan perintah berikut:

    Sertifikat Kubelet diputar secara otomatis selama bidang kontrol dapat dijangkau. Periode perpanjangan otomatis sertifikat kubelet adalah lebih singkat dari periode habis masa berlaku untuk 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 -A2
    

    Output 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 GMT
    
  2. Gunakan perintah berikut untuk memulai ulang container etcd-defrag:

    Penampung etcd-defrag menggunakan sertifikat klien apiserver-etcd untuk berbicara ke {i>etcd<i} dan harus dimulai ulang untuk mengambil sertifikat yang diperbarui.

    kubectl rollout restart daemonset etcd-defrag -n kube-system --kubeconfig KUBECONFIG_PATH
    

Setelah menyelesaikan langkah-langkah manual ini untuk memperpanjang sertifikat cluster, pastikan semua Pod berjalan dengan baik dan tidak ada error TLS yang dilaporkan untuk kontrol kontainer bidang pesawat.

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.