Install Cloud Service Mesh

Check my progress

/ 50

Deploying a BookInfo application

Check my progress

/ 50

This lab may incorporate AI tools to support your learning.
This content is not yet optimized for mobile devices.
For the best experience, please visit us on a desktop computer using a link sent by email.

GSP654

Google Cloud 自學實驗室

總覽

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 控制台

  1. 按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 此實驗室所需的臨時憑證 (使用者名稱和密碼)
    • 完成此實驗室所需的其他資訊 (如有)

    請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。

  2. 按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。

    接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。

    提示:您可以在不同的視窗並排開啟分頁。

    注意:頁面顯示「選擇帳戶」對話方塊時,請點選「使用其他帳戶」。
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab setup and access」面板找到「Username」。

  4. 點選「下一步」。

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab setup and access」面板找到「Password」。

  6. 點選「下一步」。

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 繼續點按後續頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要使用 Google Cloud 產品和服務,請按一下「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。「導覽選單」圖示和搜尋欄位

啟動 Cloud Shell

Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 「啟動 Cloud Shell」圖示。

  2. 系統顯示視窗時,請按照下列步驟操作:

    • 繼續操作 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 鍵自動完成功能。

  1. (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
  1. 點按「授權」。

輸出內容:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需 gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。

工作 1:設定專案

檢查 SDK 設定

  1. 在 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-#####]
  2. 視情況更新專案設定。

    如果 SDK 未正確設定預設專案,則須更新設定。請查看 Qwiklabs 操作說明頁面的「憑證」部分,將 [project_id] 改成該處顯示的專案名稱:

    gcloud config set project [project_id]

設定環境變數

  1. 配置後續設定和安裝指令所需的環境變數:
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 叢集

建立叢集

  1. 在 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

叢集可能需要幾分鐘才會建立完成。

  1. 叢集建立完成後,執行下列指令來啟用機群服務網格、設定管理員權限,並建立 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
  1. 設定 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。

  1. 將 Cloud Service Mesh 1.28 安裝版本下載至目前使用的目錄:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.28 > asmcli
  1. 將指令碼設為執行檔:
chmod +x asmcli
  1. 啟用 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。
  1. 執行下列指令來驗證設定,並將安裝檔和 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):

  1. 執行下列指令來安裝 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,能讓您精細控管進出網格的流量。

  1. 如果尚未建立命名空間,請先為 Ingress 閘道建立一個。閘道屬於使用者工作負載,建議不要部署於控制層命名空間。
GATEWAY_NS=istio-gateway kubectl create namespace $GATEWAY_NS
  1. 接著要在閘道命名空間套用修訂版本標籤,為閘道啟用自動插入功能。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
    • 啟用 Istio 的 Proxy 插入功能
    kubectl label namespace default istio-injection=enabled kubectl label namespace $GATEWAY_NS istio-injection=enabled
  2. 切換至您在 --output_dir 指定的目錄:

cd ~/asm_output
  1. 您可以直接部署 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 中。

  1. 部署工作負載前,記得先設定 Sidecar Proxy 插入功能,Cloud Service Mesh 才能監控並保護流量。

  2. 套用修訂版本標籤並移除 istio-injection 標籤 (如有),以啟用自動插入功能。

  3. 執行下列指令,將 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 顆紅色星星來呈現各項評等。

下方是應用程式的端對端架構圖:

Bookinfo 架構

本範例使用的原始碼和所有其他檔案,都可以在 Istio samples/bookinfo 目錄找到。

部署 Bookinfo

  1. 查看 .yaml 檔案,瞭解 Bookinfo 應用程式的相關資訊:

    istio_dir=$(ls -d istio-* | tail -n 1) cd $istio_dir cat samples/bookinfo/platform/kube/bookinfo.yaml

    在 containers 部分,可以看到 Bookinfo 應用程式中每項服務的各個版本,對應的 Deployment 都只有一個容器。

  2. 在 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 閘道。

  1. 查看 .yaml 檔案,瞭解應用程式 Ingress 閘道的設定:

    cat samples/bookinfo/networking/bookinfo-gateway.yaml

    請留意即將部署的 Gateway 和 VirtualService 網格資源。Gateway 可將服務開放給服務網格外部的使用者,您也能針對進入叢集的流量,套用監控和路由規則等 Istio 功能。

  2. 設定應用程式的 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

  1. 確認已正確部署應用程式,並檢查服務、Pod 和 Ingress 閘道的狀態:

    kubectl get services

    輸出內容:

    NAME TYPE ... details ClusterIP ... kubernetes ClusterIP ... productpage ClusterIP ... ratings ClusterIP ... reviews ClusterIP ...
  2. 查看執行中的應用程式 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 狀態。

  3. 從叢集中的某個 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
  4. 確認 Ingress 閘道已建立完成:

    kubectl get gateway

    輸出內容:

    NAME AGE bookinfo-gateway 20m
  5. 取得 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。

  6. 現在執行下列指令,並將其中的 [EXTERNAL-IP] 改成前一則指令輸出的外部 IP:

    export GATEWAY_URL=[EXTERNAL-IP]
  7. 從叢集外部傳送 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 應用程式

