Menyediakan Cloud Service Mesh di cluster Autopilot GKE


Panduan ini menjelaskan cara menyiapkan Cloud Service Mesh terkelola di cluster Autopilot Google Kubernetes Engine (GKE). Cloud Service Mesh adalah mesh layanan terkelola sepenuhnya berdasarkan Istio.

Tutorial ini menunjukkan cara mengonfigurasi mesh layanan siap produksi yang berjalan di satu cluster GKE Autopilot dengan setelan default. Sebaiknya Anda juga membaca panduan penyediaan Cloud Service Mesh secara lengkap saat mendesain lingkungan Anda.

Keuntungan menjalankan Cloud Service Mesh terkelola dengan Autopilot GKE

Saat Anda menggunakan GKE dalam mode Autopilot, Google akan menangani penyiapan dan pengelolaan cluster Anda secara otomatis. Mode Autopilot menyederhanakan pengalaman pengoperasian cluster dan memungkinkan Anda berfokus pada aplikasi. Dengan cara yang sama, Cloud Service Mesh terkelola adalah mesh layanan yang terkelola sepenuhnya yang dapat Anda sediakan dengan mengikuti beberapa langkah.

  • Anda menyediakan Cloud Service Mesh terkelola menggunakan Fleet API - tanpa memerlukan alat sisi klien seperti istioctl.
  • Cloud Service Mesh secara otomatis menyuntikkan proxy sidecar ke dalam workload tanpa perlu memberikan hak istimewa yang ditingkatkan ke container Anda.
  • Anda dapat melihat dasbor lengkap untuk mesh dan layanan tanpa konfigurasi tambahan, lalu menggunakan metrik ini untuk mengonfigurasi tujuan tingkat layanan (SLO) dan pemberitahuan untuk memantau kondisi aplikasi Anda
  • Bidang kontrol Cloud Service Mesh terkelola diupgrade secara otomatis untuk memastikan Anda mendapatkan patch dan fitur keamanan terbaru
  • Managed data plane Cloud Service Mesh secara otomatis mengupgrade proxy sidecar di workload Anda sehingga Anda tidak perlu memulai ulang layanan sendiri saat upgrade proxy dan patch keamanan tersedia
  • Cloud Service Mesh adalah produk yang didukung dan dapat dikonfigurasi menggunakan API Istio open source standar. Lihat fitur yang didukung.

