瞭解 Cloud Service Mesh 用戶端狀態

使用 Cloud Service Mesh 處理應用程式網路時,請考慮下列兩項主要元件:

  • 基礎架構層。基礎架構層 (例如 Envoy Sidecar Proxy 或無 Proxy gRPC 程式庫) 會設定為代表應用程式處理網路作業。
  • 控制層:Cloud Service Mesh。控制層會產生基礎架構層的設定,並將設定分配至基礎架構層。

初始化 Envoy Proxy 或 gRPC 程式庫時,系統會使用 xDS API 連線至 Cloud Service Mesh。Proxy 或程式庫會做為 Cloud Service Mesh 的用戶端。用戶端與 Cloud Service Mesh 建立連線後,Cloud Service Mesh 會將設定資訊傳回用戶端,並視需要更新設定。

有時瞭解哪些用戶端已連線至 Cloud Service Mesh,或檢查 Cloud Service Mesh 為用戶端產生的設定,會很有幫助。舉例來說,您可能想偵錯問題,或瞭解設定 Cloud Service Mesh 時採取的動作,對用戶端看到的設定有何影響。

Cloud Service Mesh 支援用戶端狀態探索服務 (CSDS) API。您可以使用 CSDS 用戶端查詢這個 API。這樣一來,您就能查看哪些用戶端已連線至 Cloud Service Mesh,並檢查 Cloud Service Mesh 為用戶端產生的設定。

CSDS 用戶端是開放原始碼工具,可從 Envoy 存放區取得。下圖說明 CSDS 用戶端如何查詢 Cloud Service Mesh,取得 Cloud Service Mesh CSDS API 的相關資訊。

使用 CSDS API 取得 Cloud Service Mesh 用戶端的設定資訊。
使用 CSDS API 取得 Cloud Service Mesh 用戶端的設定資訊 (按一下即可放大)

CSDS 用戶端會連線至 Cloud Service Mesh,並提供專案編號和網路名稱,以及一組憑證。Cloud Service Mesh 隨後會傳回與其連線的各種 Cloud Service Mesh 用戶端相關資訊。

如要進一步瞭解 CSDS 用戶端,請參閱 README 檔案

必要條件

如要連線至 CSDS API,您需要 CSDS 用戶端。您可以透過下列任一方式取得用戶端:

  1. 您可以使用 Cloud Shell 建構用戶端。
  2. 您可以在本機開發電腦上建構用戶端。

使用 Cloud Shell 建構 CSDS 用戶端

如要使用 Cloud Shell 建構 CSDS 用戶端,請執行下列操作:

  1. 按照「停用或重設 Cloud Shell」一文中的指示重設 Cloud Shell。確保現有設定不會干擾建構作業。
  2. 在 Google Cloud 控制台中,開啟新的 Cloud Shell 工作階段
  3. 執行下列指令,取得用於建構 CSDS 用戶端的原始碼:

    git clone https://github.com/envoyproxy/envoy-tools.git
    
  4. 前往 CSDS 用戶端目錄,然後執行下列指令:

    cd envoy-tools/csds-client/
    make init
    make build
    
  5. 建構完成後,請使用下列指令進行測試:

    csds-client -help
    

如果建構成功,您會看到用戶端的說明文字。

在本機開發機器上建構 CSDS 用戶端

您可以按照開放原始碼存放區中 README 檔案的操作說明,在本機下載及建構 CSDS 用戶端。如要這麼做,您也必須在環境中設定 Go 和 make 工具。如果您不想這麼做,請按照 Cloud Shell 的上述操作說明進行,其中會提供 Go 和 make 工具。

其他必要條件

  1. 請確認每個用戶端的節點 ID 在服務網格中都是不重複的。如果多個用戶端共用同一個節點 ID,系統只會傳回一個設定,也就是最近連線至 Cloud Service Mesh 的用戶端設定。

    如果您使用 Google 的參考套件,就不需要在啟動程序檔案中手動設定節點 ID,系統會為您產生節點 ID。如未使用參照套件,則必須在每個啟動程序檔案中手動設定節點 ID。

  2. 確認您有權存取具備設定 Cloud Service Mesh 所需身分與存取權管理 (IAM) 權限的使用者帳戶。 下列操作說明會使用 Google Cloud CLI 產生 CSDS 用戶端所需的憑證,並自動提供這些憑證。或者,您也可以使用 CSDS 用戶端,直接提供憑證。

判斷目前連線至 Cloud Service Mesh 的用戶端

您可以使用 CSDS 用戶端,判斷哪些用戶端已連線至 Cloud Service Mesh 設定。

如要取得這項資訊,請提供下列詳細資料:

  • 產生憑證的專案 ID。

  • 如果您使用服務轉送 API,則視 xDS 用戶端擷取的資源而定,會是下列其中一項:

    • Mesh 資源的名稱
    • Gateway 資源的「scope」參數
  • 如果您使用舊版 API,請提供您設定 Cloud Service Mesh 時指定的虛擬私有雲網路名稱。這個網路是由轉送規則對應關係轉送規則所指定。