透過瀏覽器試用應用程式

  1. 在瀏覽器中前往 http://[$GATEWAY_URL]/productpage,即可看到 Bookinfo 網頁。請記得將 [$GATEWAY_URL] 改成實際使用的外部 IP 位址。

    Bookinfo 產品頁面

  2. 重新整理頁面數次。

    您會發現書評有三種不同版本,這是因為我們尚未使用 Istio 控制版本轉送機制。

    系統會以 round robin 方式輪流呼叫三種不同的書評服務:

    • 沒有星星
    • 黑色星星
    • 紅色星星

    這種在三者間切換的現象,屬於正常的 Kubernetes 轉送/負載平衡行為。

產生穩定的背景負載

接下來,您要執行 siege 公用程式,模擬傳入 Bookinfo 的流量。

  1. 在 Cloud Shell 安裝 siege:

    Siege 是專門用來產生網站負載的公用程式。

    sudo apt install siege
  2. 使用 siege 產生流量並傳送至服務:

    siege http://${GATEWAY_URL}/productpage

工作 8:使用 Cloud Service Mesh 資訊主頁評估服務效能

從服務表格檢視畫面收集資料

  1. 前往控制台,依序點選「導覽選單」>「Kubernetes Engine」>「服務網格」。

如果出現提示訊息,請點選「啟用」來啟用 Service Mesh API。

  1. 查看「服務」部分。

    清單中顯示了幾項服務?

  2. 點選「productpage」服務,深入查看更多詳細資訊。

    畫面中特別標出 productpage 服務

    請留意畫面頂端的摘要,這裡會詳細列出目前的每秒要求數、錯誤率、延遲時間和資源使用率。

    如未看到要求數大於 0,請先退出並稍後片刻,再嘗試重新進入 productpage 服務。

  3. 點選「指標」選項,查看各種圖表,並探索不同的細目。

    • 目前的要求比率是多少?變化情形如何?
    • 目前的錯誤率是多少?變化情形如何?
    • 圖表顯示了哪些延遲時間指標?
    • 要求大小的中位數為何?
    • 回應大小的中位數為何?
    • CPU 總用量是多少?
  4. 點選「已連結的服務」選項。

    這裡列出了向 productpage 發出傳入要求的其他服務,以及 productpage 發出傳出要求的目標服務。

    • 哪些服務會呼叫 productpage 服務?
    • productpage 服務會呼叫哪些服務?
    • 服務間的呼叫是否強制執行 mTLS?
    注意:ratings 服務通常不會向 productpage 服務發送要求。會出現 ratings 服務,是因為進行本實驗室時,您曾透過該服務發出測試要求。
  5. 點選左上角的「Cloud Service Mesh」標誌,返回 Cloud Service Mesh 資訊主頁。

接著,您可以繼續探索其他服務,或是深入查看相關資料。

注意:

資訊主頁頂端會顯示服務水準目標 (SLO) 與警告的相關資訊。

SLO 是為服務水準指標 (SLI) 設定的目標,具體定義您認為服務應有的效能表現。舉例來說,您可以將 SLO 設為「每小時有 99.9% 的要求傳回 200 回應」,然後定義警告政策,在服務未達 SLO 時通知值班人員。

歡迎進行其他實驗室,瞭解如何定義及測試 SLO。

使用拓撲檢視畫面,更清楚呈現網格資訊

  1. 在 Cloud Service Mesh 資訊主頁查看拓撲。

    拓撲圖可能需要幾分鐘才會顯示。

  2. 重新排列圖表中的節點,直到能清楚看出服務與工作負載間的關係。

    提醒您,外部要求一律是從 productpage 進入。您可以向上捲動,參考「Bookinfo 總覽」部分的 Bookinfo 架構圖。

    調整後的圖表應如下所示:

    服務網格圖表

    注意:您可能需要點選「展開」,才能看見所有節點。
  3. 點選「productpage」服務節點。

    畫面上應該會顯示服務的「詳細資訊」資訊卡:

    服務的「詳細資訊」資訊卡

    • 這項服務每秒收到多少要求?
    • 延遲時間的中位數和第 99 百分位數為何?
  4. 現在,將游標懸停在各個服務節點上,觀察邊緣統計資料。

    • productpage 服務每秒收到多少要求?來源為何?
    • 這項服務每秒轉送多少要求至 productpage-v1 工作負載?

    流量詳細資訊應如下所示:

    流量詳細資訊圖表

  5. 深入查看其中一項工作負載,直到看見 Deployment、副本集和 Pod。

    畫面應如下所示:

    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 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Use private browsing

  1. Copy the provided Username and Password for the lab
  2. Click Open console in private mode

Sign in to the Console

  1. Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
  2. Accept the terms, and skip the recovery resource page
  3. Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project

This content is not currently available

We can notify you via email when it becomes available

Great!

We can contact you via email if it becomes available

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Using an Incognito or private browser window is the best way to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.