瞭解 Cloud Service Mesh 用戶端狀態

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

  • 基礎架構層。基礎架構層 (例如 Envoy 附屬 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 支援 Client Status Discovery Service (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 用戶端

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

其他必要條件

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

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

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

判斷目前有哪些用戶端連線至 Cloud Service Mesh

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

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

  • 產生憑證的專案 ID。

  • 如果您使用服務轉送 API,請根據 xDS 用戶端擷取的資源,選擇下列任一選項:

    • Mesh 資源的名稱
    • 閘道資源的 scope 參數
  • 如果您使用的是舊版 API,請輸入您在設定 Cloud Service Mesh 時指定的 VPC 網路名稱。這個網路是轉送規則對應關係轉送規則所指定的網路。

服務路由 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。這些用戶端 ID 是由 Envoy 或無 Proxy 的 gRPC 在連線至 Cloud Service Mesh 時,在其使用的啟動檔案中使用 node_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:轉送規則對應關係的轉送規則所指定的 VPC 網路
  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。這些用戶端 ID 是由 Envoy 或無 Proxy 的 gRPC 在連線至 Cloud Service Mesh 時,在其使用的啟動檔案中使用 node_id 欄位提供。

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

您可以使用先前取得的用戶端 ID,檢查 Cloud Service Mesh 傳送至特定用戶端的設定。

您可以查看資源原型檔的詳細設定,判斷特定用戶端使用的 xDS API 版本。舉例來說,如果您在設定中看到 envoy.api.v2.Cluster,表示用戶端正在使用 v2 API。如果在設定中看到 envoy.api.v3.Cluster,表示用戶端使用的是 v3 API。僅支援 xDS 第 3 版。如要瞭解如何從 v2 遷移至 v3,請參閱「從 xDS v2 遷移至 xDS v3」一文。

服務路由 API

  1. 更新您在決定目前已連線至 Cloud Service Mesh 的用戶端中建立的 YAML 檔案。新增使用用戶端 ID 做為值的 node-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 檔案。新增使用用戶端 ID 做為值的 node-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:轉送規則對應關係的轉送規則所指定的 VPC 網路
  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 以取得設定資訊時,使用額外的反斜線來轉義反斜線。這是已知問題。

後續步驟