部署 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