Menyediakan bidang kontrol Cloud Service Mesh terkelola di GKE

Cloud Service Mesh adalah mesh layanan terkelola Google yang dapat Anda aktifkan dengan mudah. Google menangani keandalan, upgrade, penskalaan, dan keamanan untuk Anda.

Halaman ini menunjukkan cara menggunakan fleet API untuk menyiapkan Cloud Service Mesh terkelola menggunakan Istio API.

Prasyarat

Sebagai titik awal, panduan ini mengasumsikan bahwa Anda telah:

Persyaratan

  • Satu atau beberapa cluster dengan versi GKE yang didukung, di salah satu region yang didukung.
  • Perhatikan bahwa Cloud Service Mesh terkelola menggunakan saluran rilis GKE untuk menyeimbangkan antara stabilitas dan kecepatan upgrade. Perubahan baru pada komponen dalam cluster Cloud Service Mesh (termasuk CNI, MDPC, proxy, dan CRD Istio) akan diluncurkan terlebih dahulu ke cluster yang berlangganan saluran cepat GKE. Kemudian, versi tersebut akan dipromosikan ke saluran reguler GKE, dan akhirnya ke saluran stabil GKE, setelah menunjukkan stabilitas yang memadai.

    • Managed Cloud Service Mesh tidak mendukung perubahan saluran rilis GKE dengan aman.
    • Jika Anda mengubah saluran rilis GKE, Cloud Service Mesh akan otomatis mengupgrade/mendowngrade komponen dalam cluster (CNI, MDPC, versi proxy yang disuntikkan default, dan CRD Istio) agar sesuai dengan saluran rilis GKE saat ini.
  • Pastikan cluster Anda memiliki kapasitas yang cukup untuk komponen yang diperlukan yang diinstal Managed Cloud Service Mesh di cluster.

    • Deployment mdp-controller di namespace kube-system meminta cpu: 50m, memory: 128Mi.
    • Daemonset istio-cni-node di namespace kube-system meminta cpu: 100m, memory: 100Mi di setiap node.
  • Pastikan kebijakan organisasi constraints/compute.disableInternetNetworkEndpointGroup dinonaktifkan. Jika kebijakan diaktifkan, ServiceEntry mungkin tidak berfungsi.

  • Pastikan mesin klien yang Anda gunakan untuk menyediakan Cloud Service Mesh terkelola memiliki konektivitas jaringan ke server API.

  • Cluster Anda harus terdaftar ke fleet. Hal ini disertakan dalam petunjuk jika belum terdaftar sebelum penyediaan.

  • Project Anda harus mengaktifkan fitur fleet Service Mesh. Hal ini tercantum dalam petunjuk jika Anda belum mengaktifkannya.

  • GKE Autopilot hanya didukung dengan GKE versi 1.21.3+.

  • Cloud Service Mesh dapat menggunakan beberapa cluster GKE dalam lingkungan satu project satu jaringan atau lingkungan multi-project satu jaringan.

    • Jika Anda menggabungkan cluster yang tidak berada dalam project yang sama, cluster tersebut harus didaftarkan ke project host fleet yang sama, dan cluster harus berada dalam konfigurasi VPC bersama bersama di jaringan yang sama.
    • Untuk lingkungan multi-cluster project tunggal, project fleet dapat sama dengan project cluster. Untuk mengetahui informasi selengkapnya tentang fleet, lihat Ringkasan Fleet.
    • Untuk lingkungan multi-project, sebaiknya host fleet di project terpisah dari project cluster. Jika kebijakan organisasi dan konfigurasi yang ada mengizinkannya, sebaiknya gunakan project VPC bersama sebagai project host fleet. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan cluster dengan VPC Bersama.

Peran yang diperlukan untuk menginstal Cloud Service Mesh

Tabel berikut menjelaskan peran yang diperlukan untuk menginstal Managed Cloud Service Mesh.

Nama peran ID Peran Memberikan akses lokasi Deskripsi
GKE Hub Admin roles/gkehub.admin Project fleet Akses penuh ke GKE Hubs dan resource terkait.
Service Usage Admin roles/serviceusage.serviceUsageAdmin Project fleet Kemampuan untuk mengaktifkan, menonaktifkan, dan memeriksa status layanan, memeriksa pengoperasian, serta menggunakan kuota dan penagihan untuk project konsumen. (Catatan 1)
CA Service Admin Beta roles/privateca.admin Project fleet Akses penuh ke semua resource CA Service. (Catatan 2)

Peran yang diperlukan untuk menjalankan Cloud Service Mesh

