Merotasi kredensial cluster

Merencanakan dan merotasi kredensial cluster Anda secara teratur sangat penting untuk menjaga cluster Anda dalam kondisi yang baik. Dokumen ini menunjukkan cara melakukan rotasi kredensial dan memberikan praktik terbaik untuk merencanakan rotasi reguler.

Dokumen ini ditujukan untuk spesialis Keamanan yang bertanggung jawab atas siklus proses kredensial di cluster GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

Tentang rotasi kredensial di GKE

Masa berlaku root Certificate Authority (CA) cluster terbatas. Saat masa berlaku CA berakhir, kredensial apa pun yang ditandatangani oleh CA tidak lagi valid, termasuk sertifikat klien cluster (dari kolom API MasterAuth), kunci, dan sertifikat untuk API server, serta sertifikat klien kubelet. Masa berlaku kredensial cluster Anda bergantung pada waktu Anda membuat cluster atau waktu terakhir Anda merotasi kredensial. Untuk mengetahui detailnya, periksa masa berlaku kredensial lifetime.

Anda dapat mencabut dan menerbitkan ulang kredensial ini dengan melakukan salah satu jenis rotasi berikut.

  • Rotasi kredensial:

    • Merotasi alamat IP yang digunakan bidang kontrol untuk server Kubernetes API.
    • Merotasi root CA cluster.
    • Merotasi kunci Kubernetes ServiceAccount, yang digunakan untuk menandatangani dan memverifikasi kredensial ServiceAccount.
    • Merotasi CA lapisan agregasi.
  • Rotasi alamat IP:

    • Merotasi alamat IP yang digunakan bidang kontrol untuk server Kubernetes API.
    • Merotasi root CA cluster.

Untuk kedua jenis rotasi ini, node harus dibuat ulang sebelum dapat menggunakan kredensial baru.

Anda harus memulai dan menyelesaikan rotasi kredensial untuk cluster Anda sebelum masa berlaku kredensial Anda saat ini berakhir.

Waktu untuk melakukan rotasi kredensial

Anda harus melakukan rotasi kredensial secara teratur dan sebelum tanggal habis masa berlaku kredensial saat ini. Rotasi kredensial memerlukan pembuatan ulang node untuk menggunakan kredensial baru, yang mungkin akan mengganggu workload yang sedang berjalan. Rencanakan periode pemeliharaan dan lakukan rotasi selama masa pemeliharaan untuk menghindari periode nonaktif workload yang tidak terduga atau klien API yang tidak responsif di luar cluster.

Untuk mempelajari lebih lanjut pengaruh ketersediaan pemeliharaan terhadap rotasi kredensial cluster, dan jenis gangguan yang dialami cluster Anda selama langkah-langkah rotasi, lihat baris untuk rotasi kredensial dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node dan mematuhi kebijakan pemeliharaan. GKE bergantung pada ketersediaan resource untuk mengupdate node. Untuk mempelajari lebih lanjut update node, lihat Merencanakan gangguan update node.

Masa berlaku kredensial cluster

Masa berlaku kredensial cluster biasanya bergantung pada waktu cluster dibuat atau waktu terakhir kredensial dirotasi:

  • Cluster yang dibuat sebelum sekitar Oktober 2021 memiliki masa berlaku CA 5 tahun.
  • Cluster yang dibuat setelah sekitar Oktober 2021 memiliki masa berlaku CA 30 tahun.
  • Cluster yang dirotasi setelah sekitar Januari 2022 memiliki masa berlaku CA 30 tahun.

Menemukan cluster dengan kredensial yang akan habis masa berlakunya atau yang sudah habis masa berlakunya

Jika kredensial cluster Anda akan habis masa berlakunya dalam 180 hari ke depan, atau kredensial cluster Anda sudah habis masa berlakunya, GKE akan memberikan panduan dengan insight dan rekomendasi untuk menjelaskan bahwa Anda harus melakukan rotasi kredensial untuk cluster ini. Panduan ini mencakup tanggal habis masa berlaku kredensial. Anda dapat melihat panduan ini di Google Cloud konsol. Atau, Anda dapat melihat panduan ini dengan gcloud CLI, atau Recommender API, dengan menentukan CLUSTER_CA_EXPIRATION subtype.

