Menyediakan bidang kontrol Cloud Service Mesh terkelola di GKE

Cloud Service Mesh adalah mesh layanan yang dikelola Google yang cukup Anda aktifkan. Google menangani keandalan, peningkatan, penskalaan, dan keamanan untuk Anda.

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

Prasyarat

Sebagai titik awal, panduan ini mengasumsikan bahwa Anda telah:

Persyaratan

  • Satu atau beberapa klaster dengan versi GKE yang didukung, di salah satu region yang didukung.
  • Pastikan bahwa cluster Anda memiliki kapasitas yang cukup untuk komponen yang diperlukan yang penginstalan Cloud Service Mesh terkelola di cluster.
    • Deployment mdp-controller di CPU permintaan namespace kube-system: 50m, memori: 128Mi.
    • Daemonset istio-cni-node dalam namespace kube-system meminta cpu: 100m, memori: 100Mi di setiap node.
  • Pastikan kebijakan organisasi constraints/compute.disableInternetNetworkEndpointGroup dinonaktifkan. Jika kebijakan ini disetel ke aktif, ServiceEntry mungkin tidak berfungsi.
  • Pastikan komputer klien tempat Anda menyediakan Cloud Service Mesh terkelola konektivitas jaringan ke server API.
  • Cluster Anda harus terdaftar ke fleet. Hal ini disertakan dalam petunjuk, atau dapat dilakukan secara terpisah sebelum penyediaan resource.
  • Project Anda harus mengaktifkan fitur fleet Service Mesh. Ini adalah disertakan dalam petunjuk atau dapat dilakukan secara terpisah.
  • Autopilot GKE hanya didukung pada versi GKE 1.21.3+.

  • Cloud Service Mesh dapat menggunakan beberapa cluster GKE lingkungan jaringan tunggal project-tunggal atau lingkungan jaringan tunggal multi-project lingkungan fleksibel App Engine.

    • Jika Anda bergabung dengan cluster yang tidak berada dalam project yang sama, cluster tersebut harus terdaftar di project host perangkat, dan cluster harus berada di VPC bersama konfigurasi bersama di jaringan yang sama.
    • Untuk lingkungan multi-cluster project tunggal, project fleet dapat berupa sama dengan project cluster. Untuk informasi selengkapnya tentang armada, lihat Ringkasan Armada.
    • Untuk lingkungan multi-project, sebaiknya Anda menghosting fleet dalam project terpisah dari project cluster. Jika organisasi Anda konfigurasi yang ada dan kebijakan yang ada mengizinkannya, sebaiknya Anda menggunakan project VPC bersama sebagai project host fleet. Untuk informasi selengkapnya, lihat Menyiapkan cluster dengan VPC Bersama.

Peran yang diperlukan untuk menginstal Cloud Service Mesh

Tabel berikut menjelaskan peran yang diperlukan untuk menginstal aplikasi terkelola dan Cloud Service Mesh.

Nama peran ID Peran Berikan 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 operasional, dan menghabiskan kuota dan penagihan untuk project konsumen. (Catatan 1)
Admin Layanan CA Beta roles/privateca.admin Project fleet Akses penuh ke semua resource CA Service. (Catatan 2)

Batasan

