具有混合连接网络端点组的 Cloud Service Mesh

Cloud Service Mesh 支持不局限于 Google Cloud、 包括本地数据中心和可供您使用的其他公有云 混合连接

您可以配置 Cloud Service Mesh,以便服务网格可以将流量发送到 Google Cloud 外部的端点这些端点包括:

  • 本地负载平衡器。
  • 另一个云平台中的虚拟机实例上的服务器应用。
  • 您可以使用混合连接与之连接,并且可以使用 IP 地址和端口进行访问的其他任何目的地。

您只要将每个端点的 IP 地址和端口添加到混合连接网络端点组 (NEG)。 混合连接 NEG 的类型为 NON_GCP_PRIVATE_IP_PORT.

Cloud Service Mesh 对本地服务和多云服务的支持 可让您执行以下操作:

  • 在全球范围内路由流量,包括路由到本地和多云端服务的端点。
  • 获享 Cloud Service Mesh 和服务网格的优势,包括 服务发现和高级流量管理等功能, Google Cloud 之外的现有基础架构上运行的 Google Cloud 服务。
  • 将 Cloud Service Mesh 功能与 Cloud Load Balancing 结合使用, 将 Google Cloud 网络服务引入多环境。

无代理 gRPC 客户端不支持混合连接 NEG (NON_GCP_PRIVATE_IP_PORT NEG)。

使用场景

Cloud Service Mesh 可以配置基于虚拟机和基于容器的网络 包括:

  • Google Cloud
  • 本地数据中心
  • 其他公有云

将网格流量路由到本地位置或其他云

此功能最简单的使用场景就是流量路由。您的 一个应用正在运行 Cloud Service Mesh Envoy 代理。Cloud Service Mesh 您的服务和每个服务的端点信息

将网格流量路由到本地位置或其他云。
将网格流量路由到本地位置或其他云(点击可放大)

在上图中,当您的应用向 on-prem 发送请求时, Cloud Service Mesh 客户端会检查出站请求和更新, 其目的地。目标设置为与 on-prem 服务关联的端点(在本例中为 10.2.0.1)。然后,请求将通过 Cloud VPNCloud Interconnect 传送到预期目标。

如果您需要添加更多端点,请更新 Cloud Service Mesh 以将其添加到 。您无需更改应用代码。

将现有本地服务迁移到 Google Cloud

通过将流量发送到非 Google Cloud 端点,您可以将流量路由到其他环境。您可以将此功能与高级流量管理相结合,从而在不同环境之间迁移服务。

从本地位置迁移到 Google Cloud。
从本地位置迁移到 Google Cloud(点击可放大)

上图对以前的模式进行了扩展。您无需配置 Cloud Service Mesh 将所有流量发送到 on-prem 服务,您 配置 Cloud Service Mesh 以使用基于权重的流量拆分功能进行拆分 跨两项服务传输流量

通过流量拆分,您可以先向 cloud 服务发送 0% 的流量,而向 on-prem 服务发送 100% 的流量。然后,您可以逐步增加发送到 cloud 服务的流量比例。最终,将 100% 的流量发送到 cloud 服务,并且您可以停用 on-prem 服务。

用于本地部署和多云端部署的 Google Cloud 网络边缘服务

最后,您可以将此功能与 Google Cloud 的现有网络解决方案结合使用。Google Cloud 提供丰富多样的网络 服务,例如使用 Google Cloud Armor 进行全球外部负载均衡 分布式拒绝服务攻击 (DDoS 攻击) 防护, 可为您的本地或多云端环境带来新功能的 Cloud Service Mesh 服务。最重要的是,您不需要向公共互联网公开这些本地服务或多云端服务。

跨多个环境的部署。
跨多个环境的部署(点击可放大)

在上图中,来自公共互联网客户端的流量会从 Google Cloud 负载均衡器(例如全球外部应用负载均衡器)进入 Google Cloud 的网络。当流量到达负载平衡器时,您可以应用网络边缘服务,例如 Google Cloud Armor DDoS 防护或 Identity-Aware Proxy (IAP) 用户身份验证。如需了解详情,请参阅多环境部署的网络边缘服务

应用这些服务后,流量会在 Google Cloud 上,在这种情况下,应用或独立代理(由 Cloud Service Mesh)将流量通过 Cloud VPN 或 Cloud Interconnect 连接到您的本地服务。

Google Cloud 资源和架构

本部分提供了有关 Google Cloud 的背景信息, 可用于提供 Cloud Service Mesh 代管式服务网格的资源 适用于本地和多云环境

下图描绘了支持 Cloud Service Mesh 支持本地和多云服务。关键资源是 NEG 及其网络端点。其他资源包括 您在标准 Cloud Service Mesh 设置中配置的资源。 为简单起见,该图标未显示多个全局后端服务等选项。

适用于本地和多云端服务的 Compute Engine 资源。
适用于本地和多云端服务的 Compute Engine 资源(点击可放大)

配置 Cloud Service Mesh 时,您可以使用全局后端服务 API 用于创建服务的资源。服务是包含以下内容的逻辑构造:

  1. 客户端尝试向服务发送流量时应用的政策。
  2. 处理发往服务的流量的一个或多个后端或端点。

本地服务和多云服务与 Cloud Service Mesh 进行配置。主要区别在于使用混合连接 NEG 来配置这些服务的端点。这些 NEG 将网络端点类型设置为 NON_GCP_PRIVATE_IP_PORT。您添加到混合连接 NEG 的端点必须是您的客户端可以访问的有效 IP:port 组合(例如,通过 Cloud VPN 或 Cloud Interconnect 等混合连接来访问)。

每个 NEG 都具有网络端点类型,并且只能包含相同类型的网络端点。此类型决定了以下事项:

  • 您的服务可以传送流量的目标。
  • 健康检查行为。

创建 NEG 时,请按如下方法配置 NEG,以便能够将流量发送到本地或多云端目标。

  • 将网络端点类型设置为 NON_GCP_PRIVATE_IP_PORT。这表示 IP 地址可以访问。如果此 IP 地址位于本地或其他云服务提供商的环境中,那么必须通过混合连接(例如 Cloud VPN 或 Cloud Interconnect 提供的连接)从 Google Cloud 进行访问。
  • 指定 Google Cloud 地区,以最大限度地减少 Google Cloud 与本地或多云端环境之间的地理位置距离。例如,如果您在德国法兰克福的某一环境中托管影响服务,则可以在创建 NEG 时指定 europe-west3-a Google Cloud 可用区。

此类型的网络端点的健康检查行为与其他类型的网络端点的健康检查行为不同。其他网络端点类型使用 Google Cloud 的集中式健康检查系统,而 NON_GCP_PRIVATE_IP_PORT 网络端点使用 Envoy 的分布式健康检查机制。有关详情,请参阅限制和其他注意事项部分。

连接和网络注意事项

您的 Cloud Service Mesh 客户端(例如 Envoy 代理)必须能够连接 位于trafficdirector.googleapis.com:443的 Cloud Service Mesh。如果您输了 连接到 Cloud Service Mesh 控制平面时,会出现以下情况:

  • 现有 Cloud Service Mesh 客户端无法接收配置 更新。它们继续根据其当前配置执行操作。
  • 新的 Cloud Service Mesh 客户端无法连接到 Cloud Service Mesh。除非重新建立连接,否则他们无法使用服务网格。

如果要在 Google Cloud 和本地或多云端环境之间发送流量,则必须通过混合连接来连接环境。我们建议通过 Cloud VPN 或 Cloud Interconnect 启用高可用性连接。

本地、其他云和 Google Cloud 子网 IP 地址和 IP 地址范围不得重叠。

限制和其他注意事项

以下是使用混合连接 NEG 的限制。

设置 proxyBind

您只能在创建 targetHttpProxy 时设置 proxyBind 的值。您不能更新现有 targetHttpProxy

连接和连接中断

如需详细了解连接要求和限制,请参阅连接和网络注意事项部分。

混合后端类型

后端服务可以具有虚拟机或 NEG 后端。如果后端服务具有 NEG 后端,则所有 NEG 都必须包含相同的网络端点类型。一个后端服务不能具有多个 NEG,且每个 NEG 都具有不同的端点类型。

网址映射可具有解析为不同后端服务的主机规则。您可能拥有一个仅包含混合连接 NEG 的后端服务(具有本地端点),以及一个包含独立 NEG 的后端服务(具有 GKE 端点)。网址映射可以包含规则(例如基于权重的流量拆分),用来在每个后端服务中拆分流量。

将包含类型为 NON_GCP_PRIVATE_IP_PORT 的端点的 NEG 与 Google Cloud 后端结合使用

您可以创建包含混合连接 NEG 以指向 Google Cloud 中的后端的后端服务。但是,我们不建议使用此模式,因为混合连接 NEG 不能受益于集中式健康检查。如需查看集中式健康检查和分布式健康检查的说明,请参阅健康检查部分。

端点注册

如果要向 NEG 添加端点,则必须更新 NEG。此操作可以手动完成,也可以使用 Google Cloud NEG REST API 或 Google Cloud CLI 自动完成。

当服务的新实例启动时,您可以使用 Google Cloud API 将实例注册到您配置的 NEG。使用 Compute Engine 代管实例组 (MIG) 或 GKE(在 Google Cloud 中)时,MIG 或 NEG 控制器会自动处理端点注册。

健康检查

使用混合连接 NEG 时,健康检查行为与标准集中式健康检查行为具有以下不同之处:

  • 对于 NON_GCP_PRIVATE_IP_PORT 类型的网络端点,Cloud Service Mesh 将其客户端配置为使用数据平面来处理健康检查。 为避免向健康状况不佳的后端发送请求,Envoy 实例会执行自己的健康检查并使用其自己的机制
  • 由于数据平面会处理健康检查,因此您无法使用 Google Cloud Console、API 或 Google Cloud CLI 来检索健康检查状态。

实际上,使用 NON_GCP_PRIVATE_IP_PORT 意味着:

  • 由于 Cloud Service Mesh 客户端各自在 则可能会看到网络流量增加 健康检查增加量取决于 Cloud Service Mesh 的数量 以及每个客户端需要正常运行的端点数量 检查。例如:
    • 将另一个端点添加到混合连接 NEG 时,现有 Cloud Service Mesh 客户端可能会开始对端点进行健康检查 混合连接 NEG 中的默认网络架构。
    • 当您将另一个实例(例如一个虚拟机 一个可运行您的应用代码的实例 Cloud Service Mesh 客户端),则新实例可能开始运行状况良好 请检查混合连接 NEG 中的端点。
    • 网络流量因健康检查而以二次函数 (O(n^2)) 速率增长。

VPC 网络

服务网格由其 Virtual Private Cloud (VPC) 网络名称唯一地标识。Cloud Service Mesh 客户端会从 Cloud Service Mesh 接收配置 基于引导加载程序中指定的 VPC 网络 配置。因此,即使您的网格完全位于 Google Cloud 数据中心之外,您也必须在引导配置中提供有效的 VPC 网络名称。

服务账号

在 Google Cloud 中,默认的 Envoy 引导配置为从 Compute Engine 和/或 GKE 部署环境读取服务账号信息。在 Google Cloud 外部运行时,您必须在 Envoy 引导中明确指定服务账号、网络名称和项目编号。此服务账号必须具有 拥有足够的权限来连接 Cloud Service Mesh API

后续步骤