服務路徑 API

  1. 使用具備正確權限的帳戶,執行下列指令:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. 建立新的 YAML 格式檔案,並加入下列內容。

    node_matchers:
      - node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_MESH_SCOPE_NAME
            value:
              string_match:
                exact: "MESH_OR_SCOPE"
    

    替換下列值:

    • PROJECT_NUMBER:專案 ID
    • MESH_OR_SCOPE:如果 xDS 用戶端擷取 Mesh 資源,請使用 mesh: 前置字元,後面接上實際的網格名稱;如果 xDS 用戶端擷取 Gateway 資源,請使用 scope: 前置字元,後面接上範圍參數的名稱
  1. 執行 CSDS 用戶端,該用戶端會使用 gcloud CLI 產生的憑證。將 PATH_TO_CSDS_REQUEST_YAML_FILE 替換為上一步建立的 YAML 檔案路徑。

    csds-client \
      -service_uri trafficdirector.googleapis.com:443 \
      -platform gcp \
      -authn_mode auto \
      -api_version v3 \
      -request_file PATH_TO_CSDS_REQUEST_YAML_FILE
    

    輸出結果應該會類似下列內容:

    Client ID                                          xDS stream type    Config status
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    ADS                N/A
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    LRS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    LRS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    ADS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    LRS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    ADS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    LRS                N/A
    

    Client ID」欄會顯示已連線至 Cloud Service Mesh 的用戶端 ID。當 Envoy 或無 Proxy 的 gRPC 連線至 Cloud Service Mesh 時,會使用 Envoy 或無 Proxy 的 gRPC 所用啟動程序檔案中的 node_id 欄位,提供這些用戶端 ID。

舊版 API

  1. 使用具備正確權限的帳戶,執行下列指令:

    gcloud auth application-default login \
     --billing-project=BILLING_PROJECT_ID
    
  2. 建立新的 YAML 格式檔案,並加入下列內容。

    node_matchers:
      - node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_NETWORK_NAME
            value:
              string_match:
                exact: "NETWORK_NAME"
    

    替換下列值:

    • PROJECT_NUMBER:Google Cloud 專案的專屬 ID
    • NETWORK_NAME:轉送規則對應關係的轉送規則所指定的虛擬私有雲網路
  3. 執行 CSDS 用戶端,該用戶端會使用 gcloud CLI 產生的憑證。將 PATH_TO_CSDS_REQUEST_YAML_FILE 替換為上一步建立的 YAML 檔案路徑。

    csds-client \
      -service_uri trafficdirector.googleapis.com:443 \
      -platform gcp \
      -authn_mode auto \
      -api_version v3 \
      -request_file PATH_TO_CSDS_REQUEST_YAML_FILE
    

    輸出結果應該會類似下列內容:

    Client ID                                          xDS stream type    Config status
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    ADS                N/A
    603e3524-d1d6-4a9e-9b26-39bcd633a7cb~10.128.0.5    LRS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                N/A
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    LRS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    ADS                N/A
    d9577b61-fa3a-41d6-90bd-11c4fdd2f8c0~10.128.0.4    LRS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    ADS                N/A
    f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6    LRS                N/A
    

    Client ID」欄會顯示已連線至 Cloud Service Mesh 的用戶端 ID。當 Envoy 或無 Proxy 的 gRPC 連線至 Cloud Service Mesh 時,會使用 Envoy 或無 Proxy 的 gRPC 所用啟動程序檔案中的 node_id 欄位,提供這些用戶端 ID。

檢查特定 Cloud Service Mesh 用戶端的設定

您可以使用在上一個章節中取得的用戶端 ID,檢查 Cloud Service Mesh 傳送至特定用戶端的設定。

您可以檢查資源 proto 的詳細設定,判斷特定用戶端使用的 xDS API 版本。舉例來說,如果設定中顯示 envoy.api.v2.Cluster,表示用戶端使用的是 v2 API。如果設定中顯示 envoy.api.v3.Cluster,表示用戶端使用的是 v3 API。系統僅支援 xDS v3。如要瞭解如何從 v2 遷移至 v3,請參閱「從 xDS v2 遷移至 xDS v3」。