Jika Anda menerima insight dan rekomendasi untuk cluster, Anda harus melakukan rotasi kredensial, atau GKE akan otomatis memulai rotasi kredensial dalam 30 hari sejak tanggal habis masa berlaku CA saat ini, seperti yang dijelaskan di bagian berikutnya. Setelah rotasi kredensial selesai insight dan rekomendasi mungkin memerlukan waktu hingga 36 jam untuk diselesaikan.

Kebijakan otomatisasi GKE untuk mencegah pemadaman layanan cluster

Agar cluster Anda tidak memasuki status yang tidak dapat dipulihkan jika masa berlaku kredensial saat ini berakhir, GKE akan otomatis memulai rotasi kredensial dalam 30 hari sejak tanggal habis masa berlaku CA saat ini. Misalnya, CA cluster Anda akan habis masa berlakunya pada 6 Januari 2024 dan Anda tidak merotasi kredensial Anda pada 5 Desember 2023. GKE akan memulai rotasi otomatis pada atau setelah 7 Desember 2023, dan mencoba menyelesaikan rotasi ini tujuh hari setelah operasi dimulai. Rotasi otomatis ini adalah upaya terakhir untuk mencegah pemadaman layanan cluster, dan memiliki pertimbangan berikut:

  • Rotasi otomatis umumnya mematuhi masa pemeliharaan atau pengecualian pemeliharaan. Namun, GKE berhak melakukan langkah-langkah dalam waktu 30 hari sejak habis masa berlaku untuk merotasi kredensial, terlepas dari ketersediaan pemeliharaan. Dalam waktu 30 hari, GKE akan mengabaikan ketersediaan pemeliharaan untuk langkah pertama, yaitu memulai rotasi.
  • Jika ketersediaan pemeliharaan mencegah GKE menyelesaikan rotasi pada awalnya, GKE akan terus mencoba menyelesaikan rotasi hingga tanggal habis masa berlaku kredensial, setelah itu cluster tidak dapat dipulihkan.
  • Saat rotasi kredensial selesai, kredensial yang habis masa berlakunya akan dicabut. Klien Kubernetes API di luar cluster, seperti kubectl di lingkungan lokal, tidak akan berfungsi sebelum Anda mengonfigurasi klien untuk menggunakan kredensial baru.
  • Pembuatan ulang node pool selama rotasi dapat menyebabkan gangguan pada workload yang berjalan.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
  • Pastikan Anda memiliki cluster Autopilot atau Standar yang sudah ada. Jika Anda memerlukannya, buat cluster Autopilot.

Memeriksa masa berlaku kredensial

Periksa masa berlaku kredensial Anda sebelum dan sesudah melakukan rotasi kredensial agar Anda mengetahui validitas root CA cluster Anda.

Untuk memeriksa masa berlaku kredensial untuk satu cluster, jalankan perintah berikut:

gcloud container clusters describe CLUSTER_NAME \
    --location LOCATION \
    --format "value(masterAuth.clusterCaCertificate)" \
    | base64 --decode \
    | openssl x509 -noout -dates

Outputnya mirip dengan hal berikut ini:

notBefore=Mar 17 16:45:34 2023 GMT
notAfter=Mar  9 17:45:34 2053 GMT

Jika Anda menjalankan perintah ini setelah memulai rotasi kredensial, outputnya adalah masa berlaku sertifikat asli Anda. Sertifikat ini tetap valid hingga Anda menyelesaikan rotasi. Setelah Anda menyelesaikan rotasi, outputnya adalah masa berlaku sertifikat baru Anda.

Untuk memeriksa masa berlaku kredensial untuk semua cluster dalam project, jalankan perintah berikut:

