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

本文档介绍了使用具有 Envoy 代理的服务路由 API 或无代理 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 功能

在遵循 Google Cloud Platform 服务条款的前提下,Cloud Service Mesh 保持与 gRPC 的当前版本和受支持版本兼容,并努力与存在时间不到一年的 gRPC 版本兼容。

更新您的 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,请继续填写以下某个文档: