使用混合连接网络端点组的 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 支持本地和多云端服务,因此您可以执行以下操作:
- 在全球范围内路由流量,包括路由到本地和多云端服务的端点。
- 在运行在 Google Cloud 以外的现有基础架构上的服务中引入 Cloud Service Mesh 和服务网格的优势(包括服务发现和高级流量管理等功能)。
- 将 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 VPN 或 Cloud Interconnect 传送到预期目标。
如果需要添加更多端点,请更新 Cloud Service Mesh,以便为您的服务添加这些端点。您无需更改应用代码。
将现有本地服务迁移到 Google Cloud
通过将流量发送到非 Google Cloud 端点,您可以将流量路由到其他环境。您可以将此功能与高级流量管理相结合,从而在不同环境之间迁移服务。
上图对以前的模式进行了扩展。您可以将 Cloud Service Mesh 配置为使用基于权重的流量拆分在两种服务之间拆分流量,而不是将 Cloud Service Mesh 配置为将所有流量都发送到 on-prem
服务。
通过流量拆分,您可以先向 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 启用本地和多云端服务支持的 Google Cloud 资源。关键资源是 NEG 及其网络端点。其他资源是您在标准 Cloud Service Mesh 设置过程中配置的资源。为简单起见,该图标未显示多个全局后端服务等选项。
配置 Cloud Service Mesh 时,您可以使用全局后端服务 API 资源来创建服务。服务是包含以下内容的逻辑构造:
- 客户端尝试向服务发送流量时应用的政策。
- 处理发往服务的流量的一个或多个后端或端点。
本地和多云端服务与 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 客户端无法连接到 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 客户端根据引导配置中指定的 VPC 网络从 Cloud Service Mesh 接收配置。因此,即使您的网格完全位于 Google Cloud 数据中心之外,您也必须在引导配置中提供有效的 VPC 网络名称。
服务账号
在 Google Cloud 中,默认的 Envoy 引导配置为从 Compute Engine 和/或 GKE 部署环境读取服务账号信息。在 Google Cloud 外部运行时,您必须在 Envoy 引导中明确指定服务账号、网络名称和项目编号。此服务账号必须具有连接 Cloud Service Mesh API 所需的足够权限。
后续步骤
- 如需为本地部署和多云端部署配置 Cloud Service Mesh,请参阅多环境部署的网络边缘服务。
- 如需详细了解 Cloud Service Mesh,请参阅 Cloud Service Mesh 概览。
- 如需了解互联网 NEG,请参阅具有互联网网络端点组的 Cloud Service Mesh。