gcloud container clusters list --project PROJECT_ID \
    --format="value(name,masterAuth.clusterCaCertificate)" | \
while read -r cluster ca; do \
    expiry_date=$(echo -e "$ca" | base64 --decode | openssl x509 -noout -enddate | awk -F'=' '{print $2}'); \
    printf "%-40s  | %s\n" "$cluster" "$expiry_date" ; \
done | \
column -t | \
awk -F',' 'BEGIN{print "Cluster Name    |  Certificate Expiry Date"} {print}'

Merotasi kredensial

Setiap rotasi kredensial melibatkan langkah-langkah berikut:

  1. Mulai rotasi: bidang kontrol mulai aktif di alamat IP baru selain alamat IP asli. Kredensial baru dikeluarkan untuk workload dan bidang kontrol.
  2. Buat ulang node: GKE membuat ulang node cluster sehingga node tersebut menggunakan alamat IP dan kredensial baru, dengan memperhatikan ketersediaan dari masa pemeliharaan dan pengecualian. Anda juga dapat membuat ulang node secara manual dengan melakukan upgrade versi node ke versi GKE yang sama dengan yang sudah dijalankan node.
  3. Update klien API: setelah memulai rotasi, update klien API cluster, seperti mesin pengembangan yang menggunakan kubectl, untuk berkomunikasi dengan bidang kontrol menggunakan alamat IP baru.
  4. Selesaikan rotasi: bidang kontrol berhenti melayani traffic melalui alamat IP asli. Kredensial lama dicabut, termasuk kredensial statis yang ada untuk Kubernetes ServiceAccount.

Saat Anda memulai rotasi kredensial, atau saat GKE secara otomatis memulai rotasi, GKE akan melakukan langkah-langkah ini secara otomatis, termasuk mencoba menyelesaikan rotasi. Pada setiap langkah, jika masa berlaku cluster lebih dari 30 hari dari sekarang, GKE akan mematuhi ketersediaan pemeliharaan. Selama rotasi otomatis sebelum masa berlaku cluster berakhir, GKE berhak mengabaikan ketersediaan pemeliharaan untuk mencegah cluster Anda menjadi tidak dapat dipulihkan. Dalam waktu 30 hari, GKE akan mengabaikan ketersediaan pemeliharaan untuk langkah pertama, yaitu memulai rotasi.

Jika Anda tidak menyelesaikan rotasi kredensial dalam waktu tujuh hari setelah memulainya, GKE akan mencoba menyelesaikan rotasi untuk Anda. Jika ada node di cluster Anda yang masih menggunakan kredensial sebelumnya, operasi penyelesaian otomatis akan gagal, tetapi GKE akan terus mencoba penyelesaian hingga masa berlaku kredensial berakhir dan cluster menjadi tidak dapat dipulihkan. Anda harus berencana untuk melacak dan menyelesaikan rotasi kredensial yang Anda mulai secara manual. Untuk mengganti pemblokir ketersediaan pemeliharaan, jalankan perintah di setiap bagian berikut untuk memicu fase proses rotasi tersebut secara manual. Jangan mengandalkan penyelesaian otomatis, yang merupakan upaya terbaik.

Memulai rotasi

Untuk memulai rotasi kredensial, jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --location LOCATION \
    --start-credential-rotation

Perintah ini akan membuat kredensial baru, menerbitkan kredensial ini ke bidang kontrol, dan mengonfigurasi bidang kontrol untuk menyalurkan dua alamat IP: alamat IP asli dan alamat IP baru.

Memulai ulang komponen dalam cluster dengan koneksi berjangka panjang

Setelah Anda memulai rotasi alamat IP atau kredensial, Certificate Authority (CA) cluster juga akan dirotasi. Beberapa komponen dalam cluster yang mempertahankan koneksi TLS berjangka panjang, misalnya metrics-server dan konnectivity-agent, mungkin tidak otomatis mempercayai CA cluster baru.

