準備透過 Envoy 和無 Proxy 工作負載,設定服務轉送 API

本文說明使用 Envoy Proxy 或無 Proxy gRPC 做為資料層,透過服務路徑 API 設定 Cloud Service Mesh 的必要工作。

設定 Cloud Service Mesh 包含多個階段。本文說明第一階段的內容:準備使用 VM 執行個體或無 Proxy gRPC 應用程式設定 Cloud Service Mesh 的操作說明。如要瞭解其他階段,請參閱本文稍後「繼續設定程序」一節中列出的平台專屬指南。

閱讀本指南前,請先參閱下列文件,瞭解如何搭配使用 Cloud Service Mesh 與服務路徑 API 和 Gateway API:

必要條件

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

  1. 根據業務需求設定專案。
  2. 啟用計費功能。
  3. 授予必要權限。
  4. 為專案啟用 Traffic Director API 和其他 API。
  5. 請確認服務帳戶具備足夠的權限,可存取 Traffic Director API。
  6. 啟用 Cloud DNS API 並設定 Cloud DNS。

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

設定專案

如要設定及管理專案,請參閱「建立及管理專案」和相關說明文件。

啟用計費功能

請確認您已為 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)
允許存取服務帳戶。 服務帳戶使用者
(roles/iam.serviceAccountUser)
啟用服務帳戶,執行必要工作。xDS 資料層 (Envoy 或無 Proxy 的 gRPC) 需要這項權限,才能從控制層接收 xDS 設定。 Traffic Director 用戶端
(roles/trafficdirector.client)

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

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

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

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

除非您修改設定,否則 Google Cloud 會使用 Compute Engine 預設服務帳戶

如要授予服務帳戶 Traffic Director API 的存取權,請按照下列操作說明進行。

控制台

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

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

  2. 選取專案。

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

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

  5. 選取「Other」>「Traffic Director 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:與服務帳戶相關聯的電子郵件地址

啟用必用的 API。

啟用下列必要 API。

  • osconfig.googleapis.com
  • trafficdirector.googleapis.com
  • compute.googleapis.com
  • networkservices.googleapis.com

如要啟用必要的 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」頁面中,按一下「啟用」

  5. 在「搜尋 API 和服務」欄位中輸入 OS Config

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

  7. 在「OS Config API」頁面中,按一下「啟用」

  8. 在「搜尋 API 和服務」欄位中輸入 Compute

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

  10. 在「Compute Engine API」頁面中,按一下「啟用」

  11. 在「搜尋 API 和服務」欄位中輸入 Network Services

  12. 在搜尋結果清單中,點選「Network Services API」。如果系統未列出 Network Services API,代表您沒有啟用 Network Services API 的必要權限。

  13. 在「Network Services API」頁面中,按一下「啟用」

gcloud

執行下列指令:

gcloud services enable osconfig.googleapis.com \
trafficdirector.googleapis.com \
compute.googleapis.com \
networkservices.googleapis.com

xDS 版本

服務路由 API 必須使用 xDS v3。如要瞭解如何將部署作業從 xDS 第 2 版更新至 xDS 第 3 版,請參閱「xDS 控制層 API」。

使用 Envoy Proxy 的其他規定

本節說明搭配服務路由 API 和 Envoy Proxy 使用 Cloud Service Mesh 的其他需求。如果使用無 Proxy gRPC 部署,請參閱無 Proxy gRPC 的額外需求

如何安裝 Envoy

在 Cloud Service Mesh 部署程序中,您會建立 VM 範本,自動在執行應用程式的 VM 上安裝 Envoy。

關於 Envoy 版本

Envoy 必須為 1.20.0 以上版本,才能與 Cloud Service Mesh 搭配使用。 建議您一律使用最新版 Envoy,確保已知安全性漏洞獲得緩解。

如果您決定使用其中一種自動化方法部署 Envoy,我們會為您處理這項工作,如下所示:

使用 Compute Engine VM 自動部署 Envoy 時,系統會安裝我們驗證過可與 Cloud Service Mesh 搭配使用的 Envoy 版本。使用執行個體範本建立新 VM 時,VM 會收到我們驗證過的最新版本。如果 VM 執行時間較長,可以使用滾動式更新來取代現有 VM,並採用最新版本

如要瞭解特定 Envoy 版本,請參閱「版本記錄」。如要瞭解安全漏洞,請參閱安全性補充公告

無 Proxy gRPC 的其他需求條件

本節說明搭配服務路由 API 和無 Proxy 的 gRPC 使用 Cloud Service Mesh 時的額外需求。如果使用 Envoy 代理伺服器部署,請參閱「使用 Envoy 代理伺服器的額外規定」。

無 Proxy gRPC 的整體程序

如要在服務網格中設定無 Proxy gRPC 應用程式,請按照下列整體程序操作:

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

這份文件提供完成前兩個步驟的相關資訊。步驟 3 的設定程序取決於部署作業是使用 Compute Engine VM 還是 GKE 網路端點群組 (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_MESH_NAME 如果欄位空白或未指定,則值會設為 default
locality gRPC 用戶端執行的 Google Cloud 區域。

繼續設定程序

完成本文所述的必要條件後,如果您要使用服務轉送 API 設定 Cloud Service Mesh,請繼續參閱下列其中一份文件: