Merotasi IP bidang kontrol


Halaman ini menjelaskan cara melakukan rotasi IP untuk bidang kontrol di cluster Google Kubernetes Engine (GKE) yang menjalankan versi 1.16.10-gke.8 dan yang lebih baru.

Ringkasan

Anda dapat melakukan rotasi IP untuk mengubah alamat IP yang digunakan bidang kontrol Anda untuk melayani permintaan dari Kubernetes API. Alamat IP bidang kontrol bersifat statis dan tidak berubah kecuali Anda melakukan rotasi IP.

Rotasi IP mengubah sertifikat SSL dan cluster certificate authority (CA), yang membatasi kemampuan untuk menghubungkan alamat sebelumnya dengan alamat baru.

Rotasi IP juga terjadi sebagai bagian dari rotasi kredensial.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Melakukan rotasi IP

Rotasi IP adalah proses multilangkah:

  1. Saat memulai rotasi IP, bidang kontrol mulai melayani di alamat IP baru sekaligus di alamat IP lama.
  2. GKE membuat ulang node pool Anda untuk menggunakan alamat IP baru.
  3. Setelah memulai rotasi, Anda harus memperbarui klien API cluster (seperti mesin pengembangan yang menggunakan antarmuka command line kubectl) agar mulai berkomunikasi dengan bidang kontrol melalui alamat IP yang baru.
  4. Saat Anda menyelesaikan rotasi, bidang kontrol akan berhenti melayani traffic melalui alamat IP sebelumnya.

Memulai rotasi

  1. Untuk memulai rotasi IP, jalankan perintah berikut:

    gcloud container clusters update CLUSTER_NAME \
        --start-ip-rotation
    

    Ganti CLUSTER_NAME dengan nama cluster.

    Outputnya mirip dengan hal berikut ini:

    This will start an IP Rotation on cluster CLUSTER_NAME.
    The master will be updated to serve on a new IP address in addition to
    the current IP address. Google Kubernetes Engine will then schedule recreation of all nodes
    to point to the new IP address.  If maintenance window is
    used, nodes are not recreated until a maintenance window occurs. See
    documentation on how to manually update nodes. This operation is
    long-running and will block other operations on the cluster (including
    delete) until it has run to completion.
    Do you want to continue (Y/n)?
    

    Perintah ini mengonfigurasi bidang kontrol untuk melayani dua alamat IP: alamat asli dan alamat baru.

  2. Konfirmasi rotasi dan biarkan shell terbuka agar operasi selesai.

Membuat ulang node

Setelah mengonfigurasi ulang server API untuk melayani alamat IP baru, GKE secara otomatis memperbarui node Anda agar dapat menggunakan alamat IP baru. GKE mengupgrade semua node ke versi node terdekat yang didukung, yang akan membuat ulang node. Untuk mengetahui informasi selengkapnya, lihat Upgrade node pool.

Secara default, GKE otomatis menyelesaikan rotasi alamat IP tujuh hari setelah Anda memulai operasi. Jika masa atau pengecualian pemeliharaan aktif di cluster Anda mencegah GKE membuat ulang beberapa node selama periode tujuh hari ini, rotasi alamat IP akan gagal selesai.

  • Jika Anda menggunakan pengecualian pemeliharaan atau masa pemeliharaan yang dapat mengakibatkan rotasi gagal, upgrade cluster Anda secara manual untuk memaksa pembuatan ulang node:

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

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

    Untuk informasi selengkapnya, lihat peringatan untuk masa pemeliharaan.

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 IP, Anda harus memperbarui semua klien API di luar cluster (seperti kubectl pada mesin developer) agar mengarah ke alamat IP baru.

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

gcloud container clusters get-credentials CLUSTER_NAME

Memperbarui alamat IP dan aturan firewall hardcode

Jika Anda melakukan hardcode pada alamat IP bidang kontrol di lingkungan, atau jika memiliki aturan firewall yang menargetkan alamat IP bidang kontrol, perbarui alamat tersebut ke alamat IP baru. Jika Anda menyelesaikan rotasi tanpa memperbarui alamat IP di aplikasi dan di aturan firewall, resource tersebut mungkin akan mengalami gangguan saat GKE berhenti melakukan penayangan di alamat IP bidang kontrol sebelumnya.

Menyelesaikan rotasi

Setelah memperbarui klien API di luar cluster, selesaikan rotasi untuk mengonfigurasi bidang kontrol agar hanya melayani alamat IP baru.

Untuk menyelesaikan rotasi, jalankan perintah berikut:

gcloud container clusters update CLUSTER_NAME \
    --complete-ip-rotation

Outputnya mirip dengan hal berikut ini:

This will complete the in-progress IP Rotation on cluster CLUSTER_NAME.
The master will be updated to stop serving on the old IP address and only
serve on the new IP address. Make sure all API clients have been updated
to communicate with the new IP address (e.g. by running `gcloud container
clusters get-credentials --project PROJECT_ID --region COMPUTE_REGION
CLUSTER_NAME`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.

Jika rotasi alamat IP gagal selesai dan menampilkan pesan error yang mirip dengan yang berikut, lihat pemecahan masalah:

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

Langkah selanjutnya