Situasi ini dapat menyebabkan koneksi tersebut gagal saat berkomunikasi dengan node atau endpoint cluster lainnya, dan Anda mungkin melihat error handshake TLS di log komponen, seperti x509: certificate signed by unknown authority.

Jika Anda melihat error ini setelah memulai rotasi, Anda mungkin perlu memulai ulang Pod secara manual. Memulai ulang akan memaksa Pod untuk melakukan inisialisasi ulang koneksinya dan memuat sertifikat CA cluster baru. Misalnya, untuk memulai ulang metrics-server dan konnectivity-agent, jalankan perintah berikut:

kubectl rollout restart deployment metrics-server -n kube-system
kubectl rollout restart deployment konnectivity-agent -n kube-system

Membuat ulang node

Setelah mengonfigurasi ulang server API untuk melayani alamat IP baru, GKE akan otomatis memperbarui node Anda agar dapat menggunakan kredensial dan alamat IP baru jika ada ketersediaan pemeliharaan. GKE mengupgrade semua node Anda ke versi GKE yang sama dengan yang sudah dijalankan node, yang akan membuat ulang node. Untuk informasi selengkapnya, lihat Upgrade node pool.

Secara default, GKE otomatis menyelesaikan rotasi kredensial tujuh hari setelah Anda memulai operasi. Jika masa atau pengecualian pemeliharaan aktif dalam cluster Anda mencegah GKE membuat ulang beberapa node selama periode tujuh hari ini, rotasi kredensial akan gagal diselesaikan pada awalnya. Namun, GKE akan terus mencoba membuat ulang node dan menyelesaikan rotasi hingga ketersediaan pemeliharaan memungkinkan GKE melanjutkan. Selama peristiwa besar seperti Google Cloud Next, GKE mungkin juga menjeda pembuatan ulang node otomatis sehingga Anda tidak mengalami gangguan.

Jika Anda menggunakan pengecualian pemeliharaan atau masa pemeliharaan yang dapat mengakibatkan rotasi gagal, paksa GKE untuk membuat ulang node Anda dengan melakukan salah satu langkah berikut:

  • Di cluster Autopilot, upgrade bidang kontrol Anda secara manual:

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --master \
        --cluster-version=VERSION
    

    Ganti VERSION dengan versi GKE yang sama dengan yang sudah digunakan cluster.

  • Di cluster Standar, upgrade setiap node pool secara manual.

Untuk mengetahui informasi selengkapnya, lihat perubahan manual yang mematuhi kebijakan pemeliharaan GKE.

Memeriksa progres pembuatan ulang node pool

  1. Untuk memantau operasi rotasi, jalankan perintah berikut:

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    Perintah ini menampilkan ID operasi dari operasi upgrade node.

  2. Untuk melakukan polling pada operasi, teruskan ID operasi ke perintah berikut:

    gcloud container operations wait OPERATION_ID
    

Node pool dibuat ulang satu per satu, dan masing-masing memiliki operasinya sendiri. Jika Anda memiliki beberapa node pool, gunakan petunjuk ini untuk melakukan polling pada setiap operasi.

Mengupdate klien API

Setelah memulai rotasi kredensial, Anda harus mengupdate semua klien API di luar cluster (seperti kubectl pada mesin developer) agar menggunakan kredensial baru dan mengarah ke alamat IP baru bidang kontrol.

Untuk memperbarui klien API Anda, jalankan perintah berikut untuk setiap klien:

gcloud container clusters get-credentials CLUSTER_NAME \
    --location LOCATION

Mengupdate kredensial Kubernetes ServiceAccount

Jika Anda menggunakan kredensial statis untuk ServiceAccount di cluster Anda, beralihlah ke kredensial berjangka pendek. Menyelesaikan rotasi akan membatalkan kredensial ServiceAccount yang ada. Jika Anda tidak ingin menggunakan kredensial berjangka pendek, pastikan Anda membuat ulang kredensial statis untuk semua ServiceAccount di cluster sebelum Anda menyelesaikan rotasi.

