準備設定使用無 Proxy gRPC 服務的 Cloud Service Mesh

設定 Cloud Service Mesh 包含多個階段。本文說明第一階段的內容:準備使用無 Proxy gRPC 應用程式設定 Cloud Service Mesh 的操作說明。本文適用於使用負載平衡 API 的情況。不過,我們強烈建議您使用服務路徑 API。如要瞭解其他階段,請參閱本文稍後「繼續進行設定程序」一節中列出的平台專屬指南。

閱讀本指南前,請先詳閱下列文件,瞭解如何搭配無 Proxy gRPC 應用程式使用 Cloud Service Mesh:

必要條件

請完成下列工作,準備好環境:

  1. 啟用計費功能。
  2. 授予必要權限。
  3. 為專案啟用 Traffic Director API。
  4. 確認服務帳戶有足夠的權限可存取 Traffic Director API。

以下各節提供各項工作的操作說明。

啟用計費功能

請確認您已為 Google Cloud 專案啟用計費功能。詳情請參閱「啟用、停用或變更專案的計費功能」。

授予必要的 IAM 權限

您必須具備足夠的 Identity and Access Management (IAM) 權限,才能建立 VM 執行個體及修改網路,以設定 Cloud Service Mesh。如果您在啟用 Cloud Service Mesh 的專案中,具有專案擁有者或編輯者角色 (roles/ownerroles/editor),則會自動具備正確的權限。

否則,您必須擁有下表列出的所有 IAM 角色。如果您擁有這些角色,也會具備相關聯的權限,詳情請參閱 Compute Engine IAM 說明文件

