准备使用 Envoy 和无代理工作负载设置服务路由 API
本文档介绍了使用服务路由 API 搭配 Envoy 代理或无代理 gRPC 作为数据平面设置 Cloud Service Mesh 的先决任务。
Cloud Service Mesh 的设置过程包括多个阶段。本文档介绍第一阶段:有关在虚拟机实例或无代理 gRPC 应用上配置 Cloud Service Mesh 的准备工作的说明。本文档后面部分的继续设置流程中列出了一些特定于平台的指南,其中介绍了其他阶段。
在阅读本指南之前,请先熟悉以下文档,其中简要介绍了如何将 Cloud Service Mesh 与服务路由 API 和 Gateway API 搭配使用:
前提条件
通过完成以下任务来准备环境:
- 根据您的业务需求设置项目。
- 启用结算功能。
- 授予所需权限。
- 为您的项目启用 Traffic Director API 和其他 API。
- 确保服务账号有足够的权限来访问 Traffic Director API。
- 启用 Cloud DNS API 并配置 Cloud DNS。
以下部分提供了各项任务的说明。
设置项目
如需设置和管理项目,请参阅创建和管理项目以及相关文档。
启用结算功能
确保您的 Google Cloud 项目已启用结算功能。 如需了解详情,请参阅为项目启用、停用或更改结算功能。
授予所需的 IAM 权限
您必须具有足够的 Identity and Access Management (IAM) 权限,才能创建虚拟机实例和修改网络以配置 Cloud Service Mesh。如果您在要启用 Cloud Service Mesh 的项目中拥有项目 Owner 或 Editor 角色(roles/owner
或 roles/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 的访问权限,请按照以下说明操作。
控制台
在 Google Cloud 控制台中,转到 IAM 和管理页面。
选择您的项目。
确定要向其添加角色的服务账号:
- 如果该服务账号不在成员列表中,则表明还没有为它分配任何角色。点击添加,然后输入该服务账号的电子邮件地址。
- 如果该服务账号已经在成员列表中,则表明它具有现有角色。请选择服务账号,然后点击角色标签页。
展开角色。对于要修改的服务账号,点击
修改。选择其他 > Traffic Director Client 角色。
如需将角色应用于服务账号,请点击保存。
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,请按照以下说明操作。
控制台
在 Google Cloud Console 中,转到您的项目的 API 库页面。
在搜索 API 和服务字段中,输入
Traffic Director
。在搜索结果列表中,点击 Traffic Director API。如果系统未列出 Traffic Director API,则表示您没有启用 Traffic Director API 所必需的权限。
在 Traffic Director API 页面上,点击启用。
在搜索 API 和服务字段中,输入
OS Config
。在搜索结果列表中,点击 OS Config。如果系统未列出 OS Config API,则表示您没有启用 Traffic Director API 所必需的权限。
在 OS Config API 页面上,点击启用。
在搜索 API 和服务字段中,输入
Compute
。在搜索结果列表中,点击 Compute Engine API。如果系统未列出 Compute Engine API,则表示您没有启用 Compute Engine API 所需的权限。
在 Compute Engine API 页面上,点击启用。
在搜索 API 和服务字段中,输入
Network Services
。在搜索结果列表中,点击 Network Services API。如果系统未列出 Network Services API,则表示您没有启用 Network Services API 所需的权限。
在 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 版本简介
1.20.0 或更高版本的 Envoy 才能与 Cloud Service Mesh 配合使用。 我们建议始终使用最新的 Envoy 版本,以确保已知的安全漏洞得到缓解。
如果您决定使用我们的自动化方法之一部署 Envoy,我们会按以下方式处理此任务:
使用 Compute Engine 虚拟机进行自动 Envoy 部署会安装经过验证可与 Cloud Service Mesh 搭配使用的 Envoy 版本。使用实例模板创建新虚拟机时,虚拟机将收到已经过我们验证的最新版本。如果您有长时间运行的虚拟机,则可以使用滚动更新来替换现有虚拟机和获取最新版本。
如需了解特定的 Envoy 版本,请参阅版本记录。如需了解安全漏洞,请参阅安全公告。
无代理 gRPC 的其他要求
本部分介绍了将 Cloud Service Mesh 与服务路由 API 和无代理 gRPC 搭配使用时需要满足的其他要求。如果您使用 Envoy 代理进行部署,请参阅使用 Envoy 代理的其他要求。
使用无代理 gRPC 的整体流程
按照以下整体过程在服务网格中设置无代理 gRPC 应用:
- 使用最新的补丁程序将 gRPC 客户端更新到最新版本 gRPC。
- 在创建通道并指定 Cloud Service Mesh 引导文件时,更新客户端的 gRPC 名称解析器方案。
- 配置 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 |
projects/PROJECT_NUMBER/networks/NETWORK_NAME/nodes/ID 提供一个唯一字符串作为 |
metadata |
xDS 服务器的特定信息。 |
TRAFFICDIRECTOR_MESH_NAME |
如果该字段为空或未指定,则值将设置为 default 。 |
locality |
gRPC 客户端运行所在的 Google Cloud 可用区。 |
继续设置流程
完成本文档中描述的前提条件后,如果您要使用服务路由 API 配置 Cloud Service Mesh,请继续执行以下任一文档中的操作:
- 使用
Mesh
资源设置无代理 gRPC 服务 - 使用 HTTP 服务设置 Envoy 代理
- 设置入站流量网关
- 使用
TCPRoute
资源设置 TCP 服务 - 使用
Mesh
和Route
资源设置跨项目引用 - 设置网关 TLS 路由