Untuk menemukan kredensial ServiceAccount statis yang ada di cluster Anda, jalankan perintah berikut:

kubectl get secrets --all-namespaces --field-selector type=kubernetes.io/service-account-token

Jika output perintah ini adalah No resources found, cluster Anda tidak memiliki kredensial ServiceAccount statis.

Mengupdate alamat IP dan aturan firewall yang dikodekan secara permanen

Jika Anda mengodekan secara permanen alamat IP bidang kontrol di lingkungan Anda, atau jika Anda memiliki aturan firewall yang menargetkan alamat IP bidang kontrol, update alamat ke alamat IP baru. Jika Anda menyelesaikan rotasi tanpa mengupdate alamat IP di aplikasi dan di aturan firewall, resource tersebut mungkin mengalami gangguan saat GKE berhenti melayani alamat IP bidang kontrol sebelumnya.

Menyelesaikan rotasi

Setelah mengupdate klien API di luar cluster, selesaikan rotasi untuk mengonfigurasi bidang kontrol agar hanya menyajikan kredensial baru dan alamat IP baru:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --complete-credential-rotation

Jika rotasi kredensial gagal diselesaikan dan menampilkan pesan error seperti berikut, lihat Error 400: Node pool memerlukan pembuatan ulang:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

GKE mematuhi ketersediaan pemeliharaan saat menyelesaikan rotasi secara otomatis. Namun, GKE mungkin mengabaikan ketersediaan ini dalam waktu 30 hari sejak habis masa berlaku untuk mencegah cluster menjadi tidak dapat dipulihkan. Jika penyelesaian rotasi awalnya gagal, dan rotasi dimulai setidaknya tujuh hari yang lalu, GKE akan mencoba menyelesaikan rotasi hingga tanggal habis masa berlaku kredensial, setelah itu cluster tidak dapat dipulihkan. Anda dapat mencoba dan memulihkan cluster dengan mengikuti langkah-langkah di bagian Memulihkan cluster setelah masa berlaku CA berakhir.

Memulihkan cluster setelah masa berlaku CA berakhir

Setelah tanggal habis masa berlaku CA cluster, cluster mungkin menjadi tidak dapat dipulihkan. Jika Anda mencoba memulai rotasi kredensial setelah tanggal habis masa berlaku CA, GKE mungkin gagal membuat node pool baru. Pesan berikut akan muncul di log:

x509: certificate has expired or is not yet valid

Anda dapat mencoba dan memulihkan cluster secara manual dari status ini. Namun, karena cluster dengan CA yang habis masa berlakunya biasanya tidak dapat dipulihkan, upaya ini mungkin gagal dan Anda mungkin harus membuat cluster baru. Untuk mencoba dan memulihkan cluster Anda, ikuti langkah-langkah berikut:

  1. Mulai rotasi kredensial. Jika rotasi kredensial sudah berlangsung, lewati langkah ini.
  2. Selesaikan rotasi. Bidang kontrol GKE berhenti menggunakan CA sebelumnya dan hanya menggunakan CA baru.
  3. Buat node pool baru untuk mengganti node pool yang ada.

    Jika pembuatan node pool gagal dengan pesan error IP_SPACE_EXHAUSTED_WITH_DETAILS, hapus node pool yang ada sebelum Anda membuat node pool baru. Saat Anda menghapus node pool, alamat IP akan tersedia untuk digunakan oleh node pool baru.

  4. Migrasikan workload Anda ke node pool baru.

  5. Perbarui klien Kubernetes API untuk menggunakan kredensial baru dan alamat IP bidang kontrol baru.

  6. Perbarui kredensial Kubernetes ServiceAccount statis untuk menggunakan token yang ditandatangani oleh CA baru.

Jika cluster masih tidak dapat dipulihkan setelah Anda menyelesaikan langkah-langkah ini, maka buat cluster baru.

Langkah berikutnya