Men-deploy aplikasi contoh Butik Online
Panduan ini menjelaskan cara menginstal aplikasi contoh Online Boutique untuk mendemonstrasikan Anthos Service Mesh. Jika Anda belum menginstal Anthos Service Mesh, lihat panduan penginstalan.
Mendownload dan men-deploy contoh
Untuk men-deploy aplikasi, Anda harus mendownload manifes Butik Online
terlebih dahulu dari repositori anthos-service-mesh-packages
menggunakan kpt
. Aplikasi contoh Butik Online dalam 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.
Instal
kpt
jika Anda belum melakukannya:gcloud components install kpt
Download contoh menggunakan
kpt
:kpt pkg get \ https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \ online-boutique
Output yang diharapkan
Package "online-boutique": Fetching https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages@main From https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages * branch main -> FETCH_HEAD Adding package "samples/online-boutique". Fetched 1 package(s).
Buka direktori
online-boutique
:cd online-boutique
Buat namespace untuk aplikasi:
kubectl apply -f 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
Deploy sampel ke cluster.
Buat akun layanan dan deployment:
kubectl apply -f 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 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 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
Mengaktifkan injeksi otomatis file bantuan
Untuk mengaktifkan injeksi otomatis, beri label namespace dengan label injeksi default jika tag default sudah disiapkan, atau dengan label revisi ke namespace Anda. Label yang Anda tambahkan juga bergantung pada apakah Anda men-deploy Anthos Service Mesh terkelola atau menginstal bidang kontrol dalam cluster. Label digunakan oleh webhook injektor sidecar untuk mengaitkan file bantuan yang dimasukkan dengan revisi bidang kontrol tertentu.
Dalam cluster
Gunakan perintah berikut untuk menemukan label 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-1204-0
Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, REVISION adalah nilai label revisi
istiod
yang Anda catat di langkah sebelumnya.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
Mulai ulang pod:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Output yang diharapkan:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Mesh layanan terkelola
Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, label REVISION harus berupa nilai saluran rilis Anthos Service Mesh terkelola Anda:
asm-managed
untuk reguler,asm-managed-rapid
untuk cepat, atauasm-managed-stable
untuk stabil.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
Jika Anda juga men-deploy bidang data terkelola opsional, beri anotasi pada namespace aplikasi sebagai berikut:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl annotate --overwrite namespace $ns mesh.cloud.google.com/proxy='{"managed":"true"}' done;
Mulai ulang pod:
for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl rollout restart deployment -n ${ns} done;
Output yang diharapkan:
deployment.apps/adservice restarted deployment.apps/cartservice restarted deployment.apps/checkoutservice restarted deployment.apps/currencyservice restarted deployment.apps/emailservice restarted deployment.apps/frontend restarted deployment.apps/loadgenerator restarted deployment.apps/paymentservice restarted deployment.apps/productcatalogservice restarted deployment.apps/recommendationservice restarted deployment.apps/shippingservice restarted
Mengekspos dan mengakses aplikasi
Cara mengekspos aplikasi di luar mesh bergantung pada apakah Anda men-deploy gateway masuk atau tidak. Anda dapat memilih untuk mengekspos aplikasi menggunakan gateway ingress istio atau menggunakan Layanan Kubernetes.
Menggunakan gateway masuk
Jika Anda men-deploy gateway masuk ke cluster seperti yang ditentukan dalam prasyarat, lakukan langkah-langkah berikut untuk mengekspos aplikasi menggunakan gateway.
Men-deploy
Gateway
danVirtualService
untuk layanan frontendkubectl apply -f 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 ingress gateway. Jika Anda men-deploy gateway contoh tanpa modifikasi, atau jika Anda men-deploy gateway masuk default, namanya adalah
istio-ingressgateway
.GATEWAY_NAMESPACE: Namespace tempat Anda men-deploy gateway masuk. Jika Anda men-deploy gateway masuk default, namespace-nya adalah
istio-system
.
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
.Buka aplikasi pada browser Anda untuk mengonfirmasi penginstalan:
http://EXTERNAL_IP/
Tidak ada gateway masuk
Jika Anda tidak men-deploy gateway masuk atau memilih untuk mengekspos aplikasi menggunakan Layanan Kubernetes, lakukan langkah-langkah berikut:
Deploy layanan jenis
LoadBalancer
untuk menampilkan layanan frontendkubectl apply -f frontend-external.yaml
Temukan alamat IP eksternal layanan
frontend-external
:kubectl get service frontend-external -n frontend
Buka aplikasi pada browser Anda untuk mengonfirmasi penginstalan:
http://EXTERNAL_IP/
Anda dapat menjelajahi fitur kemampuan observasi Anthos Service Mesh di Konsol Google Cloud. Perhatikan bahwa perlu waktu hingga 10 menit agar grafik topologi menampilkan layanan di mesh Anda.
Pembersihan
Sebelum menghapus Butik Online, sebaiknya lakukan pekerjaan melalui Anthos Service Mesh dengan contoh: mTLS, yang menggunakan contoh tersebut. Setelah selesai menjelajah, gunakan perintah berikut untuk menghapus contoh Butik Online:
Hapus namespace aplikasi:
kubectl delete -f 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 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