部署 Online Boutique 範例應用程式

本指南說明如何安裝 Online Boutique 範例應用程式,展示 Cloud Service Mesh。如需佈建 Cloud Service Mesh,請參閱佈建指南

下載及部署範例

如要部署應用程式,請先使用 kptanthos-service-mesh-packages 存放區下載 Online Boutique 資訊清單。anthos-service-mesh-packages 存放區中的 Online Boutique 範例應用程式,是根據 microservices-demo 存放區中的原始資訊清單集修改而成。根據最佳做法,每項服務都會部署在獨立的命名空間中,並使用專屬的服務帳戶。

  1. 如果尚未安裝 kpt,請先完成這項程序:

    gcloud components install kpt
    
  2. 使用 kpt 下載範例:

    kpt pkg get \
      https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/samples/online-boutique \
      online-boutique
    

    預期的輸出內容:

    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. 請前往 online-boutique 目錄:

    cd online-boutique
    
  4. 為應用程式建立命名空間:

    kubectl apply -f kubernetes-manifests/namespaces
    

    預期輸出內容:

    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. 將範例部署至叢集。

    1. 建立服務帳戶和部署作業:

      kubectl apply -f kubernetes-manifests/deployments
      

      預期輸出內容:

      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. 建立服務:

      kubectl apply -f kubernetes-manifests/services
      

      預期輸出內容:

      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. 建立服務項目:

      kubectl apply -f istio-manifests/allow-egress-googleapis.yaml
      

      預期輸出內容:

      serviceentry.networking.istio.io/allow-egress-googleapis created
      serviceentry.networking.istio.io/allow-egress-google-metadata created
      

啟用自動注入 Sidecar

  1. 將預設插入標籤套用至應用程式命名空間。

    for ns in ad cart checkout currency email frontend loadgenerator \
       payment product-catalog recommendation shipping; do
          kubectl label namespace $ns istio-injection=enabled --overwrite
    done;
    

    預期輸出內容:

    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. 如果您使用代管 Cloud Service Mesh,並部署選用的代管資料層,請按照下列方式為應用程式命名空間加上註解:

    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. 重新啟動 Pod:

    for ns in ad cart checkout currency email frontend loadgenerator \
       payment product-catalog recommendation shipping; do
          kubectl rollout restart deployment -n ${ns}
    done;
    

    預期輸出內容:

    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
    

公開及存取應用程式

在網格外部公開應用程式的方式,取決於您是否部署了 Ingress 閘道。您可以選擇使用 Istio 輸入閘道或使用 Kubernetes 服務公開應用程式。

使用 Ingress 閘道

如果您已按照必要條件的規定,將 Ingress 閘道部署至叢集,請按照下列步驟使用閘道公開應用程式。

  1. 為前端服務部署 GatewayVirtualService

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

    預期輸出內容:

    gateway.networking.istio.io/frontend-gateway created
    virtualservice.networking.istio.io/frontend-ingress created
    
  2. 取得Ingress 閘道的外部 IP 位址。 將預留位置替換為下列資訊:

    • GATEWAY_SERVICE_NAME:Ingress 閘道服務的名稱。如果您部署範例閘道時未進行修改,或是部署預設 Ingress 閘道,名稱為 istio-ingressgateway

    • GATEWAY_NAMESPACE:部署 Ingress 閘道的命名空間。如果您部署了預設的 Ingress 閘道,命名空間為 istio-system

    kubectl get service GATEWAY_SERVICE_NAME  -n GATEWAY_NAMESPACE
    

    輸出內容類似如下:

    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
    

    在本範例中,Ingress 閘道的 IP 位址為 35.239.7.64

  3. 在瀏覽器中前往應用程式,確認安裝是否成功:

    http://EXTERNAL_IP/
    

沒有輸入閘道

如果您未部署 Ingress 閘道,或選擇使用 Kubernetes Service 公開發布應用程式,請按照下列步驟操作:

  1. 部署 LoadBalancer 類型的服務,公開前端服務

    kubectl apply -f frontend-external.yaml
    
  2. 找出 frontend-external 服務的外部 IP 位址:

    kubectl get service frontend-external -n frontend
    
  3. 在瀏覽器中前往應用程式,確認安裝是否成功:

    http://EXTERNAL_IP/
    

您可以在 Google Cloud 控制台中探索 Cloud Service Mesh 可觀測性功能。請注意,拓撲圖最多可能需要 10 分鐘,才會顯示網格中的服務。

清除所用資源

刪除 Online Boutique 前,建議先完成「Anthos Service Mesh by example: mTLS」(Anthos 服務網格範例:mTLS),其中會使用這個範例。探索完畢後,請使用下列指令移除 Online Boutique 範例:

  1. 刪除應用程式命名空間:

    kubectl delete -f kubernetes-manifests/namespaces
    

    預期輸出內容:

    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. 刪除服務項目:

    kubectl delete -f istio-manifests/allow-egress-googleapis.yaml
    

    預期輸出內容:

    serviceentry.networking.istio.io "allow-egress-googleapis" deleted
    serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
    

後續步驟