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 Online Boutique dari repo anthos-service-mesh-packages menggunakan kpt terlebih dahulu. 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.

  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 sampel 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 injeksi otomatis sidecar

Untuk mengaktifkan injeksi otomatis, Anda harus memberi label pada namespace dengan label injeksi 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 injector sidecar untuk mengaitkan sidecar yang dimasukkan 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 menghasilkan label revisi yang sesuai dengan versi Cloud Service Mesh, misalnya: asm-1157-23

  2. 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
    
  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 yang dikelola: 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 bidang data terkelola opsional, anotasikan 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 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 traffic masuk

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

  1. Men-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 masuk. Ganti placeholder dengan informasi berikut:

    • GATEWAY_SERVICE_NAME : Nama layanan gateway entrance. Jika Anda men-deploy gateway contoh tanpa perubahan, 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 entrance 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.

  3. Buka aplikasi di browser Anda untuk mengonfirmasi penginstalan:

    http://EXTERNAL_IP/
    

Tidak ada gateway masuk

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

  1. Men-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. Buka aplikasi di browser Anda untuk mengonfirmasi penginstalan:

    http://EXTERNAL_IP/
    

Anda dapat menjelajahi fitur kemampuan observasi Cloud Service Mesh di konsol Google Cloud. Perhatikan bahwa perlu waktu hingga 10 menit agar grafik topologi menampilkan layanan di mesh Anda.

Pembersihan

Sebelum menghapus Online Boutique, sebaiknya Anda mempelajari Cloud Service Mesh dengan 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?