Tujuan

  • Membuat cluster GKE Autopilot
  • Menyediakan Cloud Service Mesh terkelola menggunakan Fleet API
  • Men-deploy gateway traffic masuk mesh ke namespace khusus
  • Menerapkan aplikasi sampel
  • Mengonfigurasi Cloud Service Mesh untuk menerapkan autentikasi TLS bersama (mTLS) yang ketat untuk komunikasi antar-layanan
  • Melihat dasbor Cloud Service Mesh dan memverifikasi bahwa layanan terhubung dengan mTLS

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Cloud Shell telah diinstal dengan software yang Anda perlukan untuk tutorial ini, termasuk kubectl, gcloud CLI, Helm, dan Terraform. Jika tidak menggunakan Cloud Shell, Anda harus menginstal gcloud CLI.

  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. Install the Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  7. Install the Google Cloud CLI.

  8. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  9. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  12. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/container.admin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  13. Menyiapkan lingkungan Anda

    Anda dapat menyiapkan lingkungan menggunakan gcloud CLI atau Terraform.

    gcloud

    1. Menetapkan variabel lingkungan:

      PROJECT_ID=PROJECT_ID
      gcloud config set project ${PROJECT_ID}
      
    2. Aktifkan Mesh API:

      gcloud services enable mesh.googleapis.com
      

      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*

    Terraform

    gcloud config set project PROJECT_ID
    GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
    export GOOGLE_CLOUD_PROJECT
    

    Membuat cluster GKE

    Buat cluster GKE dalam mode Autopilot.

    gcloud

    1. Buat cluster, didaftarkan sebagai anggota Fleet:

      gcloud container clusters create-auto asm-cluster \
          --location="us-central1" \
          --enable-fleet
      
    2. Verifikasi bahwa cluster terdaftar di Fleet:

      gcloud container fleet memberships list
      

      Outputnya mirip dengan hal berikut ini:

      NAME: asm-cluster
      EXTERNAL_ID:
      LOCATION: us-central1
      

      Catat nama keanggotaan, karena Anda akan memerlukannya untuk mengonfigurasi Cloud Service Mesh.

    Terraform

    Untuk membuat cluster GKE, Anda dapat menggunakan resource google_container_cluster. Anda menetapkan blok fleet sehingga cluster ditambahkan ke fleet saat dibuat.

    resource "google_container_cluster" "cluster" {
      name                = "asm-cluster"
      location            = var.region
      deletion_protection = false # Warning: Do not set deletion_protection to false for production clusters
    
      enable_autopilot = true
      fleet {
        project = data.google_project.project.name
      }
    }
    
    data "google_project" "project" {}
    

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

    Menyediakan Cloud Service Mesh terkelola

    Anda menyediakan Cloud Service Mesh terkelola menggunakan fitur servicemesh pada keanggotaan fleet untuk cluster Anda.

    gcloud

    1. Aktifkan fitur fleet Cloud Service Mesh di project:

      gcloud container fleet mesh enable
      
    2. Mengaktifkan pengelolaan otomatis mesh:

      gcloud container fleet mesh update \
          --management=automatic \
          --memberships=MEMBERSHIP_NAME \
          --location=us-central1
      

      Ganti MEMBERSHIP_NAME dengan nama keanggotaan yang tercantum saat Anda memverifikasi bahwa cluster Anda terdaftar ke fleet.

    Terraform

    Untuk mengaktifkan mesh API, Anda dapat menggunakan resource google_project_service.

    Anda menggunakan resource google_gke_hub_feature, dan google_gke_hub_feature_membership untuk mengonfigurasi Cloud Service Mesh terkelola di cluster Anda.

    resource "google_project_service" "mesh_api" {
      service = "mesh.googleapis.com"
    
      disable_dependent_services = true
    }
    
    resource "google_gke_hub_feature" "feature" {
      name     = "servicemesh"
      location = "global"
    
      depends_on = [
        google_project_service.mesh_api
      ]
    }
    
    resource "google_gke_hub_feature_membership" "feature_member" {
      location   = "global"
      feature    = google_gke_hub_feature.feature.name
      membership = google_container_cluster.cluster.fleet.0.membership
      membership_location = google_container_cluster.cluster.location
      mesh {
        management = "MANAGEMENT_AUTOMATIC"
      }
    }
    

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

    Pastikan bidang kontrol aktif

    Tunggu hingga controlPlaneManagement.state menjadi ACTIVE. Proses ini mungkin memerlukan waktu hingga 15 menit.

    watch -n 30 gcloud container fleet mesh describe
    

    Outputnya mirip dengan:

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

    Bagian dataPlaneManagement tetap dalam status PROVISIONING hingga Anda men-deploy gateway ingress, karena cluster Autopilot tidak menyediakan node apa pun hingga Anda men-deploy workload.

    Men-deploy gateway traffic masuk mesh

    Di bagian ini, Anda akan men-deploy gateway ingress mesh untuk menangani traffic masuk untuk aplikasi contoh. Gateway ingress adalah load balancer yang beroperasi di edge mesh, yang menerima koneksi HTTP/TCP masuk atau keluar.

    Anda men-deploy gateway ke namespace khusus dan memberi label pada deployment untuk memastikan gateway Anda dapat dikelola dengan aman dan diupgrade secara otomatis oleh bidang kontrol Cloud Service Mesh.

    1. Download kredensial agar Anda dapat mengakses cluster:

      gcloud container clusters get-credentials asm-cluster --location=us-central1
      
    2. Buat namespace untuk deployment gateway:

      kubectl create namespace bank-gateways
      
    3. Tambahkan label ke namespace sehingga bidang kontrol Cloud Service Mesh secara otomatis memasukkan konfigurasi gateway ke dalam deployment.

      kubectl label namespace bank-gateways istio-injection=enabled
      
    4. Deploy gateway masuk ke namespace:

      Helm

      helm repo add istio https://istio-release.storage.googleapis.com/charts
      helm repo update
      helm install --wait --namespace bank-gateways \
          --set resources.requests.cpu=250m \
          --set resources.requests.memory=512Mi \
          --set resources.requests.ephemeral-storage=1Gi \
          --set resources.limits.cpu=250m \
          --set resources.limits.memory=512Mi \
          --set resources.limits.ephemeral-storage=1Gi \
          istio-ingressgateway istio/gateway
      

      kubectl

      git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages
      kubectl apply -n bank-gateways \
          -f ./anthos-service-mesh-packages/samples/gateways/istio-ingressgateway
      kubectl -n bank-gateways wait "deployment/istio-ingressgateway"  \
          --for=condition=available --timeout=240s
      

      Pastikan Anda menetapkan permintaan resource yang memadai saat men-deploy ke lingkungan produksi. GKE Autopilot hanya mempertimbangkan nilai resource yang ditetapkan dalam requests, bukan limits. Project Istio memublikasikan informasi tentang performa dan skalabilitas.

    Men-deploy aplikasi contoh

    1. Buat namespace Kubernetes untuk deployment:

      kubectl create namespace bank-sample
      
    2. Tambahkan label ke namespace agar Cloud Service Mesh otomatis memasukkan proxy sidecar ke dalam Pod contoh:

      kubectl label namespace bank-sample istio-injection=enabled
      
    3. Deploy aplikasi contoh:

      git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
      kubectl apply -n bank-sample -f bank-of-anthos/extras/jwt/jwt-secret.yaml
      kubectl apply -n bank-sample -f bank-of-anthos/kubernetes-manifests/
      
    4. Tunggu hingga aplikasi siap. Proses ini akan memerlukan waktu beberapa menit.

      watch kubectl -n bank-sample get pods
      

      Jika aplikasi sudah siap, output-nya akan mirip dengan berikut ini:

      NAME                                 READY   STATUS    RESTARTS   AGE
      accounts-db-0                        2/2     Running   0          2m16s
      balancereader-5c695f78f5-x4wlz       2/2     Running   0          3m8s
      contacts-557fc79c5-5d7fg             2/2     Running   0          3m7s
      frontend-7dd589c5d7-b4cgq            2/2     Running   0          3m7s
      ledger-db-0                          2/2     Running   0          3m6s
      ledgerwriter-6497f5cf9b-25c6x        2/2     Running   0          3m5s
      loadgenerator-57f6896fd6-lx5df       2/2     Running   0          3m5s
      transactionhistory-6c498965f-tl2sk   2/2     Running   0          3m4s
      userservice-95f44b65b-mlk2p          2/2     Running   0          3m4s
      
    5. Buat resource Istio Gateway dan VirtualService untuk mengekspos aplikasi di belakang gateway masuk:

      kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
      
    6. Mendapatkan link ke aplikasi contoh:

      INGRESS_HOST=$(kubectl -n bank-gateways get service istio-ingressgateway \
          -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      echo "http://$INGRESS_HOST"
      
    7. Di browser, ikuti link untuk membuka aplikasi contoh. Login dengan nama pengguna dan sandi default untuk melihat aplikasi.

    Menerapkan TLS bersama

    Pastikan mode TLS bersama (mTLS) KETAT diaktifkan. Terapkan kebijakan PeerAuthentication default untuk mesh di namespace istio-system.

    1. Simpan manifes berikut sebagai mesh-peer-authn.yaml:

      apiVersion: "security.istio.io/v1beta1"
      kind: "PeerAuthentication"
      metadata:
        name: "default"
        namespace: "istio-system"
      spec:
        mtls:
          mode: STRICT
      
    2. Terapkan manifes ke cluster:

      kubectl apply -f mesh-peer-authn.yaml
      

    Anda dapat mengganti konfigurasi ini dengan membuat resource PeerAuthentication di namespace tertentu.

    Mempelajari dasbor Cloud Service Mesh

    1. Di Google Cloud konsol, buka Cloud Service Mesh untuk melihat dasbor mesh Anda:

      Buka Cloud Service Mesh

    2. Pilih project dari daftar drop-down di menu.

      Anda akan melihat tabel ringkasan dengan semua microservice di mesh Anda dan visualisasi grafis koneksi antar-microservice. Untuk setiap microservice, tabel menampilkan tiga "sinyal emas" SRE:

      • Traffic - permintaan per detik
      • Tingkat error - persentase
      • Latensi - milidetik

      Metrik ini didasarkan pada traffic aktual yang ditangani oleh mikroservice. Traffic pengujian konstan dikirim secara otomatis ke layanan frontend oleh klien loadgenerator yang di-deploy sebagai bagian dari aplikasi contoh. Cloud Service Mesh secara otomatis mengirim metrik, log, dan (opsional) trace ke Google Cloud Observability.

    3. Klik layanan frontend dalam tabel untuk melihat dasbor ringkasan layanan. Anda akan melihat metrik tambahan untuk layanan dan visualisasi koneksi masuk dan keluar. Anda juga dapat membuat Service Level Object (SLO) untuk pemantauan dan pemberitahuan pada layanan.

    Memastikan mTLS diaktifkan

    Klik link keamanan di panel untuk melihat ringkasan keamanan layanan frontend. Tabel dan visualisasi menampilkan ikon gembok hijau untuk setiap koneksi masuk dan keluar antara microservice. Ikon ini menunjukkan bahwa koneksi menggunakan mTLS untuk autentikasi dan enkripsi.

    Pembersihan

    Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

    Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:

    Menghapus project

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Menghapus resource satu per satu

    Jika Anda telah menggunakan project yang sudah ada dan tidak ingin menghapusnya, hapus resource individual tersebut.

    gcloud

    1. Hapus aplikasi dan gateway contoh:

      kubectl delete namespace bank-sample
      kubectl delete namespace bank-gateways
      
    2. Ikuti petunjuk untuk meng-uninstal Cloud Service Mesh

    3. Hapus cluster GKE:

      gcloud container clusters delete --region us-central1 asm-cluster --quiet
      

    Terraform

    Hapus resource yang Anda buat dengan Terraform:

      terraform destroy
    

    Langkah berikutnya