Sebaiknya Anda meninjau daftar Fitur dan batasan yang didukung Cloud Service Mesh. Secara khusus, perhatikan hal-hal berikut:

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

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

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

  • Untuk cluster Autopilot GKE, agar dapat beradaptasi dengan Batas resource Autopilot GKE, batas dan permintaan resource proxy default diatur ke 500 m CPU dan 512 Mb memori. Anda dapat mengganti nilai {i>default<i} menggunakan injeksi kustom.

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

  • CNI Istio dan Cloud Service Mesh tidak kompatibel dengan GKE Sandbox. Oleh karena itu, Cloud Service Mesh terkelola dengan implementasi TRAFFIC_DIRECTOR melakukan tidak mendukung cluster dengan GKE Sandbox aktif.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

             gcloud auth login --project FLEET_PROJECT_ID
      

    2. Update komponen:

             gcloud components update
      

  7. Aktifkan API yang diperlukan pada 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 Bisa Dinonaktifkan
    meshconfig.googleapis.com Cloud Service Mesh menggunakan Mesh Configuration API untuk merelai data konfigurasi dari mesh Anda ke Google Cloud. Selain itu, mengaktifkan Mesh Configuration API memungkinkan Anda mengakses halaman Mesh Layanan Cloud di Konsol Google Cloud dan untuk menggunakan Certificate authority 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 fleet. Tidak
    monitoring.googleapis.com Diperlukan untuk mengambil telemetri untuk workload mesh. Tidak
    stackdriver.googleapis.com Diperlukan untuk menggunakan UI Services. Tidak
    opsconfigmonitoring.googleapis.com Diperlukan untuk menggunakan UI Layanan di luar Google Cloud klaster. Tidak
    connectgateway.googleapis.com Diperlukan agar bidang kontrol Cloud Service Mesh terkelola yang 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 Mesh Layanan Cloud terkelola

    Langkah-langkah yang diperlukan untuk menyediakan Cloud Service Mesh terkelola menggunakan fleet API bergantung apakah Anda memilih untuk mengaktifkannya dengan default untuk cluster fleet baru atau mengaktifkannya per cluster.

    Mengonfigurasi untuk fleet Anda

    Jika Anda telah mengaktifkan Edisi Google Kubernetes Engine (GKE) Enterprise, Anda dapat mengaktifkan Cloud Service Mesh terkelola sebagai konfigurasi default untuk fleet Anda. Ini berarti setiap cluster GKE di Google Cloud baru terdaftar selama cluster pembuatan konten akan telah mengelola Cloud Service Mesh yang telah diaktifkan di cluster. Anda dapat mengetahui lebih lanjut tentang konfigurasi default fleet di Mengelola tingkat fleet baru.

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

    Guna mengaktifkan setelan default tingkat fleet untuk Cloud Service Mesh terkelola, selesaikan langkah-langkah berikut:

    Konsol

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

      Buka Feature Manager

    2. Di panel Service Mesh, klik Configure.

    3. Tinjau setelan yang diwarisi oleh semua cluster baru yang Anda buat di konsol Google Cloud dan mendaftar 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 Anda inginkan untuk menyinkronkan. Anda hanya dapat memilih cluster yang telah menginstal Cloud Service Mesh.
      2. Klik Sinkronkan ke setelan fleet, lalu klik Konfirmasi di dialog konfirmasi yang muncul. Operasi ini dapat memerlukan waktu beberapa menit untuk diselesaikan.

    gcloud

    Untuk mengonfigurasi setelan default tingkat fleet menggunakan Google Cloud CLI, Anda harus tetapkan setelan berikut:

    • Setelan tingkat perangkat

      • Membuat 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 melihat pesan error berikut, Anda perlu 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 Anda (misalnya menggunakan VPC bersama), Anda harus mengizinkan akun layanan Cloud Service Mesh di project fleet untuk mengakses jaringan lokal. Anda hanya perlu melakukannya sekali untuk project jaringan.

        Beri 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." \
            --role roles/anthosservicemesh.serviceAgent
        
    • Setelan tingkat cluster

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

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

        Anda bisa mendapatkan nomor project untuk project fleet 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 dalam project fleet untuk mengakses project cluster Anda, dan aktifkan API yang diperlukan di project cluster. Hanya Anda perlu melakukan ini sekali untuk setiap project cluster.

        Beri akun layanan di project fleet izin untuk mengakses project cluster Anda:

        gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID"  \
            --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh." \
            --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 dalam project yang sama sebagai fleet Anda, CLUSTER_PROJECT_ID akan sama dengan FLEET_PROJECT_ID.

    Lanjutkan ke Pastikan bidang kontrol telah disediakan.

    Konfigurasi per cluster

    Gunakan langkah-langkah berikut untuk mengonfigurasi Cloud Service Mesh terkelola untuk setiap ke dalam mesh Anda satu per satu.

    Mengaktifkan fitur fleet Cloud Service Mesh

    Mengaktifkan Cloud Service Mesh pada project fleet. Perhatikan bahwa jika Anda berencana untuk mendaftar beberapa cluster, pengaktifan Cloud Service Mesh terjadi di tingkat fleet sehingga Anda hanya menjalankan perintah ini sekali saja.

    gcloud container fleet mesh enable --project FLEET_PROJECT_ID
    

    Mendaftarkan cluster ke fleet

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

      gcloud container clusters update CLUSTER_NAME \
        --location CLUSTER_LOCATION \
        --fleet-project FLEET_PROJECT_ID
      
    2. Pastikan 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 membutuhkannya saat aktifkan pengelolaan otomatis.

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

      Beri 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." \
            --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 cluster project, dan mengaktifkan API yang diperlukan pada project cluster.

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

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

       gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \
           --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh." \
           --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 mesh layanan Anda memerlukan Certificate Authority Service (CA Service), lalu ikuti Mengonfigurasi Certificate Authority Service untuk Cloud Service Mesh terkelola untuk mengaktifkannya di fleet Anda. Pastikan untuk menyelesaikan semua langkah sebelum melanjutkan ke bagian berikutnya.

    Aktifkan 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 telah terdaftar di fleet.
    • MEMBERSHIP_LOCATION adalah lokasi langganan Anda (baik region, atau global).

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

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

    Memverifikasi bahwa 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 atau TRAFFIC_DIRECTOR. Lihat Fitur yang didukung Cloud Service Mesh untuk perbedaan bidang kontrol dan konfigurasi yang didukung, serta untuk penerapan bidang kontrol dipilih.

    Konfigurasi kubectl agar mengarah ke cluster

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

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

    Perlu diperhatikan bahwa gateway masuk tidak otomatis di-deploy dengan kontrol pesawat terbang. Melepaskan deployment gateway masuk dan bidang kontrol memungkinkan Anda mengelola gateway di lingkungan produksi. Jika Anda ingin menggunakan gateway masuk Istio atau gateway keluar, lihat 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. kecuali jika Anda menonaktifkannya.

    Dengan bidang data terkelola, {i>proxy<i} file bantuan dan {i>gateway<i} yang dimasukkan secara otomatis diperbarui bersamaan dengan bidang kontrol yang dikelola oleh memulai ulang beban kerja untuk memasukkan ulang versi baru proxy. Hal ini biasanya selesai 1-2 minggu setelah bidang kontrol terkelola diupgrade.

    Jika dinonaktifkan, pengelolaan proxy akan dijalankan berdasarkan siklus proses alami dari pod dalam cluster dan harus dipicu secara manual oleh pengguna untuk mengontrol update besar.

    Bidang data terkelola mengupgrade proxy dengan mengeluarkan pod yang berjalan {i>proxy<i} versi sebelumnya. Penggusuran tersebut dilakukan secara bertahap, untuk menghormati anggaran gangguan pod dan mengendalikan tingkat perubahan.

    Bidang data terkelola tidak mengelola hal berikut:

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

    Menonaktifkan bidang data terkelola (opsional)

    Jika menyediakan Cloud Service Mesh terkelola pada cluster baru, Anda dapat menonaktifkan bidang data terkelola sepenuhnya, atau untuk namespace atau pod individual. Bidang data terkelola akan terus dinonaktifkan untuk cluster yang ada dengan dinonaktifkan secara {i> default<i} atau secara manual.

    Untuk menonaktifkan bidang data terkelola pada tingkat cluster dan kembali ke mengelola proxy file bantuan sendiri, ubah anotasi:

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

    Cara 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"}'
    

    Aktifkan notifikasi pemeliharaan

    Anda dapat meminta untuk diberi tahu tentang pemeliharaan pesawat data terkelola mendatang hingga seminggu sebelum pemeliharaan dijadwalkan. Notifikasi pemeliharaan tidak dikirim secara {i>default<i}. Anda juga harus Mengonfigurasi masa pemeliharaan GKE sebelum Anda dapat menerima notifikasi. Jika diaktifkan, notifikasi akan dikirim pada setidaknya dua hari sebelum operasi upgrade.

    Untuk memilih ikut serta dalam notifikasi pemeliharaan bidang data terkelola:

    1. Buka halaman Komunikasi.

      Buka halaman Komunikasi

    2. Di baris Cloud Service Mesh Upgrade, pada kolom Email, pilih untuk MENGAKTIFKAN notifikasi pemeliharaan.

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

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

    Contoh berikut menunjukkan pemeliharaan bidang data terkelola standar notifikasi:

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

    Pengguna Cloud Service Mesh yang terhormat,

    Komponen Cloud Service Mesh dalam cluster Anda ${instance_id} (https://console.cloud.google.com/kubernetes/clusters/details/${instance_id}/details?project=${project_id}) dijadwalkan untuk diupgrade pada ${scheduled_date_human_readable} pada ${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 email baru.

    Hormat kami,

    Tim Cloud Service Mesh

    (c) 2023 Google LLC 1600 Amphitheater Parkway, Mountain View, CA 94043 Kami mengirimkan pengumuman ini untuk memberi tahu Anda mengenai 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 multi-cluster ini dan lanjutkan ke Deploy aplikasi atau Memigrasikan aplikasi.

    Sebelum melanjutkan, pastikan bahwa Cloud Service Mesh dikonfigurasi pada .

    Mengaktifkan Cloud Service Mesh dengan fleet API akan mengaktifkan penemuan endpoint untuk gugus ini. Namun, Anda harus membuka port firewall. Guna menonaktifkan penemuan endpoint untuk satu atau beberapa cluster, lihat petunjuknya untuk menonaktifkannya di Penemuan endpoint di antara cluster dengan API deklaratif.

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

    Men-deploy aplikasi

    Jika Anda memiliki lebih dari satu cluster dalam fleet yang menggunakan Cloud Service Mesh terkelola, memastikan penemuan endpoint atau port firewall dikonfigurasi sebagaimana mestinya sebelum melanjutkan dan men-deploy aplikasi.

    Mengaktifkan namespace untuk injeksi. Langkah-langkah bergantung pada penerapan bidang kontrol Anda.

    Terkelola (TD)

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

    Terkelola (Istiod)

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

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

    Jika Anda sudah menjadi pengguna dengan bidang kontrol Istio Terkelola: Kami menyarankan agar Anda menggunakan 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 satu. Memiliki beberapa saluran bidang kontrol dalam cluster tidak didukung.

      Pada output, nilai pada 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
      

    Pada tahap ini, Anda telah berhasil mengonfigurasi Cloud Service Mesh terkelola. Jika Anda memiliki beban kerja yang ada di namespace berlabel, kemudian memulai ulang beban kerja tersebut {i>proxy<i} yang dimasukkan.

    Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan Kubernetes dan konfigurasi bidang kontrol di semua cluster, kecuali Anda berencana untuk membatasi konfigurasi tertentu tersebut ke subset dari cluster. Tujuan konfigurasi yang diterapkan ke cluster tertentu adalah sumber kebenaran untuk itu .

    Sesuaikan injeksi (opsional)

    Anda dapat mengganti nilai default dan menyesuaikan setelan injeksi, tetapi ini juga dapat menyebabkan error konfigurasi yang tidak terduga dan masalah file bantuan container. Sebelum menyesuaikan injeksi, baca informasi setelah contoh untuk catatan tentang pengaturan dan rekomendasi tertentu.

    Konfigurasi per pod tersedia untuk mengganti opsi ini di tiap pod. Hal ini dilakukan dengan menambahkan container istio-proxy ke pod Anda. File bantuan injeksi ini akan memperlakukan konfigurasi apa pun yang didefinisikan di sini sebagai penggantian terhadap template injeksi default.

    Misalnya, konfigurasi berikut menyesuaikan berbagai pengaturan, termasuk menurunkan permintaan CPU, menambahkan pemasangan volume, dan 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 {i>field<i} tertentu:

    • Kubernetes mengharuskan kolom image ditetapkan sebelum injeksi berjalan. Meskipun Anda dapat menetapkan gambar tertentu untuk menggantikan gambar default, sebaiknya Anda menyetel image ke auto, yang akan menyebabkan injektor file bantuan untuk otomatis memilih gambar yang akan digunakan.
    • Beberapa kolom di containers bergantung pada setelan terkait. Misalnya, harus kurang dari atau sama dengan batas CPU. Jika kedua {i>field<i} tidak benar terkonfigurasi, pod dapat gagal untuk dimulai.
    • Kubernetes memungkinkan Anda menetapkan requests dan limits untuk resource di Pod spec. Autopilot GKE hanya mempertimbangkan requests. Untuk selengkapnya informasi selengkapnya, lihat Menyetel batas resource di Autopilot.

    Selain itu, beberapa kolom tertentu dapat dikonfigurasi berdasarkan anotasi di Pod, meskipun disarankan untuk menggunakan pendekatan di atas untuk menyesuaikan setelan. Berikan perhatian tambahan untuk anotasi berikut:

    • Untuk GKE Standard, jika sidecar.istio.io/proxyCPU disetel, pastikan pastikan untuk menyetel sidecar.istio.io/proxyCPULimit secara eksplisit. Jika tidak, file bantuan Batas CPU akan ditetapkan sebagai tidak terbatas.
    • Untuk GKE Standard, jika sidecar.istio.io/proxyMemory disetel, pastikan untuk menetapkan sidecar.istio.io/proxyMemoryLimit secara eksplisit. Jika tidak, batas memori file bantuan akan ditetapkan sebagai tidak terbatas.
    • Untuk Autopilot GKE, mengonfigurasi resource requests dan limits penggunaan anotasi dapat menyediakan sumber daya secara berlebihan. Menggunakan pendekatan template gambar sebaiknya dihindari. Lihat Contoh modifikasi resource di Autopilot.

    Misalnya, lihat anotasi resource di bawah:

    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 Mesh Layanan Cloud terkelola

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

    1. Ganti label namespace saat ini. Langkah-langkah bergantung pada penerapan bidang kontrol Anda.

    Terkelola (TD)

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

    Terkelola (Istiod)

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

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

    Jika Anda sudah menjadi pengguna dengan bidang kontrol Istio Terkelola: Kami menyarankan agar Anda menggunakan 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 satu. Memiliki beberapa saluran bidang kontrol dalam cluster tidak didukung.

      Pada output, nilai pada 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 untuk deployment di namespace:

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

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

    4. Jika Anda men-deploy aplikasi dalam penyiapan multi-cluster, replikasikan Konfigurasi Kubernetes dan Istio di semua cluster, kecuali jika ada keinginan untuk membatasi konfigurasi itu pada {i>subset<i} saja. Tujuan konfigurasi yang diterapkan pada cluster tertentu adalah sumber kebenaran untuk gugus itu.

    Jika puas karena aplikasi Anda berfungsi seperti yang diharapkan, Anda dapat menghapus dalam cluster istiod setelah Anda mengalihkan semua namespace ke kontrol terkelola bidang, atau menyimpannya sebagai cadangan - istiod akan otomatis menurunkan skala untuk digunakan lebih sedikit sumber daya. Untuk menghapus, langsung ke Hapus bidang kontrol lama.

    Jika Anda mengalami masalah, Anda dapat mengidentifikasi dan menyelesaikannya dengan menggunakan informasi di Menyelesaikan masalah bidang kontrol terkelola dan jika perlu, kembalikan ke versi sebelumnya.

    Hapus bidang kontrol lama

    Setelah Anda menginstal dan mengonfirmasi bahwa semua namespace menggunakan kontrol yang dikelola Google bidang kontrol yang lama, Anda dapat menghapus bidang kontrol yang 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 {i>gateway<i} tambahan, periksa metrik untuk bidang kontrol, dan memverifikasi bahwa jumlah endpoint yang terhubung adalah nol.

    Kembalikan

    Lakukan langkah-langkah berikut jika Anda perlu melakukan rollback ke kontrol sebelumnya versi bidang:

    1. Mengupdate beban kerja untuk dimasukkan dengan versi sebelumnya bidang kontrol. Dalam perintah berikut, nilai revisi asm-191-1 adalah hanya digunakan sebagai contoh. Ganti contoh nilai dengan label revisi bidang kontrol Anda sebelumnya.

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

      kubectl rollout restart deployment -n NAMESPACE
      

    Bidang kontrol yang dikelola akan otomatis diskalakan ke nol dan tidak menggunakan resource saat tidak digunakan. Webhook dan penyediaan yang bermutasi akan tetap ada dan tidak memengaruhi perilaku cluster.

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

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

    Output yang akan dihasilkan saat berhasil:

    deployment.apps/istio-ingressgateway rolled back
    

    Meng-uninstal Cloud Service Mesh

    Bidang kontrol terkelola menskalakan otomatis hingga nol saat tidak ada namespace yang menggunakannya. Sebagai langkah-langkah mendetailnya, lihat Meng-uninstal Cloud Service Mesh.