Membuat cluster GKE dengan Cloud Service Mesh dan gcloud CLI
Dalam tutorial ini, Anda akan menyediakan Cloud Service Mesh terkelola menggunakan Fleet API Google Kubernetes Engine (GKE) di cluster publik GKE baru. Tutorial ini akan memandu Anda:
- Mengonfigurasi project Google Cloud Anda.
- Membuat cluster GKE dengan jumlah minimum vCPU yang diperlukan oleh Cloud Service Mesh.
- Mendaftarkan cluster GKE ke Fleet project Anda.
- Menyediakan Cloud Service Mesh terkelola di cluster menggunakan Fleet API.
- Men-deploy gateway traffic masuk untuk mengekspos aplikasi.
- Men-deploy aplikasi contoh sehingga Anda dapat melihat data telemetri di dasbor Cloud Service Mesh di konsol Google Cloud.
- Mengekspos dan mengakses aplikasi contoh.
Fleet API
Panduan ini mengasumsikan bahwa Anda sudah memahami
Flot, yang merupakan
pengelompokan logis cluster GKE dan resource lain yang dapat
dikelola bersama. Flotte adalah konsep GKE, bukan konsep Kubernetes. Dengan mendaftarkan cluster ke Fleet, Anda dapat menyediakan Cloud Service Mesh terkelola di cluster tersebut menggunakan perintah gcloud container fleet mesh update
.
Penggunaan Fleet diaktifkan oleh Fleet API (gkehub.googleapis.com
) yang
Anda aktifkan saat memulai tutorial ini.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan panduan memulai ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus cluster. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Fleet (GKE Hub), and Cloud Service Mesh APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Fleet (GKE Hub), and Cloud Service Mesh APIs.
- Catat ID project Anda.
Menginstal alat yang diperlukan
Anda dapat menjalankan alat ini di Cloud Shell atau di komputer lokal Anda. Cloud Shell telah menginstal semua alat yang diperlukan.
Cloud Shell
Cloud Shell menyediakan virtual machine (VM) Compute Engine g1-small yang menjalankan sistem operasi Linux berbasis Debian. Keuntungan menggunakan Cloud Shell adalah:
Cloud Shell menyertakan
gcloud
,kubectl
,git
, dan alat command line lainnya yang Anda perlukan.Direktori $HOME Cloud Shell Anda memiliki ruang penyimpanan persisten sebesar 5 GB.
Anda dapat memilih editor teks:
Editor kode, yang Anda akses dengan mengklik edit di bagian atas jendela Cloud Shell.
Emacs, Vim, atau Nano, yang Anda akses dari command line di Cloud Shell.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Komputer lokal
Pastikan Anda telah menginstal alat berikut:
Lakukan autentikasi dengan Google Cloud CLI:
gcloud auth login --project PROJECT_ID
Perbarui komponen:
gcloud components update
Membuat cluster GKE
Jalankan perintah berikut untuk membuat cluster dengan jumlah vCPU minimum yang diperlukan oleh Cloud Service Mesh. Dalam perintah, ganti placeholder dengan informasi berikut:
- CLUSTER_NAME: nama cluster Anda. Nama hanya boleh
berisi karakter alfanumerik dalam huruf kecil dan
-
, harus diawali dengan huruf dan diakhiri dengan alfanumerik, dan tidak boleh lebih dari 40 karakter. - PROJECT_ID: project ID tempat cluster akan dibuat.
- CLUSTER_LOCATION: zona untuk cluster, seperti
us-central1-a
.
gcloud container clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION \ --machine-type=e2-standard-4 \ --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.goog
Pembuatan cluster memerlukan waktu beberapa menit. Saat cluster dibuat, perintah
gcloud
akan menampilkan hal berikut:Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...working...
Output yang diharapkan saat pembuatan berhasil akan mirip dengan berikut ini:
Creating cluster CLUSTER_NAME in CLUSTER_LOCATION...done. Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/CLUSTER_LOCATION/CLUSTER_NAME?project=PROJECT_ID kubeconfig entry generated for CLUSTER_NAME. NAME: CLUSTER_NAME LOCATION: CLUSTER_LOCATION MASTER_VERSION: 1.20.10-gke.1600 MASTER_IP: 198.51.100.1 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.20.10-gke.1600 NUM_NODES: 2 STATUS: RUNNING
- CLUSTER_NAME: nama cluster Anda. Nama hanya boleh
berisi karakter alfanumerik dalam huruf kecil dan
Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster.
gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Output yang diharapkan:
Fetching cluster endpoint and auth data. kubeconfig entry generated for CLUSTER_NAME.
Tetapkan konteks saat ini untuk
kubectl
ke cluster.kubectl config set-context CLUSTER_NAME
Output yang diharapkan:
Context "CLUSTER_NAME" created.
Menyediakan Cloud Service Mesh
Jika Anda belum menutup halaman ini sejak membuat cluster, placeholder
akan memiliki nilai yang Anda masukkan untuk perintah gcloud container clusters create
.
Aktifkan Cloud Service Mesh di Fleet project Anda.
gcloud container fleet mesh enable --project PROJECT_ID
Outputnya mirip dengan:
Waiting for Feature Service Mesh to be created...done.
Daftarkan cluster ke Fleet project:
gcloud container fleet memberships register CLUSTER_NAME-membership \ --gke-cluster=CLUSTER_LOCATION/CLUSTER_NAME \ --enable-workload-identity \ --project PROJECT_ID
Outputnya mirip dengan:
Waiting for membership to be created...done. Finished registering to the Fleet.
Sediakan Cloud Service Mesh terkelola di cluster menggunakan Fleet API:
gcloud container fleet mesh update \ --management automatic \ --memberships CLUSTER_NAME-membership \ --project PROJECT_ID
Outputnya mirip dengan:
Waiting for Feature Service Mesh to be updated...done.
Pastikan Cloud Service Mesh terkelola telah diaktifkan untuk cluster dan siap digunakan:
gcloud container fleet mesh describe --project PROJECT_ID
Mungkin perlu waktu sekitar 10 menit agar Cloud Service Mesh disediakan dan siap digunakan di cluster. Jika Anda melihat
controlPlaneManagement.state: DISABLED
ataucontrolPlaneManagement.state: PROVISIONING
, Anda harus menjalankan kembali perintah sebelumnya setiap beberapa menit hingga Anda melihatcontrolPlaneManagement.state: ACTIVE
.Outputnya mirip dengan:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/your-cluster-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/your-cluster-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Mendownload kode contoh
Clone repositori git yang berisi kode contoh yang digunakan dalam tutorial ini:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git
Bagian berikutnya dari tutorial ini menggunakan variabel DIR_PATH.
Tetapkan variabel ini ke jalur repositori anthos-service-mesh-packages
yang Anda clone (misalnya, ./anthos-service-mesh-packages
).
Men-deploy gateway traffic masuk
Cloud Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan Anda. Gateway menjelaskan load balancer yang beroperasi di tepi mesh yang menerima koneksi HTTP/TCP masuk atau keluar. Gateway adalah proxy Envoy yang memberi Anda kontrol terperinci atas traffic yang masuk dan keluar dari mesh.
Buat namespace untuk gateway masuk jika Anda belum memilikinya. Gateway adalah beban kerja pengguna, dan sebagai praktik terbaik, gateway tidak boleh di-deploy di namespace bidang kontrol. Ganti
GATEWAY_NAMESPACE
dengan nama namespace Anda.kubectl create namespace GATEWAY_NAMESPACE
Output yang diharapkan:
namespace/GATEWAY_NAMESPACE created
Aktifkan injeksi otomatis di gateway. Langkah-langkah yang diperlukan bergantung pada apakah Anda ingin menggunakan label injeksi default (misalnya,
istio-injection=enabled
) atau label revisi di namespace gateway. Tag revisi dan label revisi default digunakan oleh webhook injector sidecar untuk mengaitkan proxy yang dimasukkan dengan revisi bidang kontrol tertentu.Label injeksi default
Terapkan label injeksi default ke namespace.
kubectl label namespace GATEWAY_NAMESPACE istio-injection=enabled istio.io/rev-
Label revisi
Gunakan perintah berikut untuk menemukan label revisi di
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ "jsonpath={.items[*].metadata.labels['istio\.io/rev']}{'\n'}"
Perintah ini menghasilkan label revisi yang sesuai dengan versi Cloud Service Mesh, misalnya:
asm-11910-9
Terapkan label revisi ke namespace. Dalam perintah berikut,
REVISION
adalah nilai label revisiistiod
yang Anda catat di langkah sebelumnya.kubectl label namespace GATEWAY_NAMESPACE \ istio.io/rev=REVISION --overwrite
Output yang diharapkan:
namespace/GATEWAY_NAMESPACE labeled
Anda dapat mengabaikan pesan
"istio.io/rev" not found
dalam output. Artinya, namespace sebelumnya tidak memiliki labelistio.io/rev
, yang akan Anda temukan dalam penginstalan baru Cloud Service Mesh atau deployment baru. Karena injeksi otomatis gagal jika namespace memiliki labelistio.io/rev
danistio-injection
, semua perintahkubectl label
dalam dokumentasi Cloud Service Mesh secara eksplisit menentukan kedua label tersebut.Jika namespace gateway tidak diberi label, pod
istio-ingressgateway
akan gagal dengan errorImagePullBackOff
saat gateway mencoba menarik dan imageauto
. Gambar ini akan diganti oleh webhook.Download contoh file konfigurasi .yaml gateway ingress dari repositori
anthos-service-mesh-packages
.Terapkan contoh konfigurasi .yaml gateway masuk apa adanya, atau ubah sesuai kebutuhan.
kubectl apply -n GATEWAY_NAMESPACE \ -f CONFIG_PATH/istio-ingressgateway
Output yang diharapkan:
deployment.apps/istio-ingressgateway created poddisruptionbudget.policy/istio-ingressgateway created horizontalpodautoscaler.autoscaling/istio-ingressgateway created role.rbac.authorization.k8s.io/istio-ingressgateway created rolebinding.rbac.authorization.k8s.io/istio-ingressgateway created service/istio-ingressgateway created serviceaccount/istio-ingressgateway created
Pelajari lebih lanjut praktik terbaik untuk gateway.
Men-deploy contoh Butik Online
Aplikasi contoh Butik Online di repo
anthos-service-mesh-packages
diubah dari kumpulan manifes asli di repo
microservices-demo
. Dengan mengikuti praktik terbaik, setiap layanan di-deploy di namespace terpisah
dengan akun layanan yang unik.
Buat namespace untuk aplikasi:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
Output yang diharapkan:
namespace/ad created namespace/cart created namespace/checkout created namespace/currency created namespace/email created namespace/frontend created namespace/loadgenerator created namespace/payment created namespace/product-catalog created namespace/recommendation created namespace/shipping created
Mengaktifkan injeksi sidecar otomatis (injeksi otomatis). Perintah yang diperlukan bergantung pada apakah Anda ingin menggunakan label injeksi default (misalnya,
istio-injection=enabled
) atau label revisi yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masukLabel injeksi default
Terapkan label injeksi default ke namespace. Dalam perintah berikut, GATEWAY_NAMESPACE adalah nilai yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk.
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio-injection=enabled istio.io/rev- done;
Output yang diharapkan:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Label revisi
Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, REVISION adalah nilai yang sama dengan yang Anda gunakan untuk menganotasi namespace gateway masuk.
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns istio.io/rev=REVISION --overwrite done;
Output yang diharapkan:
namespace/ad labeled namespace/cart labeled namespace/checkout labeled namespace/currency labeled namespace/email labeled namespace/frontend labeled namespace/loadgenerator labeled namespace/payment labeled namespace/product-catalog labeled namespace/recommendation labeled namespace/shipping labeled
Men-deploy aplikasi contoh ke cluster.
Buat akun layanan dan deployment:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
Output yang diharapkan:
serviceaccount/ad created deployment.apps/adservice created serviceaccount/cart created deployment.apps/cartservice created serviceaccount/checkout created deployment.apps/checkoutservice created serviceaccount/currency created deployment.apps/currencyservice created serviceaccount/email created deployment.apps/emailservice created serviceaccount/frontend created deployment.apps/frontend created serviceaccount/loadgenerator created deployment.apps/loadgenerator created serviceaccount/payment created deployment.apps/paymentservice created serviceaccount/product-catalog created deployment.apps/productcatalogservice created serviceaccount/recommendation created deployment.apps/recommendationservice created serviceaccount/shipping created deployment.apps/shippingservice created
Buat layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/services
Output yang diharapkan:
service/adservice created service/cartservice created service/checkoutservice created service/currencyservice created service/emailservice created service/frontend created service/frontend-external created service/paymentservice created service/productcatalogservice created service/recommendationservice created service/shippingservice created
Buat entri layanan:
kubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
Output yang diharapkan:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Mengekspos dan mengakses aplikasi
Ada beberapa cara untuk mengekspos aplikasi. Dalam panduan ini, kita akan menggunakan gateway masuk yang di-deploy di atas untuk melakukannya. Untuk mengetahui cara lain mengekspos aplikasi Butik Online, lihat bagian mengekspos dan mengakses aplikasi dalam panduan Men-deploy contoh aplikasi Butik Online.
Men-deploy
Gateway
danVirtualService
untuk layanan frontendkubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/frontend-gateway.yaml
Output yang diharapkan:
gateway.networking.istio.io/frontend-gateway created virtualservice.networking.istio.io/frontend-ingress created
Dapatkan alamat IP eksternal gateway masuk, ganti placeholder dengan informasi berikut:
- GATEWAY_SERVICE_NAME: nama layanan gateway
ingress. Jika Anda men-deploy gateway contoh tanpa modifikasi, nilainya akan
istio-ingressgateway
. - GATEWAY_NAMESPACE: namespace tempat Anda men-deploy gateway masuk:
kubectl get service GATEWAY_SERVICE_NAME \ -n GATEWAY_NAMESPACE
Outputnya mirip dengan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
Dalam contoh ini, alamat IP gateway masuk adalah
35.239.7.64
.- GATEWAY_SERVICE_NAME: nama layanan gateway
ingress. Jika Anda men-deploy gateway contoh tanpa modifikasi, nilainya akan
Buka aplikasi di browser Anda untuk mengonfirmasi penginstalan:
http://EXTERNAL_IP/
Melihat dasbor Service Mesh
Setelah workload di-deploy di cluster dengan proxy sidecar yang dimasukkan, Anda dapat menjelajahi halaman Cloud Service Mesh di konsol Google Cloud untuk melihat semua fitur visibilitas yang ditawarkan Cloud Service Mesh. Perhatikan bahwa data telemetri memerlukan waktu sekitar satu atau dua menit untuk ditampilkan di konsol Google Cloud setelah Anda men-deploy workload.
Akses ke Cloud Service Mesh di konsol Google Cloud dikontrol oleh Identity and Access Management (IAM). Untuk mengakses halaman Cloud Service Mesh, Pemilik Project harus memberikan peran Project Editor atau Viewer kepada pengguna, atau peran yang lebih ketat yang dijelaskan dalam Mengontrol akses ke Cloud Service Mesh di Konsol Google Cloud.
Di konsol Google Cloud, buka Cloud Service Mesh.
Pilih project Google Cloud dari menu drop-down di panel menu.
Jika Anda memiliki lebih dari satu mesh layanan, pilih mesh dari menu drop-down Service Mesh.
Untuk mempelajari lebih lanjut, lihat Menjelajahi Cloud Service Mesh di konsol Google Cloud.
Pembersihan
Sebelum melakukan pembersihan, jika Anda tertarik untuk mempelajari lebih lanjut TLS bersama, lihat Cloud Service Mesh dengan contoh: mTLS.
Jika Anda ingin mempertahankan cluster dan menghapus contoh Butik Online:
Hapus namespace aplikasi:
kubectl delete -f DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
Output yang diharapkan:
namespace "ad" deleted namespace "cart" deleted namespace "checkout" deleted namespace "currency" deleted namespace "email" deleted namespace "frontend" deleted namespace "loadgenerator" deleted namespace "payment" deleted namespace "product-catalog" deleted namespace "recommendation" deleted namespace "shipping" deleted
Hapus entri layanan:
kubectl delete -f DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
Output yang diharapkan:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
Jika Anda ingin mencegah tagihan tambahan, hapus cluster:
Jalankan perintah berikut:
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Pada perintah Do you want to continue (Y/n)?, masukkan y.
Setelah beberapa menit, Anda akan melihat output berikut:
Deleting cluster CLUSTER_NAME...done. Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/CLUSTER_LOCATION/clusters/CLUSTER_NAME].
Langkah selanjutnya
- Untuk mengetahui Managed Cloud Service Mesh lebih lanjut, lihat Menyediakan Managed Cloud Service Mesh
- Untuk pengantar singkat tentang gcloud CLI yang digunakan dalam tutorial ini, lihat perintah
gcloud
- Untuk mengetahui cara menjelajahi Cloud Service Mesh di konsol Google Cloud, lihat Menjelajahi Cloud Service Mesh di konsol Google Cloud
- Untuk mempelajari fitur opsional Cloud Service Mesh, seperti Cloud Trace, image proxy distroless, dan autentikasi pengguna akhir, lihat Mengaktifkan fitur opsional di Cloud Service Mesh terkelola
- Untuk mempelajari Keamanan di Cloud Service Mesh lebih lanjut, lihat Ringkasan Keamanan Cloud Service Mesh dan Praktik Terbaik Keamanan Cloud Service Mesh
- Untuk mengetahui lebih lanjut tentang Telemetri di Cloud Service Mesh, lihat Ringkasan Observabilitas