Dalam tutorial ini, Anda akan menginstal Anthos Service Mesh 1.11.8-asm.4 menggunakan alat yang disediakan Google, asmcli
, di cluster Google Kubernetes Engine (GKE) baru. Tutorial ini membahas:
- Mengonfigurasi project Google Cloud Anda.
- Membuat cluster GKE dengan jumlah minimum vCPU yang diperlukan oleh Anthos Service Mesh.
- Menginstal Anthos Service Mesh dengan bidang kontrol dalam cluster.
- Men-deploy aplikasi sampel sehingga Anda dapat melihat data telemetri di dasbor Anthos Service Mesh di Konsol Google Cloud.
- Mengekspos dan mengakses aplikasi contoh.
Untuk menyederhanakan panduan memulai dan agar tidak memiliki beberapa jalur yang berbeda, pilihan berikut dibuat:
- Mengaktifkan certificate authority Anthos Service Mesh (Mesh CA)
- Men-deploy gateway masuk untuk mengekspos aplikasi
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 panduan memulai ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus cluster. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Kubernetes Engine.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Kubernetes Engine.
- Catat project ID Anda.
Meskipun Anthos Service Mesh memerlukan API lain, asmcli
akan mengaktifkannya untuk Anda. Untuk menekan biaya penagihan, skrip asmcli
tidak mengaktifkan GKE Enterprise API. Ada beberapa perbedaan kecil di Google Cloud Console saat GKE Enterprise API diaktifkan. Untuk mempelajari perbedaan ini lebih lanjut, lihat perbedaan UI GKE Enterprise dan Anthos Service Mesh.
Instal alat yang diperlukan
Anda dapat menjalankan alat ini di Cloud Shell atau di mesin lokal yang menjalankan Linux. Cloud Shell menginstal semua alat yang diperlukan. Perhatikan bahwa macOS tidak didukung karena dilengkapi dengan bash versi lama.
Cloud Shell
Cloud Shell menyediakan mesin virtual (VM) Compute Engine g1-small yang menjalankan sistem operasi Linux berbasis Debian. Keuntungan menggunakan Cloud Shell adalah:
Cloud Shell mencakup
gcloud
,kubectl
,kpt
, dan alat command line lain yang Anda butuhkan.Direktori $HOME Cloud Shell Anda memiliki ruang penyimpanan persisten sebesar 5 GB.
Anda dapat memilih editor teks:
Editor kode, yang dapat Anda akses dengan mengklik edit di bagian atas jendela Cloud Shell.
Emacs, Vim, atau Nano, yang Anda akses dari command line di Cloud Shell.
Untuk menggunakan Cloud Shell:
- Buka Konsol Google Cloud.
- Pilih project Google Cloud Anda.
Klik tombol Activate Cloud Shell di bagian atas jendela Konsol Google Cloud.
Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah Konsol Google Cloud dan menampilkan prompt command line.
Komputer Linux lokal
Pastikan Anda telah menginstal alat berikut:
- Google Cloud CLI
- Alat command line standar:
awk
,curl
,grep
,sed
, dantr
- git
- kpt
- kubectl
- jq
Lakukan autentikasi dengan gcloud CLI:
gcloud auth login
Update komponen:
gcloud components update
Pastikan
git
berada di jalur Anda sehinggakpt
dapat menemukannya.
Membuat cluster GKE
Jalankan perintah berikut untuk membuat cluster dengan jumlah minimum vCPU yang diperlukan oleh Anthos Service Mesh. Dalam perintah, ganti placeholder dengan informasi berikut:
- CLUSTER_NAME: nama cluster Anda. Nama hanya boleh berisi karakter alfanumerik dengan huruf kecil dan
-
, harus diawali dengan huruf dan diakhiri dengan alfanumerik, serta 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 pada pembuatan yang berhasil mirip dengan yang 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 dengan 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.
Setel konteks saat ini untuk
kubectl
ke cluster.kubectl config set-context CLUSTER_NAME
Output yang diharapkan:
Context "CLUSTER_NAME" created.
Unduh asmcli
Bagian ini menjelaskan cara mendownload asmcli
.
Download versi yang menginstal Anthos Service Mesh 1.11.8 ke direktori kerja saat ini:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.11 > asmcli
Output yang diharapkan:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Buat agar skrip dapat dieksekusi:
chmod +x asmcli
Menginstal Anthos Service Mesh
Jalankan alat asmcli
dengan opsi berikut untuk menginstal
Anthos Service Mesh pada cluster yang Anda buat sebelumnya. Jika Anda belum menutup halaman ini sejak membuat cluster, placeholder memiliki nilai yang Anda masukkan untuk perintah gcloud container clusters create
.
./asmcli install \
--project_id PROJECT_ID \
--cluster_name CLUSTER_NAME \
--cluster_location CLUSTER_LOCATION \
--fleet_id FLEET_PROJECT_ID \
--output_dir DIR_PATH \
--enable_all \
--ca mesh_ca
--project_id
, --cluster_name
, dan
--cluster_location
Tentukan project ID tempat cluster berada, nama cluster, dan zona atau region cluster.--fleet_id
Project ID
project host fleet. Jika opsi ini tidak disertakan,
asmcli
akan menggunakan project tempat cluster dibuat
saat mendaftarkan cluster.--output_dir
Sertakan opsi ini untuk menentukan direktori
tempat asmcli
mendownload paket
anthos-service-mesh
dan mengekstrak file penginstalan, yang
berisi istioctl
, sampel, dan manifes. Jika tidak,
asmcli
akan mendownload file ke direktori tmp
.
Anda dapat menentukan jalur relatif atau jalur lengkap. Variabel
lingkungan $PWD
tidak berfungsi di sini.
--enable_all
Mengizinkan skrip untuk:
- Memberikan izin IAM yang diperlukan.
- Mengaktifkan Google API yang diperlukan.
- Tetapkan label pada cluster yang mengidentifikasi mesh.
- Daftarkan cluster ke fleet jika belum terdaftar.
Proses penyelesaian alat asmcli
memerlukan waktu beberapa menit. Alat ini
menghasilkan pesan informasi sehingga Anda dapat mengikuti progresnya.
Output yang diharapkan setelah penginstalan berhasil:
asmcli: Successfully installed ASM.
Men-deploy gateway masuk
Anthos Service Mesh memberi Anda opsi untuk men-deploy dan mengelola gateway sebagai bagian dari mesh layanan. Gateway menjelaskan load balancer yang beroperasi di edge 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 dengan menerapkan label revisi pada namespace gateway. Label revisi digunakan oleh webhook injektor file bantuan untuk mengaitkan proxy yang dimasukkan dengan revisi bidang kontrol tertentu.
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 tersebut menghasilkan label revisi yang sesuai dengan versi Anthos Service Mesh, misalnya:
asm-1118-4
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 men-deploy contoh konfigurasi gateway masuk yang terletak di direktori
samples/gateways/istio-ingressgateway/
sebagaimana adanya, atau mengubahnya sesuai kebutuhan.kubectl apply -n GATEWAY_NAMESPACE \ -f DIR_PATH/samples/gateways/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 praktik terbaik untuk gateway lebih lanjut.
Men-deploy contoh Butik Online
Aplikasi contoh Online Boutique di repo
anthos-service-mesh-packages
dimodifikasi dari kumpulan manifes asli di
repo
microservices-demo
. Dengan mengikuti praktik terbaik, setiap layanan di-deploy dalam 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
Aktifkan injeksi file bantuan otomatis (injeksi otomatis). Label revisi yang digunakan di sini adalah label yang sama dengan yang digunakan untuk menganotasi namespace gateway masuk. 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
Deploy aplikasi sampel 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 kita deploy di atas untuk melakukannya. Untuk mengetahui cara lain mengekspos aplikasi Butik Online, lihat bagian menampilkan 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 masuk. Jika Anda men-deploy gateway contoh tanpa modifikasi, mungkin akan menjadi
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 masuk. Jika Anda men-deploy gateway contoh tanpa modifikasi, mungkin akan menjadi
Buka aplikasi pada browser Anda untuk mengonfirmasi penginstalan:
http://EXTERNAL_IP/
Lihat dasbor Service Mesh
Setelah workload di-deploy di cluster dengan proxy file bantuan dimasukkan, Anda dapat menjelajahi halaman Anthos Service Mesh di Konsol Google Cloud untuk melihat semua fitur kemampuan observasi yang ditawarkan Anthos Service Mesh. Perlu diperhatikan bahwa perlu waktu sekitar satu atau dua menit agar data telemetri ditampilkan di konsol Google Cloud setelah Anda men-deploy workload.
Akses ke Anthos Service Mesh di Konsol Google Cloud dikontrol oleh Identity and Access Management (IAM). Untuk mengakses halaman Anthos Service Mesh, Pemilik Project harus memberi pengguna peran Project Editor atau Viewer, atau peran yang lebih ketat yang dijelaskan dalam Mengontrol akses ke Anthos Service Mesh di Konsol Google Cloud.
Di konsol Google Cloud, buka Anthos 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 Anthos Service Mesh di Konsol Google Cloud.
Pembersihan
Sebelum melanjutkan pembahasan, jika Anda tertarik untuk mempelajari mutual TLS lebih lanjut, lihat Anthos 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 biaya 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
Pelajari lebih lanjut:
- Persyaratan cluster
- Opsi dan flag alat
asmcli
- Men-deploy Layanan
- Perintah
gcloud
yang digunakan dalam tutorial ini