Mencegah pendaftaran mandiri node di cluster GKE

Secara default, node Google Kubernetes Engine (GKE) menggunakan proses kubelet di setiap node untuk mendaftarkan objek Node dengan server Kubernetes API. Dokumen ini menunjukkan cara mencegah pendaftaran mandiri ini untuk Node GKE yang Terlindungi, dan sebagai gantinya mewajibkan komponen bidang kontrol GKE tepercaya untuk melakukan operasi pendaftaran. Platform administrator dan engineer keamanan dapat menggunakan pembuatan node bidang kontrol untuk membatasi hak istimewa node.

Anda seharusnya sudah memahami konsep berikut:

Mode pembuatan node di GKE

Node GKE yang Terlindungi, yang diaktifkan di semua cluster GKE, menerapkan verifikasi kriptografis identitas node selama proses pendaftaran node. Verifikasi ini membantu memastikan bahwa hanya node yang sah yang dapat mendaftar ke server Kubernetes API dan menjalankan workload.

Alur kerja pendaftaran default untuk cluster GKE, yang mana kubelet di setiap node membuat dan mengubah objek Node di server API, menimbulkan risiko jika node disusupi. Misalnya, dalam CVE-2025-5187, kerentanan memungkinkan pengguna node menghapus objek Node yang sesuai dan mendaftarkan node yang terkompromi.

Pembuatan node bidang kontrol

Di GKE versi 1.35.3-gke.1189000 dan yang lebih baru, Anda dapat secara opsional mewajibkan komponen bidang kontrol GKE tepercaya bernama gcp-controller-manager untuk membuat objek Node, bukan mengizinkan kubelet mendaftarkan sendiri node. Setelah kubelet menyiapkan koneksi TLS dengan server API menggunakan identitas node yang diverifikasi secara kriptografi, komponen gcp-controller-manager akan membuat objek Node. Pengontrol penerimaan menolak permintaan apa pun dari kubelet untuk membuat objek Node. Dengan menggunakan komponen bidang kontrol untuk membuat objek Node, Anda dapat mengurangi risiko node yang berpotensi disusupi membuat objek Node arbitrer atau memanipulasi spesifikasi Node-nya.

Untuk mengubah perilaku pembuatan dan pendaftaran node default, Anda melakukan salah satu tindakan berikut saat membuat cluster Standard atau Autopilot:

  • Google Cloud CLI: tentukan nilai CONTROL_PLANE dalam flag --node-creation-mode.
  • Kubernetes Engine API: tentukan nilai VIA_CONTROL_PLANE di kolom node-creation-mode dalam metode NodeCreationConfig.

Batasan

Ada jeda singkat antara saat gcp-controller-manager membuat objek Node di Kubernetes API dan saat kubelet memperbarui objek Node tersebut dengan kumpulan lengkap label dan anotasi node. Setiap workload atau pengontrol yang bergantung pada kumpulan lengkap label atau anotasi segera setelah pembuatan node, mungkin menunjukkan perilaku yang tidak terduga. Label dan anotasi tertentu dapat disesuaikan pada waktu yang berbeda dengan pendaftaran kubelet. Verifikasi bahwa beban kerja dan DaemonSet Anda menggunakan pemeriksaan keberadaan label dan anotasi sebelum bertindak.

  • Hindari men-deploy DaemonSets dan beban kerja yang memiliki toleransi untuk semua taint node, yang dapat menyebabkan Pod berjalan di node yang belum siap.
  • Gunakan initContainer untuk memeriksa label node sebelum mengizinkan container utama berjalan.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin 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. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Mengaktifkan pembuatan node bidang kontrol

Anda dapat mengaktifkan pembuatan node menggunakan komponen gcp-controller-manager saat membuat cluster atau mengupdate cluster yang ada. Untuk cluster yang ada, update hanya memengaruhi node baru di cluster. Node yang ada tidak terpengaruh oleh perubahan ini.

Perintah berikut akan mengaktifkan mode pembuatan node bidang kontrol untuk cluster yang ada:

gcloud container clusters update CLUSTER_NAME \
    --node-creation-mode=CONTROL_PLANE \
    --location=CONTROL_PLANE_LOCATION \

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • CONTROL_PLANE_LOCATION: region atau zona bidang kontrol cluster Anda.

Anda juga dapat menentukan flag --node-creation-mode dalam perintah clusters create dan dalam perintah clusters create-auto.

Menonaktifkan pembuatan node bidang kontrol

Anda dapat kembali ke perilaku GKE default yang kubelet membuat node kapan saja dengan menentukan nilai KUBELET di flag --node-creation-mode Google Cloud CLI atau VIA_KUBELET di metode NodeCreationConfig GKE API. Untuk cluster yang ada, perubahan ini hanya memengaruhi node baru di cluster tersebut.

Perintah berikut mengupdate cluster untuk menonaktifkan pembuatan node bidang kontrol:

gcloud container clusters update CLUSTER_NAME \
    --node-creation-mode=KUBELET \
    --location=CONTROL_PLANE_LOCATION \

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • CONTROL_PLANE_LOCATION: region atau zona bidang kontrol cluster Anda.

Langkah berikutnya