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.
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.
- 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.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
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.
- Ganti
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 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
Buat cluster, terdaftar sebagai anggota Fleet:
gcloud container clusters create-auto asm-cluster \ --location="us-central1" \ --enable-fleet
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.
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
Aktifkan fitur fleet Cloud Service Mesh pada project:
gcloud container fleet mesh enable
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.
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.
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 memasukkan konfigurasi gateway ke dalam deployment secara otomatis.
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. Autopilot GKE hanya mempertimbangkan nilai resource yang disetel 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 memasukkan proxy file bantuan secara otomatis 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 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
Buat resource Istio
Gateway
danVirtualService
untuk mengekspos aplikasi di balik gateway masuk:kubectl apply -n bank-sample -f bank-of-anthos/extras/istio/frontend-ingress.yaml
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"
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.
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
dalam namespace tertentu.
Mempelajari dasbor Cloud Service Mesh
Di Konsol Google Cloud, buka Cloud Service Mesh untuk melihat dasbor mesh Anda:
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 klienloadgenerator
yang di-deploy sebagai bagian dari aplikasi contoh. Cloud Service Mesh secara otomatis mengirimkan metrik, log, dan (opsional) trace ke Google Cloud Observability.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
Hapus gateway dan aplikasi 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