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.
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.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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.
- Replace
Menyiapkan lingkungan Anda
Anda dapat menyiapkan lingkungan menggunakan gcloud CLI atau Terraform.
gcloud
Menetapkan variabel lingkungan:
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
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
Buat cluster, yang terdaftar sebagai anggota Fleet:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
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.
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
Aktifkan fitur fleet Cloud Service Mesh di project:
gcloud container fleet mesh enable
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.
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.
Download kredensial agar Anda dapat mengakses cluster:
gcloud container clusters get-credentials asm-cluster --location=us-central1
Buat namespace untuk deployment gateway:
kubectl create namespace bank-gateways
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
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
, bukanlimits
. Project Istio memublikasikan informasi tentang performa dan skalabilitas.
Men-deploy aplikasi contoh
Buat namespace Kubernetes untuk deployment:
kubectl create namespace bank-sample
Tambahkan label ke namespace agar Cloud Service Mesh otomatis memasukkan proxy sidecar ke dalam Pod contoh:
kubectl label namespace bank-sample istio-injection=enabled
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/
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
Buat resource
Gateway
danVirtualService
Istio untuk mengekspos aplikasi di balik gateway masuk:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
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"
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.
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
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
Di konsol Google Cloud, buka Cloud Service Mesh untuk melihat dasbor untuk mesh Anda:
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 klienloadgenerator
yang di-deploy sebagai bagian dari aplikasi contoh. Cloud Service Mesh secara otomatis mengirim metrik, log, dan (opsional) trace ke Google Cloud Observability.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
Hapus aplikasi dan gateway contoh:
kubectl delete namespace bank-sample kubectl delete namespace bank-gateways
Hapus cluster GKE:
gcloud container clusters delete --region us-central1 asm-cluster --quiet
Terraform
Hapus resource yang Anda buat dengan Terraform:
terraform destroy