部署 Bookinfo 範例
本頁面說明如何部署範例應用程式,以示範 Cloud Service Mesh。如果您尚未導入 Cloud Service Mesh,請參閱新手上路指南。
Cloud Service Mesh 安裝程序會隨附多個範例應用程式。本指南會逐步引導您部署 BookInfo 範例。這是一個簡單的模擬書店應用程式,包含四個服務:產品網頁、書籍詳細資料、評論 (包含數個版本的評論服務) 及評分。這些服務皆使用 Cloud Service Mesh 管理。您可以在 samples/bookinfo 中 Cloud Service Mesh 安裝檔的目錄中找到本範例使用的原始碼和所有其他檔案。
啟用補充自動注入功能
- 啟用要用於插入的命名空間。步驟取決於控制層實作。 - 代管 (TD)- 將預設的注入標籤套用至命名空間:
 - 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 控制平面使用者:建議您使用預設插入作業,但系統也支援以修訂版本為基礎的插入作業。請按照下列操作說明進行: - 執行下列指令,找出可用的發布版本: - kubectl -n istio-system get controlplanerevision- 輸出結果會與下列內容相似: - NAME AGE asm-managed-rapid 6d7h- 注意:如果上述清單中顯示兩個控制層修訂版本,請移除其中一個。叢集中不支援多個控制平面管道。 - 在輸出內容中, - NAME欄下方的值是修訂版本標籤,對應至 Cloud Service Mesh 版本的發布管道。
- 將修訂版本標籤套用至命名空間: - kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
 - 叢集內- 建議做法:執行下列指令,將預設注入標籤套用至命名空間: - kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite- 建議您使用預設插入方式,但系統也支援以修訂版本為基礎的插入方式: 請按照下列操作說明操作: - 使用下列指令,找出 - istiod上的修訂版本標籤:- kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
- 將修訂標籤套用至命名空間。在下列指令中, - REVISION_LABEL是您在上一個步驟中記下的- istiod修訂版本標籤值。- kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
 
部署應用程式
由於 default 命名空間已啟用自動注入功能,因此在您部署 BookInfo 應用程式的服務時,系統會在每個服務旁邊注入補充 Proxy。
- 在已安裝 Cloud Service Mesh 的電腦上,使用指令列前往 Cloud Service Mesh 安裝目錄的根目錄。如有需要,請下載叢集內安裝檔案 (內含 BookInfo 範例應用程式),然後解壓縮。 
- 使用 - kubectl將應用程式部署至預設命名空間:- kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
- 執行下列指令,確認應用程式已正確部署: - 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 
- 最後,為應用程式定義輸入閘道轉送: - 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。
試用應用程式
- 使用 - curl檢查 BookInfo 應用程式是否正在執行:- curl -I http://EXTERNAL_IP/productpage- 如果回應顯示 - 200,表示應用程式正常運作 Cloud Service Mesh。
- 如要查看 BookInfo 網頁,請在瀏覽器中輸入下列網址: - http://EXTERNAL_IP/productpage- 請重新整理頁面幾次,你應該會看到產品頁面中顯示不同版本的評論,以循環配置方式呈現 (紅色星號、黑色星號、無星號)。 
應用程式現在會產生流量,您可以前往 Google Cloud 主控台探索 Cloud Service Mesh 頁面,查看指標和其他可觀察性功能。
正在清除所用資源
實驗 Bookinfo 範例後,請從叢集中移除該範例。
- 使用下列指令碼解除安裝 Bookinfo: - samples/bookinfo/platform/kube/cleanup.sh
- 確認關機: - 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