Tabel berikut menjelaskan peran yang diperlukan oleh akun layanan untuk menjalankan Cloud Service Mesh terkelola. Jika project jaringan atau cluster Anda berbeda dari project host fleet, Anda harus memberikan akses ke peran ini di project lain kepada akun layanan di project fleet.

Nama peran ID Peran Memberikan akses lokasi Deskripsi
Anthos Service Mesh Service Agent roles/anthosservicemesh.serviceAgent Project fleet
Mesh Managed Control Plane Service Agent (lama) roles/meshcontrolplane.serviceAgent Project fleet Ini adalah peran lama yang merupakan bagian dari penginstalan Cloud Service Mesh yang lebih lama. Jika penginstalan Anda memiliki peran layanan ini, Anda dapat membiarkannya seperti apa adanya. Penginstalan baru tidak memerlukan peran ini.

Batasan

Sebaiknya tinjau daftar fitur dan batasan yang didukung Cloud Service Mesh. Khususnya, perhatikan hal berikut:

  • API IstioOperator tidak didukung karena tujuan utamanya adalah untuk mengontrol komponen dalam cluster.

  • Penggunaan Layanan Certificate Authority (Layanan CA) memerlukan konfigurasi Cloud Service Mesh per cluster, dan tidak didukung saat menggunakan konfigurasi default fleet di GKE Enterprise.

  • Untuk cluster Autopilot GKE, penyiapan lintas project hanya didukung dengan GKE 1.23 atau yang lebih baru.

  • Untuk cluster GKE Autopilot, agar dapat beradaptasi dengan batas resource GKE Autopilot, permintaan dan batas resource proxy default ditetapkan ke 500 m CPU dan 512 MB memori. Anda dapat mengganti nilai default menggunakan penyisipan kustom.

  • Untuk cluster GKE Autopilot, mungkin ada peringatan untuk komponen Cloud Service Mesh "DaemonSet has no nodes selected" hingga NodePool cluster diskalakan.

  • Selama proses penyediaan untuk bidang kontrol terkelola, CRD Istio akan disediakan di cluster yang ditentukan. Jika ada CRD Istio di cluster, CRD tersebut akan ditimpa.

  • Istio CNI dan Cloud Service Mesh tidak kompatibel dengan GKE Sandbox. Oleh karena itu, Cloud Service Mesh terkelola dengan penerapan TRAFFIC_DIRECTOR tidak mendukung cluster dengan GKE Sandbox yang diaktifkan.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Konfigurasi gcloud (meskipun Anda menggunakan Cloud Shell).
    1. Lakukan autentikasi dengan Google Cloud CLI, dengan FLEET_PROJECT_ID adalah ID project Fleet Host Anda. Secara umum, FLEET_PROJECT_ID dibuat secara default dan memiliki nama yang sama dengan project.

             gcloud auth login --project FLEET_PROJECT_ID
      

    2. Perbarui komponen:

             gcloud components update
      

  7. Aktifkan API yang diperlukan di project host fleet Anda.

      gcloud services enable mesh.googleapis.com \
          --project=FLEET_PROJECT_ID
    

  8. Mengaktifkan mesh.googleapis.com akan mengaktifkan API berikut:

    API Tujuan Dapat Dinonaktifkan
    meshconfig.googleapis.com Cloud Service Mesh menggunakan Mesh Configuration API untuk meneruskan data konfigurasi dari mesh Anda ke Google Cloud. Selain itu, dengan mengaktifkan Mesh Configuration API, Anda dapat mengakses halaman Cloud Service Mesh di konsol Google Cloud dan menggunakan otoritas sertifikat Cloud Service Mesh. Tidak
    meshca.googleapis.com Terkait dengan certificate authority Cloud Service Mesh yang digunakan oleh Cloud Service Mesh terkelola. Tidak
    container.googleapis.com Diperlukan untuk membuat cluster Google Kubernetes Engine (GKE). Tidak
    gkehub.googleapis.com Diperlukan untuk mengelola mesh sebagai kumpulan perangkat. Tidak
    monitoring.googleapis.com Diperlukan untuk merekam telemetri untuk beban kerja mesh. Tidak
    stackdriver.googleapis.com Diperlukan untuk menggunakan UI Layanan. Tidak
    opsconfigmonitoring.googleapis.com Diperlukan untuk menggunakan UI Layanan untuk clusterGoogle Cloud yang tidak terdaftar. Tidak
    connectgateway.googleapis.com Diperlukan agar bidang kontrol Cloud Service Mesh terkelola dapat mengakses workload mesh. Ya*
    trafficdirector.googleapis.com Mengaktifkan bidang kontrol terkelola yang sangat tersedia dan skalabel. Ya*
    networkservices.googleapis.com Mengaktifkan bidang kontrol terkelola yang sangat tersedia dan skalabel. Ya*
    networksecurity.googleapis.com Mengaktifkan bidang kontrol terkelola yang sangat tersedia dan skalabel. Ya*

    Mengonfigurasi Cloud Service Mesh terkelola

    Langkah-langkah yang diperlukan untuk menyediakan Managed Cloud Service Mesh menggunakan Fleet API bergantung pada apakah Anda lebih memilih untuk mengaktifkannya secara default untuk cluster fleet baru atau mengaktifkannya per cluster.

    Mengonfigurasi untuk fleet Anda

    Anda harus mengaktifkan edisi Google Kubernetes Engine (GKE) Enterprise untuk mengaktifkan Cloud Service Mesh terkelola sebagai konfigurasi default untuk fleet Anda. Artinya, setiap cluster GKE di Google Cloud baru yang didaftarkan selama pembuatan cluster akan mengaktifkan Cloud Service Mesh terkelola di cluster. Anda dapat mengetahui lebih lanjut konfigurasi default fleet di Mengelola fitur tingkat fleet.

    Mengaktifkan Cloud Service Mesh terkelola sebagai konfigurasi default untuk fleet Anda dan mendaftarkan cluster ke fleet selama pembuatan cluster hanya mendukung Mesh CA. Jika Anda ingin menggunakan Certificate Authority Service, sebaiknya aktifkan per cluster.

    Untuk mengaktifkan setelan default tingkat armada untuk Cloud Service Mesh terkelola, selesaikan langkah-langkah berikut:

    Konsol

    1. Di konsol Google Cloud , buka halaman Feature Manager.

      Buka Pengelola Fitur

    2. Di panel Service Mesh, klik Configure.

    3. Tinjau setelan yang diwarisi oleh semua cluster baru yang Anda buat di konsol Google Cloud dan daftarkan ke fleet.

    4. Untuk menerapkan setelan ini, klik Konfigurasi.

    5. Pada dialog konfirmasi, klik Confirm.

    6. Opsional: Sinkronkan cluster yang ada ke setelan default:

      1. Di daftar Clusters in the fleet, pilih cluster yang ingin Anda sinkronkan. Anda hanya dapat memilih cluster yang telah menginstal Cloud Service Mesh.
      2. Klik Sinkronkan ke setelan armada, lalu klik Konfirmasi di dialog konfirmasi yang muncul. Operasi ini dapat memerlukan waktu beberapa menit hingga selesai.

    gcloud

    Untuk mengonfigurasi setelan default tingkat armada menggunakan Google Cloud CLI, Anda harus menetapkan setelan berikut:

    • Setelan tingkat armada

      • Buat file mesh.yaml yang hanya berisi satu baris management: automatic:

        echo "management: automatic" > mesh.yaml
        
      • Aktifkan Cloud Service Mesh untuk fleet Anda:

        gcloud container fleet mesh enable --project FLEET_PROJECT_ID \
            --fleet-default-member-config mesh.yaml
        

        Jika Anda melihat error berikut, Anda harus mengaktifkan GKE Enterprise.

        ERROR: (gcloud.container.fleet.mesh.enable) FAILED_PRECONDITION: The
        [anthos.googleapis.com] service is required for this operation and is not
        enabled for the project [PROJECT_NUMBER]. Please use the Google Developers
        Console to enable it.: failed precondition
        
    • Setelan tingkat jaringan

      • Jika project jaringan Anda berbeda dengan project host fleet (misalnya, Anda menggunakan VPC bersama), Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project jaringan. Anda hanya perlu melakukannya sekali untuk project jaringan.

        Memberi akun layanan di project fleet izin untuk mengakses project jaringan:

        gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID"  \
            --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
            --role roles/anthosservicemesh.serviceAgent
        
    • Setelan tingkat cluster

      • Saat Anda siap membuat cluster untuk digunakan dengan Cloud Service Mesh, buat dan daftarkan cluster tersebut dalam satu langkah dengan Google Cloud CLI untuk menggunakan konfigurasi default. Contoh:

        gcloud container clusters create-auto CLUSTER_NAME \
            --fleet-project FLEET_PROJECT_ID \
            --location=LOCATION
        

        Anda bisa mendapatkan nomor project untuk project armada dengan menjalankan perintah berikut:

        gcloud projects list --filter="FLEET_PROJECT_ID" --format="value(PROJECT_ID)"
        

        Flag --location adalah zona atau region komputasi (seperti us-central1-a atau us-central1) untuk cluster.

      • Jika project cluster Anda berbeda dengan project host fleet, Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project cluster, dan mengaktifkan API yang diperlukan di project cluster. Anda hanya perlu melakukannya sekali untuk setiap project cluster.

        Memberi akun layanan di project fleet izin untuk mengakses project cluster:

        gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID"  \
            --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
            --role roles/anthosservicemesh.serviceAgent
        

        Aktifkan Mesh API di project cluster:

        gcloud services enable mesh.googleapis.com \
          --project=CLUSTER_PROJECT_ID
        

        Ganti CLUSTER_PROJECT_ID dengan ID unik project cluster Anda. Jika Anda membuat cluster di project yang sama dengan fleet, CLUSTER_PROJECT_ID akan sama dengan FLEET_PROJECT_ID.

    Lanjutkan ke Verifikasi bahwa bidang kontrol telah disediakan.

    Mengonfigurasi per cluster

    Gunakan langkah-langkah berikut untuk mengonfigurasi Cloud Service Mesh terkelola untuk setiap cluster di mesh Anda secara terpisah.

    Mengaktifkan fitur fleet Cloud Service Mesh

    Aktifkan fitur mesh di project fleet. Perhatikan bahwa jika Anda berencana untuk mendaftarkan beberapa cluster, pengaktifan fitur fleet Cloud Service Mesh dilakukan di tingkat fleet sehingga Anda hanya perlu menjalankan perintah ini satu kali.

    gcloud container fleet mesh enable --project FLEET_PROJECT_ID
    

    Mendaftarkan cluster ke fleet

    1. Daftarkan cluster GKE menggunakan workload identity fleet. Flag --location adalah zona atau region komputasi (seperti us-central1-a atau us-central1) untuk cluster.

      gcloud container clusters update CLUSTER_NAME \
        --location CLUSTER_LOCATION \
        --fleet-project FLEET_PROJECT_ID
      
    2. Verifikasi bahwa cluster Anda terdaftar:

      gcloud container fleet memberships list --project FLEET_PROJECT_ID
      

      Contoh output:

      NAME                 EXTERNAL_ID                           LOCATION
      cluster-1            1d8e255d-2b55-4df9-8793-0435461a2cbc  us-central1
      

      Catat MEMBERSHIP_NAME, karena Anda akan memerlukannya saat mengaktifkan pengelolaan otomatis.

    3. Jika project jaringan cluster Anda berbeda dengan project host fleet (misalnya, Anda menggunakan VPC bersama), Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project jaringan. Anda hanya perlu melakukannya sekali untuk project jaringan.

      Memberi akun layanan di project fleet izin untuk mengakses project jaringan:

       gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID"  \
            --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
            --role roles/anthosservicemesh.serviceAgent
      
    4. Jika project cluster Anda berbeda dengan project host fleet, Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses project cluster, dan mengaktifkan API yang diperlukan di project cluster.

      Anda hanya perlu melakukannya sekali untuk setiap project cluster. Jika sebelumnya Anda telah mengonfigurasi Cloud Service Mesh terkelola untuk kombinasi project cluster dan fleet ini, perubahan ini telah diterapkan dan Anda tidak perlu menjalankan perintah berikut.

      Memberi akun layanan di project fleet izin untuk mengakses project cluster:

       gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \
           --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
           --role roles/anthosservicemesh.serviceAgent
      

      Aktifkan Mesh API di project cluster:

       gcloud services enable mesh.googleapis.com \
           --project=CLUSTER_PROJECT_ID
      

    Mengonfigurasi Certificate Authority Service (Opsional)

    Jika deployment service mesh Anda memerlukan Certificate Authority Service (CA Service), ikuti Mengonfigurasi Certificate Authority Service untuk Cloud Service Mesh terkelola untuk mengaktifkannya bagi armada Anda. Pastikan untuk menyelesaikan semua langkah sebelum melanjutkan ke bagian berikutnya.

    Mengaktifkan pengelolaan otomatis

    Jalankan perintah berikut untuk mengaktifkan pengelolaan otomatis:

      gcloud container fleet mesh update \
         --management automatic \
         --memberships MEMBERSHIP_NAME \
         --project FLEET_PROJECT_ID \
         --location MEMBERSHIP_LOCATION
    

    dengan:

    • MEMBERSHIP_NAME adalah nama keanggotaan yang tercantum saat Anda memverifikasi bahwa cluster Anda terdaftar ke fleet.
    • MEMBERSHIP_LOCATION adalah lokasi langganan Anda (baik wilayah, atau global).

      Jika Anda baru saja membuat keanggotaan menggunakan perintah dalam panduan ini, ini harus menjadi region cluster Anda. Jika Anda memiliki cluster zona, gunakan region yang sesuai dengan zona cluster. Misalnya, jika Anda memiliki cluster zonal di us-central1-c, gunakan nilai us-central1.

      Nilai ini dapat berupa global jika Anda mendaftar sebelum Mei 2023, atau jika Anda menentukan lokasi global saat mendaftarkan langganan. Anda dapat memeriksa lokasi keanggotaan Anda dengan gcloud container fleet memberships list --project FLEET_PROJECT_ID.

    Dukungan Terraform

    Cloud Service Mesh mendukung penyediaan melalui Terraform melalui modul keanggotaan fitur GKEHub.

    Lihat tutorial penyediaan mesh layanan terkelola untuk mengetahui petunjuk mendetail.

    Pastikan bidang kontrol telah disediakan

    Setelah beberapa menit, verifikasi bahwa status bidang kontrol adalah ACTIVE:

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    Outputnya mirip dengan:

    ...
    membershipSpecs:
      projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
        mesh:
          management: MANAGEMENT_AUTOMATIC
    membershipStates:
      projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
            implementation: ISTIOD | TRAFFIC_DIRECTOR
          dataPlaneManagement:
            details:
            - code: OK
              details: Service is running.
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
    ...
    

    Catat bidang kontrol yang ditampilkan di kolom implementation, baik ISTIOD maupun TRAFFIC_DIRECTOR. Lihat Fitur yang didukung Cloud Service Mesh untuk mengetahui perbedaan bidang kontrol dan konfigurasi yang didukung, serta cara pemilihan penerapan bidang kontrol.

    Konfigurasi kubectl untuk mengarah ke cluster

    Bagian berikut melibatkan menjalankan perintah kubectl terhadap setiap cluster Anda. Sebelum melanjutkan ke bagian berikut, jalankan perintah berikut untuk setiap cluster Anda guna mengonfigurasi kubectl agar mengarah ke cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
          --location CLUSTER_LOCATION \
          --project CLUSTER_PROJECT_ID
    

    Perhatikan bahwa gateway ingress tidak otomatis di-deploy dengan bidang kontrol. Dengan memisahkan deployment gateway ingress dan bidang kontrol, Anda dapat mengelola gateway di lingkungan produksi. Jika Anda ingin menggunakan gateway masuk Istio atau gateway keluar, lihat Men-deploy gateway. Jika Anda ingin menggunakan Kubernetes Gateway API, lihat Menyiapkan Gateway untuk Mesh. Untuk mengaktifkan fitur opsional lainnya, lihat Mengaktifkan fitur opsional di Cloud Service Mesh.

    Bidang data terkelola

    Jika Anda menggunakan Cloud Service Mesh terkelola, Google akan mengelola sepenuhnya upgrade proxy Anda.

    Dengan fitur bidang data terkelola yang diaktifkan, proxy sidecar dan gateway yang disuntikkan akan diperbarui secara aktif dan otomatis bersama dengan bidang kontrol terkelola dengan memulai ulang beban kerja untuk menyuntikkan kembali proxy versi baru. Proses ini dimulai setelah bidang kontrol diupgrade dan biasanya selesai dalam waktu 2 minggu setelah dimulai.

    Perhatikan bahwa data plane terkelola mengandalkan saluran rilis GKE. Jika Anda mengubah saluran rilis GKE saat bidang data terkelola diaktifkan, Cloud Service Mesh terkelola akan memperbarui proxy semua workload yang ada seperti peluncuran bidang data terkelola.

    Jika dinonaktifkan, pengelolaan proxy dilakukan secara pasif - didorong oleh siklus proses alami pod dalam cluster dan harus dipicu secara manual oleh pengguna untuk mengontrol kecepatan update.

    Managed data plane mengupgrade proxy dengan mengeluarkan pod yang menjalankan proxy versi sebelumnya. Pengusiran dilakukan secara bertahap, dengan mematuhi anggaran gangguan pod dan mengontrol laju perubahan.

    Bidang data terkelola tidak mengelola hal berikut:

    • Pod yang tidak disuntikkan
    • Pod yang disuntikkan secara manual
    • Pekerjaan
    • StatefulSet
    • DaemonSet

    Nonaktifkan bidang data terkelola (opsional)

    Jika Anda menyediakan Cloud Service Mesh terkelola di cluster baru, Anda dapat menonaktifkan bidang data terkelola sepenuhnya, atau untuk namespace atau pod tertentu. Managed data plane akan terus dinonaktifkan untuk cluster yang ada jika dinonaktifkan secara default atau manual.

    Untuk menonaktifkan bidang data terkelola di tingkat cluster dan kembali ke mengelola sendiri proxy sidecar, ubah anotasi:

    kubectl annotate --overwrite controlplanerevision -n istio-system \
      mesh.cloud.google.com/proxy='{"managed":"false"}'
    

    Untuk menonaktifkan bidang data terkelola untuk namespace:

    kubectl annotate --overwrite namespace NAMESPACE \
      mesh.cloud.google.com/proxy='{"managed":"false"}'
    

    Untuk menonaktifkan bidang data terkelola untuk pod:

    kubectl annotate --overwrite pod POD_NAME \
      mesh.cloud.google.com/proxy='{"managed":"false"}'
    

    Mengaktifkan masa pemeliharaan untuk bidang data terkelola

    Jika Anda telah mengonfigurasi masa pemeliharaan GKE, upgrade aktif akan dimulai pada awal masa pemeliharaan berikutnya yang tersedia dan berlanjut tanpa jeda hingga semua pod terkelola telah diupdate (biasanya 12 jam). Masa pemeliharaan tidak diamati untuk peluncuran terkait CVE.

    Cloud Service Mesh menggunakan periode pemeliharaan GKE untuk diselaraskan dengan GKE.

    Mengaktifkan notifikasi pemeliharaan untuk bidang data terkelola

    Anda dapat meminta untuk diberi tahu tentang pemeliharaan managed data plane mendatang hingga satu minggu sebelum pemeliharaan dijadwalkan. Notifikasi pemeliharaan tidak dikirim secara default. Anda juga harus Mengonfigurasi masa pemeliharaan GKE sebelum dapat menerima notifikasi. Jika diaktifkan, notifikasi akan dikirim setidaknya dua hari sebelum operasi upgrade.

    Untuk mengaktifkan notifikasi pemeliharaan bidang data terkelola:

    1. Buka halaman Komunikasi.

      Buka halaman Komunikasi

    2. Di baris Upgrade Cloud Service Mesh, di kolom Email, pilih tombol pilihan untuk mengAKTIFkan notifikasi pemeliharaan.

    Setiap pengguna yang ingin menerima notifikasi harus mengaktifkannya secara terpisah. Jika Anda ingin menyetel filter email untuk notifikasi ini, baris subjeknya adalah:

    Upcoming upgrade for your Cloud Service Mesh cluster "CLUSTER_LOCATION/CLUSTER_NAME".

    Contoh berikut menunjukkan notifikasi pemeliharaan bidang data terkelola yang umum:

    Subject Line: Upgrade mendatang untuk cluster Cloud Service Mesh "<location/cluster-name>" Anda

    Pengguna Cloud Service Mesh yang terhormat,

    Komponen Cloud Service Mesh di cluster ${instance_id} (https://console.cloud.google.com/kubernetes/clusters/details/${instance_id}/details?project=${project_id}) Anda dijadwalkan untuk diupgrade pada ${scheduled_date_human_readable} pukul ${scheduled_time_human_readable}.

    Anda dapat memeriksa catatan rilis (https://cloud.google.com/service-mesh/docs/release-notes) untuk mempelajari update baru ini.

    Jika pemeliharaan ini dibatalkan, Anda akan menerima pemberitahuan baru melalui email.

    Hormat kami,

    Tim Cloud Service Mesh

    (c) 2023 Google LLC 1600 Amphitheater Parkway, Mountain View, CA 94043 Kami mengirim pengumuman ini untuk menginformasikan perubahan penting pada Google Cloud Platform atau akun Anda. Anda dapat memilih untuk tidak menerima notifikasi masa pemeliharaan dengan mengedit preferensi pengguna: https://console.cloud.google.com/user-preferences/communication?project=${project_id}

    Mengonfigurasi penemuan endpoint (hanya untuk penginstalan multi-cluster)

    Jika mesh Anda hanya memiliki satu cluster, lewati langkah-langkah multi-cluster ini dan lanjutkan ke Deploy aplikasi atau Migrasikan aplikasi.

    Sebelum melanjutkan, pastikan Cloud Service Mesh dikonfigurasi di setiap cluster.

    Mengaktifkan Cloud Service Mesh dengan Fleet API akan mengaktifkan penemuan endpoint untuk cluster ini. Namun, Anda harus membuka port firewall. Untuk menonaktifkan penemuan endpoint untuk satu atau beberapa cluster, lihat petunjuk untuk menonaktifkannya di Penemuan endpoint antar-cluster dengan API deklaratif.

    Untuk contoh aplikasi dengan dua cluster, lihat Contoh layanan HelloWorld.

    Men-deploy aplikasi

    Jika Anda memiliki lebih dari satu cluster di fleet yang menggunakan Cloud Service Mesh terkelola, pastikan penemuan endpoint atau port firewall dikonfigurasi sesuai keinginan sebelum melanjutkan dan men-deploy aplikasi.

    Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.

    Terkelola (TD)

    1. Terapkan label injeksi default ke namespace:
    kubectl label namespace NAMESPACE \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Dikelola (Istiod)

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      kubectl label namespace NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Jika Anda adalah pengguna lama dengan Managed Istiod control plane: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:

    1. Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:

      kubectl -n istio-system get controlplanerevision
      

      Outputnya mirip dengan hal berikut ini:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.

      Dalam output, nilai di kolom NAME adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.

    2. Terapkan label revisi ke namespace:

      kubectl label namespace NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    Validasi bahwa label namespace diterapkan dengan benar menggunakan perintah berikut.

      kubectl get namespace -L istio-injection
    

    Contoh output:

      NAME                 STATUS   AGE     ISTIO-INJECTION
      default              Active   5m9s    enabled
    

    Pada tahap ini, Anda telah berhasil mengonfigurasi Cloud Service Mesh terkelola. Jika Anda memiliki workload yang ada di namespace berlabel, mulai ulang workload tersebut agar proxy disuntikkan.

    Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasi konfigurasi Kubernetes dan bidang kontrol di semua cluster, kecuali jika Anda berencana membatasi konfigurasi tertentu tersebut ke subset cluster. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber tepercaya untuk cluster tersebut.

    Menyesuaikan penyisipan (opsional)

    Anda dapat mengganti nilai default dan menyesuaikan setelan injeksi, tetapi hal ini dapat menyebabkan error konfigurasi yang tidak terduga dan masalah yang dihasilkan dengan penampung sidecar. Sebelum menyesuaikan penyisipan, baca informasi setelah contoh untuk mengetahui catatan tentang setelan dan rekomendasi tertentu.

    Konfigurasi per-pod tersedia untuk mengganti opsi ini di setiap pod. Hal ini dilakukan dengan menambahkan penampung istio-proxy ke pod Anda. Penyisipan sidecar akan memperlakukan konfigurasi apa pun yang ditentukan di sini sebagai penggantian pada template penyisipan default.

    Misalnya, konfigurasi berikut menyesuaikan berbagai setelan, termasuk menurunkan permintaan CPU, menambahkan pemasangan volume, dan menambahkan hook preStop:

    apiVersion: v1
    kind: Pod
    metadata:
      name: example
    spec:
      containers:
      - name: hello
        image: alpine
      - name: istio-proxy
        image: auto
        resources:
          requests:
            cpu: "200m"
            memory: "256Mi"
          limits:
            cpu: "200m"
            memory: "256Mi"
        volumeMounts:
        - mountPath: /etc/certs
          name: certs
        lifecycle:
          preStop:
            exec:
              command: ["sleep", "10"]
      volumes:
      - name: certs
        secret:
          secretName: istio-certs
    

    Secara umum, kolom apa pun dalam pod dapat ditetapkan. Namun, Anda harus berhati-hati saat mengisi kolom tertentu:

    • Kubernetes mengharuskan kolom image ditetapkan sebelum injeksi dijalankan. Meskipun Anda dapat menetapkan gambar tertentu untuk menggantikan gambar default, sebaiknya tetapkan image ke auto, yang akan menyebabkan injektor sidecar memilih gambar yang akan digunakan secara otomatis.
    • Beberapa kolom di containers bergantung pada setelan terkait. Misalnya, harus kurang dari atau sama dengan batas CPU. Jika kedua kolom tidak dikonfigurasi dengan benar, pod mungkin gagal dimulai.
    • Kubernetes dapat Anda gunakan untuk menetapkan requests dan limits untuk resource di Pod spec. GKE Autopilot hanya mempertimbangkan requests. Untuk mengetahui informasi selengkapnya, lihat Menetapkan batas resource di Autopilot.

    Selain itu, kolom tertentu dapat dikonfigurasi dengan anotasi di Pod, meskipun sebaiknya gunakan pendekatan di atas untuk menyesuaikan setelan. Berikan perhatian tambahan untuk anotasi berikut:

    • Untuk GKE Standard, jika sidecar.istio.io/proxyCPU ditetapkan, pastikan untuk menetapkan sidecar.istio.io/proxyCPULimit secara eksplisit. Jika tidak, batas CPU sidecar akan ditetapkan sebagai tidak terbatas.
    • Untuk GKE Standard, jika sidecar.istio.io/proxyMemory ditetapkan, pastikan untuk menetapkan sidecar.istio.io/proxyMemoryLimit secara eksplisit. Jika tidak, batas memori sidecar akan ditetapkan tanpa batas.
    • Untuk GKE Autopilot, mengonfigurasi resource requests dan limits menggunakan anotasi dapat menyebabkan penyediaan resource yang berlebihan. Gunakan pendekatan template gambar untuk menghindari hal ini. Lihat Contoh modifikasi resource di Autopilot.

    Misalnya, lihat anotasi sumber di bawah ini:

    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/proxyCPU: "200m"
            sidecar.istio.io/proxyCPULimit: "200m"
            sidecar.istio.io/proxyMemory: "256Mi"
            sidecar.istio.io/proxyMemoryLimit: "256Mi"
    

    Memigrasikan aplikasi ke Cloud Service Mesh terkelola

    Untuk memigrasikan aplikasi dari Cloud Service Mesh dalam cluster ke Cloud Service Mesh terkelola, lakukan langkah-langkah berikut:

    1. Mengganti label namespace saat ini. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.

    Terkelola (TD)

    1. Terapkan label injeksi default ke namespace:
    kubectl label namespace NAMESPACE \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Dikelola (Istiod)

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      kubectl label namespace NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Jika Anda adalah pengguna lama dengan Managed Istiod control plane: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:

    1. Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:

      kubectl -n istio-system get controlplanerevision
      

      Outputnya mirip dengan hal berikut ini:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.

      Dalam output, nilai di kolom NAME adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.

    2. Terapkan label revisi ke namespace:

      kubectl label namespace NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      
    1. Lakukan upgrade berkelanjutan pada deployment di namespace:

      kubectl rollout restart deployment -n NAMESPACE
      
    2. Uji aplikasi Anda untuk memverifikasi bahwa workload berfungsi dengan benar.

    3. Jika Anda memiliki workload di namespace lain, ulangi langkah-langkah sebelumnya untuk setiap namespace.

    4. Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasi konfigurasi Kubernetes dan Istio di semua cluster, kecuali jika Anda ingin membatasi konfigurasi tersebut hanya pada sebagian cluster. Konfigurasi yang diterapkan ke cluster tertentu adalah sumber tepercaya untuk cluster tersebut.

    Jika Anda yakin bahwa aplikasi Anda berfungsi seperti yang diharapkan, Anda dapat menghapus istiod dalam cluster setelah mengalihkan semua namespace ke bidang kontrol terkelola, atau menyimpannya sebagai cadangan - istiod akan otomatis di-downscale untuk menggunakan lebih sedikit resource. Untuk menghapus, lanjutkan ke Hapus bidang kontrol lama.

    Jika mengalami masalah, Anda dapat mengidentifikasi dan menyelesaikannya menggunakan informasi dalam Menyelesaikan masalah panel kontrol terkelola dan jika perlu, melakukan roll back ke versi sebelumnya.

    Hapus panel kontrol lama

    Setelah menginstal dan mengonfirmasi bahwa semua namespace menggunakan bidang kontrol yang dikelola Google, Anda dapat menghapus bidang kontrol lama.

    kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
    

    Jika Anda menggunakan istioctl kube-inject, bukan injeksi otomatis, atau jika Anda menginstal gateway tambahan, periksa metrik untuk bidang kontrol, dan verifikasi bahwa jumlah endpoint yang terhubung adalah nol.

    Kembalikan

    Lakukan langkah-langkah berikut jika Anda perlu melakukan roll back ke versi panel kontrol sebelumnya:

    1. Perbarui workload yang akan disisipkan dengan versi bidang kontrol sebelumnya. Dalam perintah berikut, nilai revisi asm-191-1 hanya digunakan sebagai contoh. Ganti nilai contoh dengan label revisi bidang kontrol sebelumnya.

      kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
      
    2. Mulai ulang Pod untuk memicu penyuntikan ulang sehingga proxy memiliki versi sebelumnya:

      kubectl rollout restart deployment -n NAMESPACE
      

    Bidang kontrol terkelola akan otomatis diskalakan ke nol dan tidak menggunakan resource apa pun saat tidak digunakan. Webhook dan penyediaan yang mengubah akan tetap ada dan tidak memengaruhi perilaku cluster.

    Gateway kini disetel ke revisi asm-managed. Untuk melakukan roll back, jalankan kembali perintah penginstalan Cloud Service Mesh, yang akan men-deploy ulang gateway yang mengarah kembali ke bidang kontrol dalam cluster Anda:

    kubectl -n istio-system rollout undo deploy istio-ingressgateway
    

    Output ini akan muncul jika berhasil:

    deployment.apps/istio-ingressgateway rolled back
    

    Meng-uninstal Cloud Service Mesh

    Bidang kontrol terkelola akan melakukan penskalaan otomatis ke nol saat tidak ada namespace yang menggunakannya. Untuk langkah-langkah mendetail, lihat Menghapus instalasi Cloud Service Mesh.