准备使用无代理 gRPC 服务设置 Cloud Service Mesh

Cloud Service Mesh 的设置过程包括多个阶段。本文档介绍第一阶段:有关在无代理 gRPC 应用上配置 Cloud Service Mesh 的准备工作的说明。本文档适用于您使用负载均衡 API 的情况。不过,我们强烈建议您使用服务路由 API。本文档后面部分的继续设置流程中列出了一些特定于平台的指南,其中介绍了其他阶段。

在阅读本指南之前,请先熟悉以下文档,其中简要介绍了如何将 Cloud Service Mesh 与无代理 gRPC 应用搭配使用:

前提条件

通过完成以下任务来准备环境:

  1. 启用结算功能。
  2. 授予所需权限。
  3. 为您的项目启用 Traffic Director API。
  4. 确保服务账号有足够的权限来访问 Traffic Director API。

以下部分提供了各项任务的说明。

启用结算功能

确保您的 Google Cloud 项目已启用结算功能。如需了解详情,请参阅为项目启用、停用或更改结算功能

授予所需的 IAM 权限

您必须具有足够的 Identity and Access Management (IAM) 权限,才能创建虚拟机实例和修改网络以配置 Cloud Service Mesh。如果您在启用了 Cloud Service Mesh 的项目中拥有项目 Owner 或 Editor 角色(roles/ownerroles/editor),您将自动拥有正确的权限。

否则,您必须具有下表中的所有 IAM 角色。如果您具有这些角色,则您也会拥有这些角色相应的权限,如 Compute Engine IAM 文档中所述。

任务 所需角色
为服务账号设置 IAM 政策。 Service Account Admin
(roles/iam.serviceAccountAdmin)
启用 Cloud Service Mesh。 Service Usage Admin
(roles/serviceusage.serviceUsageAdmin)
创建网络、子网和负载平衡器组件。 Compute Network Admin
(roles/compute.networkAdmin)
添加和移除防火墙规则。 Compute Security Admin
(roles/compute.securityAdmin)
创建实例。 Compute Instance Admin
(roles/compute.instanceAdmin)
创建和修改 GKE 集群(如果使用 Pod)。 Cluster Admin
(roles/container.clusterAdmin)
允许访问服务账号。 Service Account User
(roles/iam.serviceAccountUser

Compute Engine 虚拟机必须具有 https://www.googleapis.com/auth/cloud-platform 范围。如需了解详情,请参阅排查使用无代理 gRPC 的部署的问题

使用 xDS v3 时,请向 Cloud Service Mesh gRPC 客户端使用的服务账号授予 roles/trafficdirector.client 角色。

启用 Traffic Director API

控制台

  1. 在 Google Cloud Console 中,转到您的项目的 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 虚拟机,xDS 客户端会使用分配给该虚拟机的服务账号。

您需要拥有以下权限。xDS 协议版本在引导文件中指定。仅支持 xDS v3。

如果您使用的是 xDS v2,则必须迁移到 xDS v3。如需了解如何迁移,请参阅从 xDS v2 迁移到 xDS v3

使用 xDS v3 时,您的 gRPC 应用使用的服务账号必须具有 trafficdirector.networks.reportMetricstrafficdirector.networks.getConfigs 权限。您可以使用包含这两种权限的 IAM Cloud Service Mesh Client 角色 (roles/trafficdirector.client)。

控制台

  1. 在 Google Cloud 控制台中,转到 IAM 和管理页面。

    转到“IAM 和管理”

  2. 选择您的项目。

  3. 确定要向其添加角色的服务账号:

    • 如果该服务账号不在成员列表中,则表明还没有为它分配任何角色。点击添加,然后输入该服务账号的电子邮件地址。
    • 如果该服务账号已经在成员列表中,则表明它具有现有角色。请选择服务账号,然后点击角色标签页。
  4. 展开角色。对于要修改的服务账号,点击 修改

  5. 选择其他 > 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:与服务账号关联的电子邮件

接下来,按照以下整体过程在服务网格中设置无代理 gRPC 应用:

  1. 使用最新的补丁程序将 gRPC 客户端更新到最新版本 gRPC。
  2. 在创建通道并指定 Cloud Service Mesh 引导文件时,更新客户端的 gRPC 名称解析器方案。
  3. 配置 Cloud Service Mesh 和 Cloud Load Balancing 资源。

本文提供有关完成前两个步骤的信息。您在第 3 步中使用的配置过程取决于您的部署是使用 Compute Engine 虚拟机还是 GKE 网络端点组 (NEG)

支持的 gRPC 版本和语言

gRPC 是一个开源项目,gRPC 常见问题解答中介绍了其版本支持。我们建议您使用最新版本的 gRPC,以确保所有已知的安全漏洞都得到缓解。这还可以确保您的应用能够使用 Cloud Service Mesh 支持的最新功能。GitHub 中列出了 gRPC 的各个实现和版本所支持的服务网格功能。如需查看 Cloud Service Mesh 和无代理 gRPC 服务所支持的 gRPC 语言和功能的列表,请参阅 Cloud Service Mesh 功能

Cloud Service Mesh 保持与 gRPC 的当前版本和支持的版本兼容,并努力确保与推出不到一年的 gRPC 版本兼容,具体取决于 Google Cloud Platform 服务条款

更新您的 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 可用区。

继续设置流程

完成本文档中描述的前提条件后,请继续执行以下任一文档中的操作: