部署 Bookinfo 範例

本頁面說明如何部署範例應用程式,以示範 Cloud Service Mesh。如果您尚未導入 Cloud Service Mesh,請參閱新手上路指南

Cloud Service Mesh 安裝程序會隨附多個範例應用程式。本指南會逐步引導您部署 BookInfo 範例。這是一個簡單的模擬書店應用程式,包含四個服務:產品網頁、書籍詳細資料、評論 (包含數個版本的評論服務) 及評分。這些服務皆使用 Cloud Service Mesh 管理。您可以在 samples/bookinfo 中 Cloud Service Mesh 安裝檔的目錄中找到本範例使用的原始碼和所有其他檔案。

啟用補充自動注入功能

  1. 啟用要用於插入的命名空間。步驟取決於控制層實作

    代管 (TD)

    1. 將預設的注入標籤套用至命名空間:
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    受管理 (Istiod)

    建議做法:執行下列指令,將預設注入標籤套用至命名空間:

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    如果您是現有的 Managed Istiod 控制平面使用者:建議您使用預設插入作業,但系統也支援以修訂版本為基礎的插入作業。請按照下列操作說明進行:

    1. 執行下列指令,找出可用的發布版本:

      kubectl -n istio-system get controlplanerevision
      

      輸出結果會與下列內容相似:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      注意:如果上述清單中顯示兩個控制層修訂版本,請移除其中一個。叢集中不支援多個控制平面管道。

      在輸出內容中,NAME 欄下方的值是修訂版本標籤,對應至 Cloud Service Mesh 版本的發布管道

    2. 將修訂版本標籤套用至命名空間:

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    叢集內

    建議做法:執行下列指令,將預設注入標籤套用至命名空間:

      kubectl label namespace default \
          istio.io/rev- istio-injection=enabled --overwrite
    

    建議您使用預設插入方式,但系統也支援以修訂版本為基礎的插入方式: 請按照下列操作說明操作:

    1. 使用下列指令,找出 istiod 上的修訂版本標籤:

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. 將修訂標籤套用至命名空間。在下列指令中,REVISION_LABEL 是您在上一個步驟中記下的 istiod 修訂版本標籤值。

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

部署應用程式

由於 default 命名空間已啟用自動注入功能,因此在您部署 BookInfo 應用程式的服務時,系統會在每個服務旁邊注入補充 Proxy。

  1. 在已安裝 Cloud Service Mesh 的電腦上,使用指令列前往 Cloud Service Mesh 安裝目錄的根目錄。如有需要,請下載叢集內安裝檔案 (內含 BookInfo 範例應用程式),然後解壓縮。

  2. 使用 kubectl 將應用程式部署至預設命名空間:

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. 執行下列指令,確認應用程式已正確部署:

    kubectl get services
    

    輸出:

    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    kubectl get pod
    

    輸出:

    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. 最後,為應用程式定義輸入閘道轉送:

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    

    輸出:

    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created

驗證應用程式部署作業

如要查看 BookInfo 應用程式是否正常運作,您必須將流量傳送至入口網關。

  • 如果您在 VMware 適用的 Google Distributed Cloud (僅限軟體) 上安裝 Cloud Service Mesh,請取得安裝 Cloud Service Mesh 後設定的入口網關外部 IP 位址

  • 如果您已在 GKE 上安裝 Cloud Service Mesh,請按照下列步驟取得輸入閘道的外部 IP 位址:

    kubectl get service istio-ingressgateway -n istio-system
    

    輸出:

    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

    在這個範例中,輸入服務的 IP 位址為 35.239.7.64

試用應用程式

  1. 使用 curl 檢查 BookInfo 應用程式是否正在執行:

    curl -I http://EXTERNAL_IP/productpage
    

    如果回應顯示 200,表示應用程式正常運作 Cloud Service Mesh。

  2. 如要查看 BookInfo 網頁,請在瀏覽器中輸入下列網址:

    http://EXTERNAL_IP/productpage
    

    請重新整理頁面幾次,你應該會看到產品頁面中顯示不同版本的評論,以循環配置方式呈現 (紅色星號、黑色星號、無星號)。

應用程式現在會產生流量,您可以前往 Google Cloud 主控台探索 Cloud Service Mesh 頁面,查看指標和其他可觀察性功能。

正在清除所用資源

實驗 Bookinfo 範例後,請從叢集中移除該範例。

  1. 使用下列指令碼解除安裝 Bookinfo:

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. 確認關機:

    kubectl get virtualservices   #-- there should be no virtual services
    kubectl get destinationrules  #-- there should be no destination rules
    kubectl get gateway           #-- there should be no gateway
    kubectl get pods              #-- the Bookinfo pods should be deleted
    

後續步驟

進一步瞭解 Bookinfo 範例