準備使用 Envoy 和無 Proxy 工作負載設定服務路由 API

本文提供使用服務路由 API 搭配 Envoy Proxy 或無 Proxy gRPC 做為資料層,設定 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 後,無論是 Envoy 代理程式或無 Proxy gRPC 用戶端,您的 xDS 用戶端都會連線至 trafficdirector.googleapis.com xDS 伺服器。這些 xDS 用戶端會向 xDS 伺服器提供服務帳戶身分,確保資料層和控制層之間的通訊已獲得適當授權。

針對 Compute Engine VM,xDS 用戶端會使用指派給 VM 的服務帳戶。

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

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

主控台

  1. 在 Google Cloud 控制台中,前往「IAM & Admin」頁面。

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

  2. 選取專案。

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

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

  5. 選取「其他」>「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 Library」(API 程式庫)

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

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

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

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

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

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

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

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

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

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

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

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

gcloud

執行下列指令:

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

xDS 版本

服務路由 API 需要使用 xDS v3。如要瞭解如何將部署作業從 xDS v2 更新至 xDS v3,請參閱「xDS 控制平面 API」一文。

Envoy 代理伺服器的其他規定

本節說明在使用 Cloud Service Mesh 搭配服務路由 API 和 Envoy 代理程式時,需要符合哪些額外條件。如果您使用無 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 的其他規定

本節將說明使用 Cloud Service Mesh 搭配服務路由 API 和無 Proxy gRPC 的其他必要條件。如果您是使用 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 的環境變數,並將引導程序檔案名稱設為環境變數的值。

設定指南中提供範例,說明如何產生 Bootstrap 檔案。為方便起見,您可以使用最新版本的 Cloud Service Mesh gRPC 啟動輔助程式產生器

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

{
  "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 清單中的第 1 個 xDS 伺服器。預設值為 trafficdirector.googleapis.com:443
channel_creds 與 xDS 伺服器搭配使用的憑證。
type 請使用 google_default 值。如要進一步瞭解如何取得憑證,請參閱「應用程式預設憑證的運作方式」。
server_features 伺服器支援的功能清單,例如 xDS 第 3 版支援。預設值為空白。
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,請參閱下列任一文件: