GSP654
總覽
Istio 是一套開放原始碼框架,可用來連結、保護及管理微服務。除了託管於 Kubernetes 叢集的服務外,這套框架也能搭配任何服務。您不必修改服務程式碼,即可為部署的服務建立網路,並導入負載平衡、服務對服務驗證和監控等功能。
舉例來說,在可靠的分散式系統中,系統通常會在要求失敗後重試,並視情況加上指數輪詢延遲時間。目前 Java、Golang 和 NodeJS 都有程式庫能執行上述作業,但如果將這些程式庫整合進應用程式,就代表每個程式都必須自行解決這類問題。這種情況下,不妨交由 Istio Sidecar 自動代勞。
Cloud Service Mesh
Cloud Service Mesh (ASM) 採用 Istio 技術,提供經過企業測試、享有完整支援的發行版 Istio。無論您是在 Google Cloud 或地端部署環境執行叢集,都能透過 GKE Enterprise 建立並部署服務網格。
您可以運用隨附的設定檔,直接套用專為 Google Kubernetes Engine 或 GKE on Bare Metal 調整好的建議設定。
最後,Cloud Service Mesh 還有一系列額外功能與工具,可助您以統合的方式觀測及管理安全可靠的服務:
- 網格中 GKE 叢集內的 HTTP(S) 流量服務指標和記錄,會自動擷取至 Google Cloud。
-
預先設定的服務資訊主頁會顯示關鍵資訊,方便您掌握服務的運作情形。
- 詳盡的遙測資料有助於深入分析指標和記錄,並根據各種屬性篩選及劃分資料。
-
服務間的關係一目瞭然,您可以快速掌握各項服務的連線情形與依附關係。
-
服務水準目標 (SLO) 反映服務的健康狀態。您可以輕鬆定義 SLO,並按照自己的服務健康標準設定警告。
如果想在 GKE Enterprise 叢集導入 Istio 服務網格,Cloud Service Mesh 是最簡單、功能最完備的方式。
本實驗室中,您將在 GKE 叢集安裝 Cloud Service Mesh。
課程內容
在本實驗室中,您將瞭解如何執行下列工作:
- 在 Google Kubernetes Engine (GKE) 佈建叢集
- 安裝及設定 Cloud Service Mesh
- 部署支援 Istio 的 Bookinfo 多服務應用程式
- 使用 Istio Ingress 閘道啟用外部存取權
- 使用 Bookinfo 應用程式
- 運用 Cloud Service Mesh 資訊主頁監控服務效能
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始實驗室及登入 Google Cloud 控制台
-
按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 此實驗室所需的臨時憑證 (使用者名稱和密碼)
- 完成此實驗室所需的其他資訊 (如有)
請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。
-
按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗並排開啟分頁。
注意:頁面顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab setup and access」面板找到「Username」。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab setup and access」面板找到「Password」。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
繼續點按後續頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請按一下「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
工作 1:設定專案
檢查 SDK 設定
-
在 Cloud Shell,確認預設帳戶已設定完成。
請確認 Cloud SDK 已設為使用 Qwiklabs 產生的使用者帳戶。
gcloud config list
輸出內容:
[component_manager]
disable_update_check = True
[compute]
gce_metadata_read_timeout_sec = 5
[core]
account = student-xx-xxxx@qwiklabs.net
disable_usage_reporting = False
project = qwiklabs-gcp-yy-####
[metrics]
environment = devshell
Your active configuration is: [cloudshell-#####]
-
視情況更新專案設定。
如果 SDK 未正確設定預設專案,則須更新設定。請查看 Qwiklabs 操作說明頁面的「憑證」部分,將 [project_id] 改成該處顯示的專案名稱:
gcloud config set project [project_id]
設定環境變數
- 配置後續設定和安裝指令所需的環境變數:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} \
--format="value(projectNumber)")
export CLUSTER_NAME=central
export CLUSTER_ZONE={{{project_0.default_zone | zone}}}
export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog
export MESH_ID="proj-${PROJECT_NUMBER}"
注意:
-
WORKLOAD_POOL 會用來啟用 Workload Identity 功能,這是從 GKE 應用程式安全存取 Google Cloud 服務的建議做法。
-
MESH_ID 會設定叢集的 mesh_id 標籤,這樣指標才會顯示於 Cloud 控制台的 Cloud Service Mesh 資訊主頁。
檢查權限是否足夠
- 在 Cloud Shell,確認您的使用者帳戶已獲派「擁有者」角色:
gcloud projects get-iam-policy $PROJECT_ID \
--flatten="bindings[].members" \
--filter="bindings.members:user:$(gcloud config get-value core/account 2>/dev/null)"
輸出內容:
bindings:
members: user:student-xx-xxxx@qwiklabs.net
role: roles/owner
...
注意:本實驗室提供的學生使用者帳戶也擁有「檢視者」權限。
注意:為順利完成設定,您需要與下列角色相關聯的權限:
- 專案編輯者
- Kubernetes Engine 管理員
- 專案 IAM 管理員
- GKE Hub 管理員
- 服務帳戶管理員
- 服務帳戶金鑰管理員
只要具備「擁有者」角色,就代表已取得上述所有權限及其他更多權限,可以繼續進行下一步。
工作 2:設定 GKE 叢集
建立叢集
- 在 Cloud Shell 執行下列指令,建立 Kubernetes 叢集
central:
gcloud config set compute/zone ${CLUSTER_ZONE}
gcloud container clusters create ${CLUSTER_NAME} \
--machine-type=e2-standard-4 \
--num-nodes=4 \
--subnetwork=default \
--release-channel=regular \
--labels mesh_id=${MESH_ID} \
--workload-pool=${WORKLOAD_POOL} \
--logging=SYSTEM,WORKLOAD
輸出內容:
NAME: central
LOCATION: {{{project0.default_zone | zone}}}
MASTER_VERSION: 1.35.3-gke.2190000
MASTER_IP: 35.245.2.147
MACHINE_TYPE: e2-standard-4
NODE_VERSION: 1.35.3-gke.2190000
NUM_NODES: 4
STATUS: RUNNING
叢集可能需要幾分鐘才會建立完成。
- 叢集建立完成後,執行下列指令來啟用
機群服務網格、設定管理員權限,並建立 istio-system 命名空間。
gcloud container fleet mesh enable
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user=$(gcloud config get-value account)
kubectl create namespace istio-system
- 設定 kubectl 以指向叢集。
gcloud container clusters get-credentials ${CLUSTER_NAME} \
--zone $CLUSTER_ZONE \
--project $PROJECT_ID
工作 3:準備安裝 Cloud Service Mesh
Google 提供 asmcli 工具,協助您安裝或升級 Cloud Service Mesh。獲得您的授權後,asmcli 就能為專案和叢集進行下列設定:
- 授予您 Google Cloud 專案的必要 Identity and Access Management (IAM) 權限。
- 在 Cloud 專案啟用必要的 Google API。
- 為叢集加上標籤來識別網格。
- 建立服務帳戶,讓 Sidecar Proxy 等資料層元件能安全存取專案的資料與資源。
- 將叢集註冊至機群 (如尚未註冊)。
現在,您要使用 asmcli 在叢集安裝 Cloud Service Mesh。
- 將 Cloud Service Mesh 1.28 安裝版本下載至目前使用的目錄:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.28 > asmcli
- 將指令碼設為執行檔:
chmod +x asmcli
- 啟用 Service Mesh API:
gcloud services enable mesh.googleapis.com
工作 4:驗證 Cloud Service Mesh 相關設定
您可以執行 asmcli validate,確認專案和叢集設定是否符合安裝 Cloud Service Mesh 的要求。只要使用這個方法,asmcli 就不會變更專案或叢集的設定,也不會安裝 Cloud Service Mesh。
asmcli 會驗證下列項目:
- 作業環境具備所需工具。
- 叢集符合基本規定。
- 您已取得指定專案的必要權限。
- 專案已啟用所有必要的 Google API。
- 執行下列指令來驗證設定,並將安裝檔和
asm 套件下載至 OUTPUT_DIR 目錄:
./asmcli validate \
--project_id $PROJECT_ID \
--cluster_name $CLUSTER_NAME \
--cluster_location $CLUSTER_ZONE \
--fleet_id $PROJECT_ID \
--output_dir ./asm_output
注意:請忽略任何驗證錯誤,因為這個步驟只是為了確認叢集具備安裝 ASM 的所有必要元件,而非確認 ASM 是否已正確安裝。
成功後,輸出結果應該會類似下方:
asmcli: Setting up necessary files...
asmcli: Using asm_kubeconfig as the kubeconfig...
asmcli: Checking installation tool dependencies...
asmcli: Fetching/writing GCP credentials to kubeconfig file...
asmcli: Verifying connectivity (10s)...
asmcli: kubeconfig set to asm_kubeconfig
asmcli: using context gke_example-project-12345_us-west1_cluster-2
asmcli: Getting account information...
asmcli: Downloading ASM..
asmcli: Downloading ASM kpt package...
fetching package "/asm" from "https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages" to "asm"
asmcli: Checking required APIs...
asmcli: Checking for project example-project-12345...
asmcli: Reading labels for us-west1/cluster-2...
asmcli: Checking for istio-system namespace...
asmcli: Confirming node pool requirements for example-project-12345/us-west1/cluster-2...
asmcli: Checking Istio installations...
asmcli: [WARNING]: There is no way to validate that the meshconfig API has been initialized.
asmcli: [WARNING]: This needs to happen once per GCP project. If the API has not been initialized
asmcli: [WARNING]: for example-project-12345, please re-run this tool with the --enable_gcp_components
asmcli: [WARNING]: flag. Otherwise, installation will succeed but Cloud Service Mesh
asmcli: [WARNING]: will not function correctly.
asmcli: Successfully validated all requirements to install ASM.
注意:本實驗室會提供必要旗標,協助您處理驗證指令出現的警告。
工作 5:安裝 Cloud Service Mesh
接著,您將執行下列指令來安裝 Cloud Service Mesh。這裡使用「--enable_all」旗標的目的,是讓指令碼能啟用所需的 Google API、設定 Identity and Access Management 權限,以及對叢集進行必要更新 (包括啟用 GKE Workload Identity):
- 執行下列指令來安裝 Cloud Service Mesh:
./asmcli install \
--project_id $PROJECT_ID \
--cluster_name $CLUSTER_NAME \
--cluster_location $CLUSTER_ZONE \
--fleet_id $PROJECT_ID \
--output_dir ./asm_output \
--enable_all \
--option legacy-default-ingressgateway \
--ca mesh_ca \
--enable_gcp_components
輸出結果應該會類似下方:
asmcli: *****************************
asmcli: Successfully installed ASM.
點選「Check my progress」,確認目標已達成。安裝 Cloud Service Mesh
安裝 Ingress 閘道
使用 Cloud Service Mesh 時,您可以選擇將閘道做為服務網格的一部分來部署及管理。閘道是指在網格邊緣運作的負載平衡器,負責接收傳入或傳出網格的 HTTP/TCP 連線。換句話說,閘道其實就是 Envoy Proxy,能讓您精細控管進出網格的流量。
- 如果尚未建立命名空間,請先為 Ingress 閘道建立一個。閘道屬於使用者工作負載,建議不要部署於控制層命名空間。
GATEWAY_NS=istio-gateway
kubectl create namespace $GATEWAY_NS
-
接著要在閘道命名空間套用修訂版本標籤,為閘道啟用自動插入功能。Sidecar 插入程式 Webhook 會使用這個標籤,將插入的 Proxy 與特定控制層修訂版本建立關聯。
- 使用下列指令,找出
istiod 的修訂版本標籤:
kubectl get deploy -n istio-system -l app=istiod -o \
jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
REVISION=$(kubectl get deploy -n istio-system -l app=istiod -o \
jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
- 將修訂版本標籤套用至命名空間。在下列指令中,REVISION 代表您在上一步記下的 istiod 修訂版本標籤值:
kubectl label namespace $GATEWAY_NS \
istio.io/rev=$REVISION --overwrite
kubectl label namespace default istio-injection=enabled
kubectl label namespace $GATEWAY_NS istio-injection=enabled
-
切換至您在 --output_dir 指定的目錄:
cd ~/asm_output
- 您可以直接部署
samples/gateways/istio-ingressgateway/ 目錄中的範例 Ingress 閘道設定,也能視需求自行修改:
kubectl apply -n $GATEWAY_NS \
-f samples/gateways/istio-ingressgateway
啟用 Sidecar Proxy 插入功能
Cloud Service Mesh 採用 Sidecar Proxy 來強化網路的安全、穩定和可觀測性。使用這個解決方案,就不必在應用程式的主要容器中實作上述功能,可以改由通用的獨立處理程序 Proxy 執行。這個 Proxy 會以獨立容器的形式,與應用程式部署在同一個 Pod 中。
-
部署工作負載前,記得先設定 Sidecar Proxy 插入功能,Cloud Service Mesh 才能監控並保護流量。
-
套用修訂版本標籤並移除 istio-injection 標籤 (如有),以啟用自動插入功能。
-
執行下列指令,將 default 指定為要啟用自動插入功能的命名空間,REVISION 是您在上一步記下的修訂版本標籤值:
kubectl label namespace default istio-injection-istio.io/rev=$REVISION --overwrite
注意:如果輸出內容出現 "istio-injection" not found 訊息,直接忽略即可。這表示該命名空間先前並未設定 istio-injection 標籤,在初次安裝 Cloud Service Mesh 或剛開始部署時,看到這則訊息很正常。
注意:Sidecar Proxy 插入功能現已啟用,僅適用於之後的工作負載。
如果這個叢集已經有執行中的工作負載,則必須重新啟動 Pod,才會重新觸發自動插入功能。
工作 6:部署支援 Istio 的 Bookinfo 多服務應用程式
在這項工作中,您將設定 Bookinfo 範例微服務應用程式,並實際操作。
Bookinfo 總覽
ASM 設定完成並確認無誤後,即可部署安裝檔隨附的 Bookinfo 範例應用程式。這是一個簡易的模擬書店應用程式,包含四項透過 Istio 管理的微服務。每項微服務都以不同的語言編寫,藉此示範您完全無需修改程式碼,即可在多語言環境使用 Istio。
這些微服務包括:
-
productpage:會呼叫 details 和 reviews 微服務,將相關資料填入頁面。
-
details:提供書籍資訊。
-
reviews:提供書評,也會呼叫 ratings 微服務。
-
ratings:提供隨書評顯示的書籍排名資訊。
reviews 微服務有 3 個版本:
- reviews v1 不會呼叫 ratings 服務。
- reviews v2 會呼叫 ratings 服務,並以 1 到 5 顆黑色星星來呈現各項評等。
- reviews v3 會呼叫 ratings 服務,並以 1 到 5 顆紅色星星來呈現各項評等。
下方是應用程式的端對端架構圖:

本範例使用的原始碼和所有其他檔案,都可以在 Istio samples/bookinfo 目錄找到。
部署 Bookinfo
-
查看 .yaml 檔案,瞭解 Bookinfo 應用程式的相關資訊:
istio_dir=$(ls -d istio-* | tail -n 1)
cd $istio_dir
cat samples/bookinfo/platform/kube/bookinfo.yaml
在 containers 部分,可以看到 Bookinfo 應用程式中每項服務的各個版本,對應的 Deployment 都只有一個容器。
-
在 Cloud Shell 使用下列指令,為每個部署的應用程式 Pod 插入 Sidecar Proxy:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
注意:Istio 採用開放原始碼 Envoy Proxy 的擴充版本,這個高效能 Proxy 是以 C++ 開發,專門用來控管服務網格中所有服務傳入和傳出的流量。
Istio 會運用 Envoy 的多項內建功能,包括動態服務探索、負載平衡、傳輸層安全標準 (TLS) 終止、透過 Proxy 處理 HTTP/2 和 gRPC 流量、斷路器、健康狀態檢查、依百分比流量分配機制執行分階段推出作業、錯誤注入,以及豐富的指標。
輸出內容:
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
點選「Check my progress」,確認目標已達成。部署 Bookinfo 應用程式
使用 Istio Ingress 閘道啟用外部存取權
現在 Bookinfo 服務已順利啟動並開始運作,接著您需要允許從 Kubernetes 叢集外部 (例如瀏覽器) 存取應用程式,這時就要用到 Istio 閘道。
-
查看 .yaml 檔案,瞭解應用程式 Ingress 閘道的設定:
cat samples/bookinfo/networking/bookinfo-gateway.yaml
請留意即將部署的 Gateway 和 VirtualService 網格資源。Gateway 可將服務開放給服務網格外部的使用者,您也能針對進入叢集的流量,套用監控和路由規則等 Istio 功能。
-
設定應用程式的 Ingress 閘道,取得稍後要使用的外部 IP:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
輸出內容:
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
檢查 Bookinfo 的 Deployment
-
確認已正確部署應用程式,並檢查服務、Pod 和 Ingress 閘道的狀態:
kubectl get services
輸出內容:
NAME TYPE ...
details ClusterIP ...
kubernetes ClusterIP ...
productpage ClusterIP ...
ratings ClusterIP ...
reviews ClusterIP ...
-
查看執行中的應用程式 Pod:
kubectl get pods
輸出內容:
NAME READY STATUS RESTARTS AGE
details-v1-79f774bdb9-6l54w 2/2 Running 0 101s
productpage-v1-6b746f74dc-4xccm 2/2 Running 0 100s
ratings-v1-b6994bb9-7g4z2 2/2 Running 0 100s
reviews-v1-545db77b95-hkh9p 2/2 Running 0 100s
reviews-v2-7bf8c9648f-cmsxj 2/2 Running 0 100s
reviews-v3-84779c7bbc-8b8qp 2/2 Running 0 100s
您可能需要重新執行這個指令,直到看到所有六個 Pod 都變成 Running 狀態。
-
從叢集中的某個 Pod (例如 ratings) 傳送 curl 要求至 Bookinfo 應用程式,確認該應用程式正常運作:
kubectl exec -it $(kubectl get pod -l app=ratings \
-o jsonpath='{.items[0].metadata.name}') \
-c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
輸出內容:
Simple Bookstore App
-
確認 Ingress 閘道已建立完成:
kubectl get gateway
輸出內容:
NAME AGE
bookinfo-gateway 20m
-
取得 Ingress 閘道的外部 IP 位址:
kubectl get svc istio-ingressgateway -n istio-system
輸出內容:
NAME TYPE ... EXTERNAL-IP ...
istio-ingressgateway LoadBalancer ... 34.72.220.30 ...
在本例中,Ingress 閘道的外部 IP 為 34.72.220.30。
-
現在執行下列指令,並將其中的 [EXTERNAL-IP] 改成前一則指令輸出的外部 IP:
export GATEWAY_URL=[EXTERNAL-IP]
-
從叢集外部傳送 curl 要求至 Bookinfo 應用程式,確認該應用程式正常運作:
curl -I http://${GATEWAY_URL}/productpage
輸出內容:
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
content-length: 4183
server: istio-envoy
...
工作 7:使用 Bookinfo 應用程式
透過瀏覽器試用應用程式
-
在瀏覽器中前往 http://[$GATEWAY_URL]/productpage,即可看到 Bookinfo 網頁。請記得將 [$GATEWAY_URL] 改成實際使用的外部 IP 位址。

-
重新整理頁面數次。
您會發現書評有三種不同版本,這是因為我們尚未使用 Istio 控制版本轉送機制。
系統會以 round robin 方式輪流呼叫三種不同的書評服務:
這種在三者間切換的現象,屬於正常的 Kubernetes 轉送/負載平衡行為。
產生穩定的背景負載
接下來,您要執行 siege 公用程式,模擬傳入 Bookinfo 的流量。
-
在 Cloud Shell 安裝 siege:
Siege 是專門用來產生網站負載的公用程式。
sudo apt install siege
-
使用 siege 產生流量並傳送至服務:
siege http://${GATEWAY_URL}/productpage
工作 8:使用 Cloud Service Mesh 資訊主頁評估服務效能
從服務表格檢視畫面收集資料
- 前往控制台,依序點選「導覽選單」>「Kubernetes Engine」>「服務網格」。
如果出現提示訊息,請點選「啟用」來啟用 Service Mesh API。
-
查看「服務」部分。
清單中顯示了幾項服務?
-
點選「productpage」服務,深入查看更多詳細資訊。

請留意畫面頂端的摘要,這裡會詳細列出目前的每秒要求數、錯誤率、延遲時間和資源使用率。
如未看到要求數大於 0,請先退出並稍後片刻,再嘗試重新進入 productpage 服務。
-
點選「指標」選項,查看各種圖表,並探索不同的細目。
- 目前的要求比率是多少?變化情形如何?
- 目前的錯誤率是多少?變化情形如何?
- 圖表顯示了哪些延遲時間指標?
- 要求大小的中位數為何?
- 回應大小的中位數為何?
- CPU 總用量是多少?
-
點選「已連結的服務」選項。
這裡列出了向 productpage 發出傳入要求的其他服務,以及 productpage 發出傳出要求的目標服務。
- 哪些服務會呼叫 productpage 服務?
-
productpage 服務會呼叫哪些服務?
- 服務間的呼叫是否強制執行 mTLS?
注意:ratings 服務通常不會向 productpage 服務發送要求。會出現 ratings 服務,是因為進行本實驗室時,您曾透過該服務發出測試要求。
-
點選左上角的「Cloud Service Mesh」標誌,返回 Cloud Service Mesh 資訊主頁。
接著,您可以繼續探索其他服務,或是深入查看相關資料。
注意:資訊主頁頂端會顯示服務水準目標 (SLO) 與警告的相關資訊。
SLO 是為服務水準指標 (SLI) 設定的目標,具體定義您認為服務應有的效能表現。舉例來說,您可以將 SLO 設為「每小時有 99.9% 的要求傳回 200 回應」,然後定義警告政策,在服務未達 SLO 時通知值班人員。
歡迎進行其他實驗室,瞭解如何定義及測試 SLO。
使用拓撲檢視畫面,更清楚呈現網格資訊
-
在 Cloud Service Mesh 資訊主頁查看拓撲。
拓撲圖可能需要幾分鐘才會顯示。
-
重新排列圖表中的節點,直到能清楚看出服務與工作負載間的關係。
提醒您,外部要求一律是從 productpage 進入。您可以向上捲動,參考「Bookinfo 總覽」部分的 Bookinfo 架構圖。
調整後的圖表應如下所示:

注意:您可能需要點選「展開」,才能看見所有節點。
-
點選「productpage」服務節點。
畫面上應該會顯示服務的「詳細資訊」資訊卡:

- 這項服務每秒收到多少要求?
- 延遲時間的中位數和第 99 百分位數為何?
-
現在,將游標懸停在各個服務節點上,觀察邊緣統計資料。
-
productpage 服務每秒收到多少要求?來源為何?
- 這項服務每秒轉送多少要求至 productpage-v1 工作負載?
流量詳細資訊應如下所示:

-
深入查看其中一項工作負載,直到看見 Deployment、副本集和 Pod。
畫面應如下所示:

恭喜!
在本實驗室中,您部署了 GKE 叢集、Cloud Service Mesh 和支援 Istio 的應用程式,並透過 Cloud Service Mesh 資訊主頁,進一步瞭解應用程式的服務效能與拓撲。
後續步驟/瞭解詳情
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2026 年 6 月 9 日
實驗室上次測試日期:2026 年 6 月 9 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。