多环境部署的 Traffic Director

Traffic Director 支持 Google Cloud 外部的环境,包括本地数据中心和其他可通过混合连接访问的公有云。您可以配置 Traffic Director,以便您的服务网格能够将流量发送到 Google Cloud 外部的端点。这些端点可以是本地负载平衡器、另一个云中的虚拟机上的服务器应用,或者可使用混合连接访问的任何其他目的地,它们可以用 IP 地址和端口表示。您只需将每个端点的 IP 地址和端口添加到混合连接网络端点组 (NEG)。

Traffic Director 支持本地和多云端服务,因此您可以:

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

使用场景

Traffic Director 可以在多个环境中配置基于虚拟机和基于容器的服务之间的网络,环境包括:

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

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

此功能的最简单使用场景是流量路由。您的应用正在运行 Traffic Director 客户端(Envoy 代理或无代理 gRPC)。Traffic Director 向客户端告知您的服务和每个服务的端点。

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

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

如果需要添加更多端点,只需更新 Traffic Director 即可将它们添加到您的服务中。您无需对应用代码进行任何更改。

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

通过将流量发送到非 Google Cloud 端点,您可以将流量路由到其他环境。您可以将此功能与高级流量管理结合使用,以在环境(以及其他使用场景)之间迁移服务。

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

上图对以前的模式进行了扩展。您可以将 Traffic Director 配置为使用基于权重的流量拆分在两种服务之间拆分流量,而不是将 Traffic Director 配置为将所有流量都发送到 on-prem 服务。

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

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

最后,您可以将此功能与 Google Cloud 的现有网络解决方案结合使用。Google Cloud 提供了各种各样的网络服务,例如全球外部负载平衡与 Google Cloud Armor for DDoS 防护,您现在可以将这些服务与 Traffic Director 搭配使用,以在您的本地或多云端服务中引入新功能。最重要的是,您不需要向公共互联网公开这些本地服务或多云端服务。

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

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

应用上述服务后,流量会在 Google Cloud 中短暂停止,其中的应用或独立代理(由 Traffic Director 配置)将 Cloud VPN 或 Cloud Interconnect 中的流量转发到您的本地服务。

架构和资源

本部分提供有关 Google Cloud 资源的背景信息,这些资源用来为本地和多云端环境提供 Traffic Director 管理的服务网格。

Google Cloud 资源

下图展示了为 Traffic Director 启用本地和多云端服务支持的 Google Cloud 资源。请注意,密钥资源是 NEG(及其网络端点)。其他资源是您要在标准 Traffic Director 设置过程中配置的资源。

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

为简单起见,上图中并未显示多个全球后端服务等选项。

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

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

本地和多云端服务与使用 Traffic Director 配置的其他任何服务一样。主要区别在于可使用混合连接 NEG 配置这些服务的端点。这些 NEG 的网络端点组类型设置为 non-gcp-private-ip-port。您添加到混合连接 NEG 的端点必须是您的客户端可以访问的有效 IP:port 组合(例如,通过 Cloud VPN 或 Cloud Interconnect 等混合连接来访问)。

NEG 具有网络端点类型,并且每个 NEG 只能包含同一类型的网络端点。此类型决定了:

  • 您的服务可以传送流量的目标
  • 运行状况检查行为

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

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

此类型的网络端点的运行状况检查行为与其他类型的网络端点的运行状况检查行为不同。其他网络端点类型使用 Google Cloud 的集中式运行状况检查系统,而 non-gcp-private-ip-port 网络端点使用 Envoy 的分布式运行状况检查机制。如需了解详情,请参阅限制和其他注意事项

连接和网络注意事项

  • 您的 Traffic Director 客户端(例如 Envoy 代理和无代理 gRPC 库)必须能够连接到位于 trafficdirector.googleapis.com:443 的 Traffic Director。如果与 Traffic Director 控制平面的连接中断,请执行以下操作:
    • 现有 Traffic Director 客户端无法接收来自 Traffic Director 的配置更新。它们继续根据其当前配置执行操作。
    • 新的 Traffic Director 客户端无法连接到 Traffic Director。除非重新建立连接,否则他们无法使用服务网格。
  • 如果要在 Google Cloud 和本地或多云端环境之间发送流量,则必须通过混合连接来连接环境。我们建议使用由 Cloud Interconnect 或 Cloud VPN 启用的高可用性连接。
  • 本地、其他云和 Google Cloud 子网 IP 地址和 IP 地址范围不得重叠。

限制和其他注意事项

设置 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 网络端点组 REST API 或 gcloud 命令行工具自动完成。当服务的新实例启动时,您可以使用 Google Cloud API 向已配置的 NEG 注册该实例。请注意,使用 Compute Engine MIG 或 GKE(在 Google Cloud 中)时,端点注册分别由 MIG 或 NEG 控制器自动处理。

运行状况检查

使用混合连接 NEG 时,运行状况检查行为与标准集中式运行状况检查行为不同:

  • 对于 gce-vm-ip-port 类型的网络端点,Traffic Director 会从 Google Cloud 的集中式运行状况检查系统接收端点运行状况信息。Traffic Director 将此信息提供给您的 Traffic Director 客户端,这样您便无需进行可能产生高额费用的基于数据平面的运行状况检查。
  • 对于 non-gcp-private-ip-port 类型的网络端点,Traffic Director 会将其客户端配置为使用数据平面来处理运行状况检查。Envoy 实例执行自己的运行状况检查并使用自己的机制,以避免将请求发送到运行状况不佳的后端。
  • 由于您的数据层面处理运行状况检查,因此您无法使用 Google Cloud Console、API 或 gcloud 检索运行状况检查状态。

实际上,使用 non-gcp-private-ip-port 意味着:

  • 仅支持 HTTP 和 TCP 运行状况检查。
  • 由于 Traffic Director 客户端以分布式方式处理运行状况检查,您可能会看到网络流量因执行运行状况检查而有所增加。网络流量增加取决于 Traffic Director 客户端的数量以及每个客户端进行运行状况检查所需的端点数量。例如:
    • 当您向混合连接 NEG 添加其他端点时,现有 Traffic Director 客户端可能会开始对混合连接 NEG 中的端点进行运行状况检查。
    • 当您向服务网格添加另一个实例(例如,运行应用代码及 Traffic Director 客户端的虚拟机实例)时,新实例可能会开始对混合连接 NEG 中的端点进行运行状况检查。
    • 网络流量因运行状况检查而以二次函数 (O(n^2)) 速率增长。

虚拟私有云网络

服务网格由其 VPC 网络名称唯一识别。Traffic Director 客户端根据引导配置中指定的 VPC 网络从 Traffic Director 接收配置。因此,即使您的网格完全位于 Google Cloud 数据中心之外,您也必须在引导配置中提供有效的 VPC 网络名称。

服务帐号

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

后续步骤

如需了解如何为本地和多云端部署配置 Traffic Director,请参阅多环境(本地、多云端)部署的网络边缘服务