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 yang terkelola sepenuhnya berdasarkan Istio.

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

Keuntungan menjalankan Cloud Service Mesh terkelola dengan Autopilot GKE

Saat Anda menggunakan GKE dalam mode Autopilot, Google akan menangani penyiapan dan pengelolaan cluster 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 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 memasukkan proxy sidecar ke dalam workload tanpa perlu memberikan hak istimewa yang ditingkatkan ke penampung Anda.
  • Anda dapat melihat dasbor lengkap untuk mesh dan layanan tanpa konfigurasi tambahan, lalu menggunakan metrik ini untuk mengonfigurasi sasaran 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
  • Bidang data yang dikelola Cloud Service Mesh akan otomatis mengupgrade proxy sidecar dalam 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 layanan-ke-layanan
  • Melihat dasbor Cloud Service Mesh dan memverifikasi bahwa layanan terhubung dengan mTLS

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud 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 sebelumnya 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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

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

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

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

  10. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/container.containerAdmin, 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.

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, mengaktifkan Mesh Configuration API memungkinkan Anda mengakses halaman Cloud Service Mesh di konsol Google Cloud dan menggunakan otoritas sertifikasi 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 armada. Tidak
    monitoring.googleapis.com Diperlukan untuk mengambil telemetri untuk beban kerja mesh. Tidak
    stackdriver.googleapis.com Diperlukan untuk menggunakan UI Layanan. Tidak
    opsconfigmonitoring.googleapis.com Diperlukan untuk menggunakan UI Layanan untuk cluster di luar Google Cloud. 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

Membuat cluster GKE dalam mode Autopilot.

gcloud

  1. Buat cluster, yang terdaftar sebagai anggota Fleet:

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

    gcloud container fleet memberships list
    

    Outputnya mirip dengan hal berikut ini:

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

    Catat nama langganan, karena Anda 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 di keanggotaan fleet untuk cluster Anda.

gcloud

  1. Aktifkan fitur fleet Cloud Service Mesh di project:

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

    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.

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.

Memverifikasi bahwa 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 masuk, 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 traffic masuk adalah load balancer yang beroperasi di ujung mesh, menerima koneksi HTTP/TCP masuk atau keluar.

Anda men-deploy gateway ke namespace khusus dan memberi label pada deployment untuk memastikan gateway 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 agar bidang kontrol Cloud Service Mesh 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

    kubectl apply -n bank-gateways \
        -k https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages/tree/main/samples/gateways/istio-ingressgateway
    kubectl -n bank-gateway 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 di 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 Gateway dan VirtualService Istio untuk mengekspos aplikasi di balik 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) KERAS 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.

Menjelajahi dasbor Cloud Service Mesh

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

    Buka Cloud Service Mesh

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

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

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

    Metrik ini didasarkan pada traffic sebenarnya yang ditangani oleh microservice. Traffic pengujian konstan secara otomatis dikirim 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 memantau dan memberikan pemberitahuan tentang 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 tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:

Menghapus project

    Menghapus project Google Cloud:

    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 selanjutnya