服務路徑 API

  1. 更新您在「判斷目前連線至 Cloud Service Mesh 的用戶端」中建立的 YAML 檔案。加入 node-id 欄位,並將用戶端 ID 做為值。

    node_matchers:
      - node_id:
          exact: "CLIENT_ID"
        node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_MESH_SCOPE_NAME
            value:
              string_match:
                exact: "MESH_OR_SCOPE_NAME"
    

    替換下列值:

    • CLIENT_ID:您要檢查設定的用戶端 ID,例如 projects/000000/networks/mesh:mesh1/nodes/00000000-0000-0000-0000-00000000~127.0.0.1
    • PROJECT_NUMBER:Google Cloud 專案的專屬 ID
    • MESH_OR_SCOPE:如果 xDS 用戶端擷取 Mesh 資源,請使用 mesh: 前置字元,後面接上實際的網格名稱;如果 xDS 用戶端擷取 Gateway 資源,請使用 scope: 前置字元,後面接上範圍參數的名稱
  2. 執行 CSDS 用戶端。執行用戶端會產生 JSON 檔案。這個檔案包含傳送至 Cloud Service Mesh 用戶端的設定。

    csds-client \
     -service_uri trafficdirector.googleapis.com:443 \
     -platform gcp \
     -authn_mode auto \
     -api_version v3 \
     -request_file PATH_TO_CSDS_REQUEST_YAML_FILE \
     -output_file FILENAME.JSON
    

    替換下列值:

    • PATH_TO_CSDS_REQUEST_YAML_FILE:YAML 檔案的路徑
    • FILENAME.JSON:儲存 CSDS 用戶端輸出內容的檔案名稱

    輸出結果應該會類似下列內容:

    Client ID                                          xDS stream type    Config status
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                LDS  SYNCED
                                                                          RDS  SYNCED
                                                                          CDS  STALE
    Config has been saved to FILENAME.JSON
    

    您可以查看 JSON 檔案,檢查詳細的 xDS 設定。這項輸出內容包含 Cloud Service Mesh 透過匯總 gRPC 串流 (ADS) 傳送至用戶端的個別 xDS 設定狀態。

舊版 API

  1. 更新您在「判斷目前連線至 Cloud Service Mesh 的用戶端」中建立的 YAML 檔案。加入 node-id 欄位,並將用戶端 ID 做為值。

    node_matchers:
      - node_id:
          exact: "CLIENT_ID"
        node_metadatas:
          - path:
              - key: TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
            value:
              string_match:
                exact: "PROJECT_NUMBER"
          - path:
              - key: TRAFFICDIRECTOR_NETWORK_NAME
            value:
              string_match:
                exact: "NETWORK_NAME"
    

    替換下列值:

    • CLIENT_ID:您要檢查設定的用戶端 ID,例如 f38a59c1-4428-42f1-be81-e02eb994f9dd~10.128.0.6
    • PROJECT_NUMBER:Google Cloud 專案的專屬 ID
    • NETWORK_NAME:轉送規則對應關係的轉送規則指定的虛擬私有雲網路
  2. 執行 CSDS 用戶端。執行用戶端會產生 JSON 檔案。這個檔案包含傳送至 Cloud Service Mesh 用戶端的設定。

    csds-client \
     -service_uri trafficdirector.googleapis.com:443 \
     -platform gcp \
     -authn_mode auto \
     -api_version v3 \
     -request_file PATH_TO_CSDS_REQUEST_YAML_FILE \
     -output_file FILENAME.JSON
    

    替換下列值:

    • PATH_TO_CSDS_REQUEST_YAML_FILE:YAML 檔案的路徑
    • FILENAME.JSON:儲存 CSDS 用戶端輸出內容的檔案名稱

    輸出結果應該會類似下列內容:

    Client ID                                          xDS stream type    Config status
    8576d4bf-8f10-40b2-920b-bb6a7cf9f34a~10.168.0.3    ADS                LDS  SYNCED
                                                                          RDS  SYNCED
                                                                          CDS  STALE
    Config has been saved to FILENAME.JSON
    

    您可以查看 JSON 檔案,檢查詳細的 xDS 設定。這項輸出內容包含 Cloud Service Mesh 透過匯總 gRPC 串流 (ADS) 傳送至用戶端的個別 xDS 設定狀態。

狀態值

下表列出您可能會看到的 xDS 設定狀態值。

說明
UNKNOWN (預設) 狀態資訊無法取得或不明。
SYNCED Cloud Service Mesh 將設定傳送至用戶端,並從用戶端收到 ACK
ERROR Cloud Service Mesh 將設定傳送至用戶端,並從用戶端收到 NACK
STALE Cloud Service Mesh 已將設定傳送至用戶端,但未收到用戶端的 ACKNACK
NOT_SENT 設定未傳送。
N/A CSDS 用戶端未包含節點 ID。系統會傳回所有已連結的串流,但無法提供設定狀態。

視覺化和監控

CSDS 用戶端開放原始碼工具提供其他功能,例如視覺化和持續監控,您可能想使用這些功能。如要進一步瞭解這些功能,請參閱開放原始碼存放區中的 README 檔案

錯誤訊息

如果您只在專案中啟用 Cloud Service Mesh API,CSDS 用戶端可能會顯示下列錯誤訊息:

rpc error: code = NotFound desc = Requested entity was not found.

請放心,這是正常情況。 Cloud Service Mesh 設定的範圍是每個網路。如果您尚未建立聯播網,執行 CSDS 用戶端時會看到這則錯誤訊息。

限制

  • CSDS 回應未包含端點資訊,因為 CSDS v3 API 不提供這項資訊。
  • 每個用戶端的節點 ID 在服務網格中不得重複。如果多個用戶端共用同一個節點 ID,系統只會傳回一個設定,也就是最近連線至 Cloud Service Mesh 的用戶端設定。
  • 有時您可能會在 YAML 檔案的節點 ID 欄位中看到反斜線 (\)。如果發生這種情況,請在查詢 CSDS API 的設定資訊時,使用額外的反斜線逸出反斜線。這是已知問題。

後續步驟