准备使用 Envoy 和无代理工作负载设置服务路由 API

本文档介绍将服务路由 API 与 Envoy 代理或无代理 gRPC 作为数据平面来设置 Cloud Service Mesh 的必要任务。

Cloud Service Mesh 的设置包括多个阶段。本文档介绍了第一阶段:说明如何准备使用虚拟机实例或无代理 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) 权限才能创建虚拟机实例和修改网络以配置 Cloud Service Mesh。如果您在启用了 Cloud Service Mesh 的项目中拥有项目 Owner 或 Editorroles/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)
允许访问服务账号。 Service Account User
(roles/iam.serviceAccountUser)
请启用服务帐号以执行所需的任务。 Service Account User
(roles.trafficdirector.client)

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

启用服务账号以访问 Traffic Director API

设置数据平面并将其连接到 Cloud Service Mesh 时,您的 xDS 客户端(无论是 Envoy 代理还是无代理 gRPC 客户端)将连接到 trafficdirector.googleapis.com xDS 服务器。这些 xDS 客户端会向 xDS 服务器提供服务账号身份,以确保数据层面和控制层面之间的通信已获得适当授权。

对于 Compute Engine 虚拟机,xDS 客户端会使用分配给该虚拟机的服务账号。

除非您修改配置,否则 Google Cloud 将使用 Compute Engine 默认服务帐号

如需向服务帐号授予对 Traffic Director API 的访问权限,请按照以下说明操作。

控制台

  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:与服务账号关联的电子邮件

启用所需的 API

启用以下必需的 API。

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

如需启用所需的 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 页面上,点击启用

  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,则表示您没有启用 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 页面上,点击启用

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 代理一起使用的其他要求。如果您使用无代理 gRPC 进行部署,请参阅无代理 gRPC 的其他要求

Envoy 的安装方式

在 Cloud Service Mesh 部署过程中,您可以创建一个虚拟机模板,以在运行应用的虚拟机上自动安装 Envoy。

关于 Envoy 版本

Envoy 必须为 1.20.0 或更高版本才能与 Cloud Service Mesh 搭配使用。 我们建议始终使用最新的 Envoy 版本,以确保已知的安全漏洞得到缓解。

如果您决定使用我们的自动化方法之一部署 Envoy,我们会按以下方式处理此任务:

使用 Compute Engine 虚拟机的自动 Envoy 部署会安装经验证可用于 Cloud Service Mesh 的 Envoy 版本。使用实例模板创建新虚拟机时,虚拟机将收到已经过我们验证的最新版本。如果您有长时间运行的虚拟机,则可以使用滚动更新来替换现有虚拟机和获取最新版本

如需了解特定的 Envoy 版本,请参阅版本记录。如需了解安全漏洞,请参阅安全公告

无代理 gRPC 的其他要求

本部分介绍将 Cloud Service Mesh 与服务路由 API 和无代理 gRPC 结合使用的其他要求。如果您使用 Envoy 代理进行部署,请参阅针对 Envoy 代理的其他要求

使用无代理 gRPC 的总体流程

按照以下整体流程在服务网格中设置无代理 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_MESH_NAME 如果该字段为空或未指定,则值将设置为 default
locality gRPC 客户端运行所在的 Google Cloud 可用区。

继续设置流程

满足本文档中所述的前提条件后,如果您使用服务路由 API 配置 Cloud Service Mesh,请继续查看以下文档之一: