部署 Bookinfo 範例

本頁說明如何部署範例應用程式,示範 Cloud Service Mesh。如果尚未安裝 Cloud Service Mesh,請參閱安裝指南

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

啟用自動注入 Sidecar

如要啟用自動補充植入功能,您必須為命名空間加上標籤,讓補充植入器 Webhook 將植入的補充與特定控制層修訂版本建立關聯。如果您設定預設代碼,請使用預設插入標籤標記命名空間。否則,請使用修訂版本標籤標記命名空間。此外,您新增的標籤也取決於您是否部署代管 Cloud Service Mesh,或是安裝叢集內控制層

受管理

  1. 您可以為命名空間使用預設插入標籤或修訂標籤

    預設插入標籤

    將預設注入標籤套用至命名空間。

    kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
    

    修訂版本標籤

    部署應用程式前,請先從命名空間移除所有先前的 istio-injection 標籤,然後設定 istio.io/rev=REVISION_LABEL 標籤。

    如要變更為特定修訂版本標籤,請按一下 REVISION_LABEL,然後將其替換為適用的標籤:asm-managed-rapid 代表快速通道、asm-managed 代表一般通道,或 asm-managed-stable 代表穩定通道。

    修訂版本標籤對應至發布管道

    修訂版本標籤 管道
    asm-managed 一般
    asm-managed-rapid 快速
    asm-managed-stable 穩定
    kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
    
  2. 如果您也部署了選用的受管理資料平面,請按照下列方式註解 NAMESPACE 命名空間:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

叢集內

  1. 使用下列指令找出 istiod 上的標籤:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    輸出看起來類似以下內容:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-173-3-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-1295-12,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-173-3-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-1295-12,istio=istiod,pod-template-hash=5788d57586
    

    在輸出內容的 LABELS 欄下方,記下 istiod 修訂版本標籤的值 (前置字串為 istio.io/rev=)。在本範例中,這個值為 asm-1295-12

  2. 將修訂版本標籤套用至預設命名空間。在下列指令中,REVISION 是您在上一步驟記下的 istiod 修訂版本標籤值。

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

    您可以忽略輸出內容中的 "istio-injection not found" 訊息。也就是說,命名空間先前沒有 istio-injection 標籤,這應該是 Cloud Service Mesh 新安裝或新部署作業的預期情況。如果命名空間同時有 istio-injection 和修訂版本標籤,自動插入行為會未定義,因此 Cloud Service Mesh 文件中的所有 kubectl label 指令都會明確確保只設定一個標籤。

部署應用程式

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

  1. 在安裝 Cloud Service Mesh 的電腦上,前往 Cloud Service Mesh 安裝目錄的根層級。如有需要,請下載安裝檔

  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 應用程式是否正常運作,您需要將流量傳送至 Ingress 閘道。

  • 如果您在 Google Distributed Cloud 上安裝 Cloud Service Mesh,請取得您在安裝 Cloud Service Mesh 後設定的 Ingress 閘道外部 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

    在本範例中,Ingress 服務的 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 範例