Menyediakan Cloud Service Mesh pada cluster GKE Autopilot


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

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

Keuntungan menjalankan Cloud Service Mesh terkelola dengan GKE Autopilot

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 yang 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 file bantuan ke dalam workload tanpa perlu memberikan hak istimewa yang ditingkatkan ke container Anda.
  • Anda dapat melihat dasbor yang kaya untuk mesh dan layanan Anda 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
  • Bidang data terkelola Cloud Service Mesh otomatis mengupgrade proxy file bantuan 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 Istio API open source standar. Lihat fitur yang didukung.

Tujuan

  • Membuat cluster Autopilot GKE
  • Menyediakan Cloud Service Mesh yang terkelola menggunakan Fleet API
  • Men-deploy gateway 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 memastikan 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 diprainstal 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. 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. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    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. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Menginstal Google Cloud CLI.
  7. Untuk initialize gcloud CLI, jalankan perintah berikut:

    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. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  10. Berikan peran ke Akun Google Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/container.containerAdmin, roles/gkehub.admin, roles/serviceusage.serviceUsageAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ganti PROJECT_ID dengan project ID Anda.
    • Ganti EMAIL_ADDRESS dengan alamat email Anda.
    • Ganti ROLE dengan setiap peran individual.

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 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 Cloud Service Mesh di Konsol Google Cloud dan 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 bagi 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, terdaftar sebagai anggota Fleet:

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

    gcloud container fleet memberships list
    

    Outputnya mirip dengan hal berikut ini:

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

    Catat nama keanggotaan, 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 Mesh Layanan Cloud terkelola

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

gcloud

  1. Aktifkan fitur fleet Cloud Service Mesh pada project:

    gcloud container fleet mesh enable
    
  2. Aktifkan 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 pada 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.

Memverifikasi bahwa bidang kontrol aktif

Tunggu hingga controlPlaneManagement.state 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 akan tetap dalam status PROVISIONING hingga Anda men-deploy gateway masuk, karena cluster Autopilot tidak menyediakan node apa pun sampai Anda men-deploy workload.

Men-deploy gateway masuk mesh

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

Anda men-deploy gateway ke namespace khusus dan memberi label deployment untuk memastikan bahwa 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 agar bidang kontrol Cloud Service Mesh memasukkan konfigurasi gateway ke dalam deployment secara otomatis.

    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. Autopilot GKE hanya mempertimbangkan nilai resource yang disetel 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 memasukkan proxy file bantuan secara otomatis 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 memerlukan waktu beberapa menit.

    watch kubectl -n bank-sample get pods
    

    Saat aplikasi sudah siap, output-nya 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 balik gateway masuk:

    kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
    
  6. Dapatkan 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.

Terapkan TLS bersama

Pastikan mode STRICT mutual TLS (mTLS) diaktifkan. Terapkan kebijakan PeerAuthentication default untuk mesh di namespace sistem istio.

  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 dalam namespace tertentu.

Mempelajari dasbor Cloud Service Mesh

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

    Buka Cloud Service Mesh

  2. Pilih proyek dari daftar {i>drop-down<i} pada bilah menu.

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

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

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

  3. Klik layanan frontend di tabel guna melihat dasbor ringkasan untuk layanan tersebut. Anda akan melihat metrik tambahan untuk layanan dan visualisasi koneksi masuk dan keluar. Anda juga dapat membuat Objek Tingkat Layanan (SLO) untuk pemantauan dan pemberitahuan tentang layanan.

Memastikan mTLS diaktifkan

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

Pembersihan

Agar tidak dikenakan 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-nya.

Agar tidak menimbulkan biaya pada 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 gateway dan aplikasi 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