Men-deploy aplikasi contoh Butik Online

Panduan ini menjelaskan cara menginstal aplikasi contoh Butik Online untuk mendemonstrasikan Cloud Service Mesh. Jika Anda belum menginstal Cloud Service Mesh, lihat panduan penginstalan.

Mendownload dan men-deploy contoh

Untuk men-deploy aplikasi, Anda harus mendownload manifes Butik Online dari repo anthos-service-mesh-packages menggunakan kpt terlebih dahulu. Aplikasi contoh Butik Online di anthos-service-mesh-packages repo diubah dari kumpulan manifes asli di microservices-demo repo. Mengikuti praktik terbaik, setiap layanan di-deploy di namespace terpisah dengan akun layanan unik.

  1. Instal kpt jika Anda belum melakukannya:

    gcloud components install kpt
    
  2. 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).
    
  3. Buka direktori online-boutique:

    cd online-boutique
    
  4. 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
    
  5. Deploy contoh ke cluster.

    1. 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
      
    2. 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
      
    3. 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 penyisipan otomatis sidecar

Untuk mengaktifkan penyisipan otomatis, Anda memberi label pada namespace dengan label penyisipan default jika tag default disiapkan, atau dengan label revisi ke namespace Anda. Label yang Anda tambahkan juga bergantung pada apakah Anda men-deploy Cloud Service Mesh terkelola atau menginstal bidang kontrol dalam cluster. Label ini digunakan oleh webhook penyisip sidecar untuk mengaitkan sidecar yang disisipkan dengan revisi bidang kontrol tertentu.

Dalam cluster

  1. 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 ini menampilkan label revisi yang sesuai dengan versi Cloud Service Mesh, misalnya: asm-11910-9

  2. Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, REVISION adalah nilai label revisi istiod yang Anda catat pada 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
    
  3. 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

  1. Terapkan label revisi ke namespace aplikasi. Dalam perintah berikut, label REVISION harus berupa nilai saluran rilis Cloud Service Mesh terkelola Anda: asm-managed untuk reguler, asm-managed-rapid untuk cepat, atau asm-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
    
  2. Jika Anda juga men-deploy data plane 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;
    
  3. 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 Anda mengekspos aplikasi di luar mesh bergantung pada apakah Anda men-deploy gateway ingress. Anda dapat memilih untuk mengekspos aplikasi menggunakan gateway ingress istio atau menggunakan Layanan Kubernetes.

Menggunakan gateway ingress

Jika Anda men-deploy gateway ingress ke cluster seperti yang ditentukan dalam prasyarat, lakukan langkah-langkah berikut untuk mengekspos aplikasi menggunakan gateway.

  1. Deploy Gateway dan VirtualService untuk layanan frontend

    kubectl apply -f istio-manifests/frontend-gateway.yaml
    

    Output yang diharapkan:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. Dapatkan alamat IP eksternal gateway ingress. Ganti placeholder dengan informasi berikut:

    • GATEWAY_SERVICE_NAME : Nama layanan gateway ingress. Jika Anda men-deploy gateway contoh tanpa modifikasi, atau jika Anda men-deploy gateway ingress default, namanya adalah istio-ingressgateway.

    • GATEWAY_NAMESPACE: Namespace tempat Anda men-deploy gateway ingress. Jika Anda men-deploy gateway ingress 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 ingress adalah 35.239.7.64.

  3. Kunjungi aplikasi di browser Anda untuk mengonfirmasi penginstalan:

    http://EXTERNAL_IP/
    

Tidak ada gateway ingress

Jika Anda tidak men-deploy gateway ingress atau memilih untuk mengekspos aplikasi menggunakan Layanan Kubernetes, lakukan langkah-langkah berikut:

  1. Deploy layanan jenis LoadBalancer untuk mengekspos layanan frontend

    kubectl apply -f frontend-external.yaml
    
  2. Temukan alamat IP eksternal layanan frontend-external:

    kubectl get service frontend-external -n frontend
    
  3. Kunjungi aplikasi di browser Anda untuk mengonfirmasi penginstalan:

    http://EXTERNAL_IP/
    

Anda dapat menjelajahi fitur observabilitas Cloud Service Mesh di Google Cloud konsol. Perhatikan bahwa grafik topologi dapat memerlukan waktu hingga 10 menit untuk menampilkan layanan di mesh Anda.

Pembersihan

Sebelum menghapus Butik Online, sebaiknya Anda mempelajari Cloud Service Mesh berdasarkan contoh: mTLS, yang menggunakan contoh. Setelah selesai menjelajahi, gunakan perintah berikut untuk menghapus contoh Butik Online:

  1. 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
    
  2. 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
    

Apa langkah selanjutnya?