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

本文档介绍了设置 Google Pay 的必要任务 将服务路由 API 与 Envoy 代理或 使用无代理 gRPC 作为数据平面

Cloud Service Mesh 的设置包括多个阶段。此文档 介绍了第一阶段:配置配置前的准备工作 Cloud Service Mesh 与虚拟机实例或无代理 gRPC 应用。 其他阶段,请参阅 本文档后面的继续设置流程

在阅读本指南之前,请先熟悉以下文档: 其中简要介绍了如何将 Cloud Service Mesh 与该服务结合使用 路由 API 和网关 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。如果您有 项目的 Owner 或 Editor 角色 (roles/ownerroles/editor)在您要启用的项目中 Cloud Service Mesh,那么您会自动拥有正确的权限。

否则,您必须具有 表格。如果您拥有这些角色,则还会在 权限,具体如 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 的访问权限,请使用以下命令 instructions.

控制台

  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 的权限。

  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 部署会安装 Envoy 此版本经过验证,可与 Cloud Service Mesh 配合使用。 使用实例模板创建新虚拟机时,虚拟机将收到已经过我们验证的最新版本。如果您有长时间运行的虚拟机,则可以使用滚动更新来替换现有虚拟机和获取最新版本

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

无代理 gRPC 的额外要求

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

使用无代理 gRPC 的整个过程

按照整个流程来设置无代理 gRPC 应用 部署以下服务:

  1. 使用最新的补丁程序将 gRPC 客户端更新到最新版本 gRPC。
  2. 更新您客户的创建通道时创建的 gRPC 名称解析器架构 指定 Cloud Service Mesh 引导文件。
  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 服务,请参阅 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 客户端的负载平衡按通道进行。

将目标 URI 中使用的服务名称添加到 Cloud Service Mesh 配置。例如,在 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。

metadata xDS 服务器的特定信息。
TRAFFICDIRECTOR_MESH_NAME 如果该字段为空或未指定,则值将设置为 default
locality gRPC 客户端运行所在的 Google Cloud 可用区。

继续设置流程

满足本文档中所述的前提条件后,请继续操作 这些文档之一(如果您要配置 Cloud Service Mesh) 使用服务路由 API: