部署 Bookinfo 範例
本頁說明如何部署範例應用程式,示範 Cloud Service Mesh。如果尚未安裝 Cloud Service Mesh,請參閱安裝指南。
安裝 Cloud Service Mesh 時,系統會提供多個範例應用程式。本指南會逐步說明如何部署 BookInfo 範例。這是一個簡單的模擬書店應用程式,包含四個服務:產品網頁、書籍詳細資料、評論 (包含數個版本的評論服務) 及評分。這些服務皆使用 Cloud Service Mesh 管理。您可以在 Cloud Service Mesh 安裝目錄的 samples/bookinfo 中,找到本範例使用的原始碼和所有其他檔案。
啟用自動注入 Sidecar
如要啟用自動補充植入功能,您必須為命名空間加上標籤,讓補充植入器 Webhook 將植入的補充與特定控制層修訂版本建立關聯。如果您設定預設代碼,請使用預設插入標籤標記命名空間。否則,請使用修訂版本標籤標記命名空間。此外,您新增的標籤也取決於您是否部署代管 Cloud Service Mesh,或是安裝叢集內控制層。
受管理
您可以為命名空間使用預設插入標籤或修訂標籤
預設插入標籤
將預設注入標籤套用至命名空間。
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如果您也部署了選用的受管理資料平面,請按照下列方式註解
NAMESPACE命名空間:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
叢集內
使用下列指令找出
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。將修訂版本標籤套用至預設命名空間。在下列指令中,
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。
在安裝 Cloud Service Mesh 的電腦上,前往 Cloud Service Mesh 安裝目錄的根層級。如有需要,請下載安裝檔。
使用
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 應用程式是否正常運作,您需要將流量傳送至 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。
試用應用程式
使用
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