工作 必要角色
設定服務帳戶的 IAM 政策。 服務帳戶管理員
(roles/iam.serviceAccountAdmin)
啟用 Cloud Service Mesh。 服務使用情形管理員
(roles/serviceusage.serviceUsageAdmin)
建立網路、子網路和負載平衡器元件。 Compute 網路管理員
(roles/compute.networkAdmin)
新增及移除防火牆規則。 Compute 安全管理員
(roles/compute.securityAdmin)
建立執行個體。 Compute 執行個體管理員
(roles/compute.instanceAdmin)
如果使用 Pod,請建立及修改 GKE 叢集。 叢集管理員
(roles/container.clusterAdmin)
允許存取服務帳戶。 服務帳戶使用者
(roles/iam.serviceAccountUser

Compute Engine VM 必須具有 https://www.googleapis.com/auth/cloud-platform 範圍。詳情請參閱「解決無 Proxy gRPC 部署項目的問題」。

使用 xDS v3 時,請將 roles/trafficdirector.client 角色授予 Cloud Service Mesh gRPC 用戶端使用的服務帳戶。

啟用 Traffic Director API

控制台

  1. 前往 Google Cloud 控制台的專案「API Library」(API 程式庫) 頁面。

    前往 API 程式庫

  2. 在「搜尋 API 和服務」欄位中輸入 Traffic Director

  3. 在搜尋結果清單中,按一下「Traffic Director API」。如果系統未列出 Traffic Director API,代表您沒有啟用 Traffic Director API 的必要權限。

  4. 在「Traffic Director API」頁面中,按一下「啟用」

gcloud

執行下列指令:

gcloud services enable trafficdirector.googleapis.com

啟用服務帳戶以存取 Traffic Director API

設定資料層並連線至 Cloud Service Mesh 後,xDS 用戶端就會連線至 trafficdirector.googleapis.com xDS 伺服器。這些 xDS 用戶端會向 xDS 伺服器提供服務帳戶身分,確保資料層和控制層之間的通訊已獲得適當授權。

如果是 Compute Engine VM,xDS 用戶端會使用指派給 VM 的服務帳戶。

您需要下列權限。xDS 通訊協定版本是在自我啟動檔案中指定。僅支援 xDS v3。

如果您使用 xDS v2,請務必遷移至 xDS v3。如要瞭解如何遷移,請參閱「從 xDS v2 遷移至 xDS v3」。

使用 xDS v3 時,gRPC 應用程式使用的服務帳戶必須具備 trafficdirector.networks.reportMetricstrafficdirector.networks.getConfigs 權限。您可以使用 IAM Traffic Director 用戶端角色 (roles/trafficdirector.client),其中包含這兩項權限。

控制台

  1. 前往 Google Cloud 控制台的「IAM & Admin」(IAM 與管理)頁面。

    前往「IAM & Admin」(IAM 與管理)

  2. 選取專案。

  3. 找出要新增角色的服務帳戶:

    • 如果服務帳戶還不在「成員」清單中,表示尚未獲派任何角色。按一下「新增」,然後輸入服務帳戶的電子郵件地址。
    • 如果服務帳戶已在「成員」清單中,表示已獲指派角色。選取服務帳戶,然後按一下「角色」分頁標籤。
  4. 展開角色。找出要編輯的服務帳戶,然後按一下「編輯」

  5. 選取「Other」>「Cloud Service Mesh Client」角色。

  6. 如要將角色套用到服務帳戶,請按一下「儲存」

gcloud

執行下列指令:

gcloud projects add-iam-policy-binding PROJECT \
    --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/trafficdirector.client

更改下列內容:

  • PROJECT:輸入 gcloud config get-value project
  • SERVICE_ACCOUNT_EMAIL:與服務帳戶相關聯的電子郵件地址

接著,請按照這個整體程序,在服務網格中設定無 Proxy gRPC 應用程式:

  1. 將 gRPC 用戶端更新至最新版 gRPC,並套用最新修補程式。
  2. 建立管道並指定 Cloud Service Mesh 啟動程序檔案時,請更新用戶端的 gRPC 名稱解析器架構。
  3. 設定 Cloud Service Mesh 和 Cloud Load Balancing 資源。

這份文件提供完成前兩個步驟的相關資訊。步驟 3 的設定程序取決於部署作業是否使用 Compute Engine VMGKE 網路端點群組 (NEG)

支援的 gRPC 版本和語言

gRPC 是開放原始碼專案,相關版本支援說明請參閱 gRPC 常見問題。建議您使用最新版 gRPC,確保已知安全性漏洞獲得緩解。這也能確保應用程式可存取 Cloud Service Mesh 支援的最新功能。GitHub 列出各種 gRPC 實作方式和版本支援的服務網格功能。如需 Cloud Service Mesh 和無 Proxy gRPC 服務支援的 gRPC 語言和功能清單,請參閱 Cloud Service Mesh 功能

Cloud Service Mesh 會維持與目前支援的 gRPC 版本相容,並盡量與推出不到一年的 gRPC 版本相容,但須遵守《Google Cloud 平台服務條款》。

更新 gRPC 用戶端

將應用程式中的 gRPC 程式庫更新為支援所需功能的版本。詳情請參閱上一節。

將 xDS 名稱解析器新增為 gRPC 應用程式的依附元件。 Java 和 Go 的各語言需求如下節所示。 其他語言則沒有額外規定。

Java 需求

在 Java 中,如果您使用 Gradle,請將 grpc-xds 依附元件新增至 build.gradle 檔案。將 LATEST_GRPC_VERSION 替換為最新版本的 gRPC

dependencies {
  runtimeOnly 'io.grpc:grpc-xds:LATEST_GRPC_VERSION'
}

如果您使用 Maven,請將下列指令新增至 pom.xml 的 <dependencies> 區段。將 LATEST_GRPC_VERSION 替換為最新版 gRPC。

    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-xds</artifactId>
      <version>LATEST_GRPC_VERSION</version>
      <scope>runtime</scope>
    </dependency>

Go 需求

如果您使用 Go,請匯入 xds Go 套件

將 gRPC 名稱解析器設為使用 xds

將 gRPC 應用程式設為使用目標 URI 中的 xds 名稱解析配置,而非 DNS 或任何其他解析器配置。方法是在建立 gRPC 管道時,於目標名稱中使用 xds:/// 前置字串。gRPC 用戶端的負載平衡是以每個管道為單位。

在 Cloud Service Mesh 設定中,加入目標 URI 中使用的服務名稱。舉例來說,在 Java 中,您可以使用這個結構建立管道,其中的服務名稱為 helloworld

ManagedChannelBuilder.forTarget("xds:///helloworld[:PORT_NUMBER]")

建立及設定啟動程序檔案

xds 解析器架構會告知 gRPC 應用程式連線至 Cloud Service Mesh,以取得目標服務的設定資訊。因此,請按照下列步驟操作:

  • 建立啟動程序檔案,如下列範例所示。這個檔案會告知 gRPC 連線至 xDS 伺服器 (Cloud Service Mesh),以取得特定服務的設定。
  • 定義名為 GRPC_XDS_BOOTSTRAP 的環境變數,並將啟動程序檔案名稱設為環境變數的值。

設定說明提供範例,說明如何產生自我啟動檔案。為方便起見,您可以使用最新版的 Cloud Service Mesh gRPC 啟動程序產生器

應用程式必須隨附包含連線至 Cloud Service Mesh 所需資訊的啟動程序檔案。範例啟動程序檔案如下所示:

{
  "xds_servers": [
    {
      "server_uri": "trafficdirector.googleapis.com:443",
      "channel_creds": [
        {
          "type": "google_default"
        }
      ],
      "server_features": ["xds_v3"]
    }
  ],
  "node": {
    "id": "projects/123456789012/networks/default/nodes/b7f9c818-fb46-43ca-8662-d3bdbcf7ec18",
    "metadata": {
      "TRAFFICDIRECTOR_NETWORK_NAME": "default"
    },
    "locality": {
      "zone": "us-central1-a"
    }
  }
}

下表說明啟動程序檔案中的欄位。

欄位 值和說明
xds_servers xDS 伺服器清單。gRPC 只會使用清單中的第一個伺服器。
server_uri 至少指定一個。gRPC 只會嘗試連線至 xds_servers 清單中的第一個 xDS 伺服器。預設值為 trafficdirector.googleapis.com:443
channel_creds 用於 xDS 伺服器的憑證。
type 請使用 google_default 值。如要進一步瞭解如何取得憑證,請參閱「應用程式預設憑證的運作方式」。
server_features 伺服器支援的功能清單,例如 xDS v3 支援。預設值為空白。
node 連線至 xDS 伺服器的用戶端相關資訊。
id

id 必須採用以下格式,如上述範例所示:

projects/PROJECT_NUMBER/networks/NETWORK_NAME/nodes/ID

請提供不重複的字串做為 ID 的值。 這有助於識別連線至 Cloud Service Mesh 的 gRPC 用戶端。

metadata xDS 伺服器的專屬資訊。
TRAFFICDIRECTOR_NETWORK_NAME 如果欄位空白或未指定,則值會設為 default
locality gRPC 用戶端執行的 Google Cloud 區域。

繼續設定程序

完成本文所述的必要條件後,請繼續參閱下列其中一個文件: