Traffic Director 概览

Traffic Director 是应用网络的代管式控制层面。 Traffic Director 允许您提供具有高可用性的应用网络功能(包括流量管理和可观测性)的全球高可用性服务。

随着部署中服务和微服务数量的增加,您通常开始遇到常见的应用网络挑战,例如:

  • 如何使我的服务具有良好的弹性?
  • 如何获取服务流量以及服务如何相互通信?
  • 当我的服务相互通信时,我如何理解发生了什么?
  • 如何在不中断的情况下更新我的服务?
  • 如何管理使部署成为可能的基础架构?
服务需要相互通信。
服务需要相互通信(点击放大)

Traffic Director 可帮助您在基于服务的现代部署中解决这些类型的挑战。最重要的是,它依赖于 Google Cloud 管理的基础架构,因此您无需管理自己的基础架构即可获得一流的功能。您专注于交付可解决业务问题的应用代码,同时让 Traffic Director 管理应用网络的复杂性。

服务网格的 Traffic Director

解决应用网络挑战的一种常见模式是使用服务网格。Traffic Director 支持服务网格以及多种符合您需求的其他部署模式。

典型的服务网格。
典型的服务网格(点击放大)

在典型的服务网格中,情况如下:

  • 将服务部署到 Kubernetes 集群。
  • 每个服务 Pod 都有一个专用代理(通常是 Envoy)作为 Sidecar 代理运行。
  • 每个 Sidecar 代理都会连接到集群中安装的网络基础架构(一个控制层面)。控制层面告知 Sidecar 代理服务网格中的服务、端点和政策。
  • 当 Pod 发送或接收请求时,请求会转到 Pod 的 Sidecar 代理。例如,Sidecar 代理会将请求发送至其预期的目的地,从而处理该请求。

在此文档中的图表中,六面粉色的图标表示代理。 控制层面连接到每个代理,并提供代理处理请求所需的信息。两个框之间的箭头显示流量。例如,Service A 中的应用代码会发送请求。代理会处理请求并将其转发给 Service B

此模型使您可以将网络逻辑移出应用代码。您可以专注于交付业务价值,同时让您的基础架构负责应用网络。

Traffic Director 有何不同之处

Traffic Director 的工作原理与该模型类似,但在重要方面却有所不同。首先,Traffic Director 是一项由 Google Cloud 管理的服务。无需安装它,它不会在您的集群中运行,您无需维护它。

在下图中,Traffic Director 是控制层面。此 Kubernetes 集群中有 4 项服务,每项服务都连接到 Traffic Director。Traffic Director 提供代理路由请求所需的信息。例如,属于 Service A 的 Pod 中的应用代码会发送请求。与此 Pod 一起运行的 Sidecar 代理会处理该请求并将其路由到 Service B 中的 Pod。

与 Traffic Director 的服务网格示例。
Traffic Director 的服务网格示例(点击放大)

服务网格进阶

与典型服务网格相比,Traffic Director 支持更多的部署。

多集群 Kubernetes

通过 Traffic Director,您可以获得适用于 Kubernetes 集群的应用网络。在下图中,Traffic Director 为 us-central1europe-west1 中的 Kubernetes 集群提供了控制层面。请求可以在 us-central1 中的三项服务、europe-west1 的两个服务之间以及两个集群中的服务之间路由。

使用 Traffic Director 的多集群 Kubernetes 的示例。
使用 Traffic Director 的多集群 Kubernetes 的示例(点击放大)

您的服务网格可以跨多个 Google Cloud 区域的多个 Kubernetes 集群进行扩展。一个集群中的服务可以与另一个集群中的服务进行通信。您甚至可将服务包含到多个集群中的 Pod。

使用 Traffic Director 的基于邻近度的全球负载平衡功能,发送到 Service B 的请求将转到可处理请求的最近 Pod。您还将获得无缝的故障转移;如果某个 Pod 处于关闭状态,即使该 Pod 位于另一个 Kubernetes 集群中,该请求也会自动故障转移到可以为该请求提供服务的另一个 Pod。

虚拟机

Kubernetes 越来越受欢迎,但许多工作负载都部署到虚拟机 (VM) 实例中。Traffic Director 也能够解决这些工作负载的应用网络问题;基于虚拟机的工作负载可与基于 Kubernetes 的工作负载进行互操作。

在下图中,流量通过外部 HTTP(S) 负载平衡进入您的部署。它被路由到 asia-southeast1 的 Kubernetes 集群中的 Service Aeurope-west1 中的虚拟机上的 Service D

使用 Traffic Director 的虚拟机和 Kubernetes 示例。
使用 Traffic Director 的虚拟机和 Kubernetes 示例(点击放大)

Google 提供了一种无缝机制,用于通过 Traffic Director 设置基于虚拟机的工作负载。您只能向 Compute Engine 虚拟机实例模板添加标志,Google 会处理基础架构设置。此设置包括安装和配置用于实现应用网络功能的代理。

无代理 gRPC

gRPC 是一个功能丰富的开源 RPC 框架,可用于编写高性能微服务。利用 Traffic Director,您可以轻松向 gRPC 应用提供应用网络功能(例如服务发现、负载平衡和流量管理)。如需了解详情,请参阅适用于服务网格的 Traffic Director 和 gRPC® 无代理服务

在下图中,gRPC 应用将流量路由到一个区域的 Kubernetes 集群中的服务,并路由到在不同区域的虚拟机上运行的服务。其中两种服务包括 Sidecar 代理,其他服务是无代理的。

使用 Traffic Director 的无代理 gRPC 应用示例。
使用 Traffic Director 的无代理 gRPC 应用示例(点击放大)

Traffic Director 支持无代理 gRPC 服务。这些服务使用的是支持 xDS API 的最新版开源 gRPC 库。您的 gRPC 应用可以使用 Envoy 使用的相同 xDS API 连接到 Traffic Director。

连接应用后,gRPC 库将处理应用网络功能,例如服务发现,负载平衡和流量管理。由于此功能在 gRPC 中原生运行,因此不需要服务代理,因此它们称为无代理 gRPC 应用。

Ingress 和网关

对于许多使用场景,您需要处理并非由 Traffic Director 配置的客户端的流量。例如,您可能需要将公共互联网流量引入您的微服务。您可能还需要将负载平衡器配置为反向代理,使其先处理来自客户端的流量,然后再发送到目标。

在下图中,外部 HTTP(S) 负载平衡器为外部客户端启用 Ingress,流量路由到 Kubernetes 集群中的服务。内部 HTTP(S) 负载平衡器将内部流量路由到虚拟机上运行的服务。

适用于 Ingress 的 Cloud Load Balancing 的 Traffic Director。
适用于 Ingress 的 Cloud Load Balancing 的 Traffic Director(点击放大)

Traffic Director 可与 Cloud Load Balancing 配合使用,以提供托管式入站体验。您可以设置外部或内部负载平衡器,然后配置该负载平衡器,以将流量发送到您的微服务。在上图中,公共互联网客户端通过外部 HTTP(S) 负载平衡访问您的服务。客户端(例如位于 Virtual Private Cloud (VPC) 网络中的微服务)使用内部 HTTP(S) 负载平衡来访问您的服务。

在下图中,europe-west1 区域中的虚拟机运行一个代理,该代理充当三项未运行代理的网关。来自外部 HTTP(S) 负载平衡器和内部 HTTP(S) 负载平衡器的流量会路由到网关,然后路由到三个服务。

用于配置网关的 Traffic Director。
用于配置网关的 Traffic Director(点击放大)

对于某些使用场景,您可能需要设置 Traffic Director 以配置网关。此网关本质上是反向代理(通常是在一个或多个虚拟机上运行的 Envoy),用于侦听入站请求、对其进行处理并将它们发送到目标位置。该目标可以位于任何 Google Cloud 区域或 Google Kubernetes Engine (GKE) 集群中。您甚至可以通过混合连接从 Google Cloud 外部访问该 Google Cloud 的目标。

多个环境

无论是在 Google Cloud、本地环境、其他云中,还是所有服务中的服务,您的基本应用网络挑战都将保持不变。如何获取这些服务的流量?这些服务如何相互通信?

在下图中,Traffic Director 将流量从在 Google Cloud 中运行的服务路由到 Service G(在其他公有云中运行)和 Service EService F,两者均运行于本地数据中心。Service AService BService C 使用 Envoy 作为 Sidecar 代理,而 Service D 是无代理 gRPC 服务。

用于在多个环境之间通信的 Traffic Director。
用于跨环境通信的 Traffic Director(点击放大)

使用 Traffic Director,您可以将请求发送到 Google Cloud 外部的目标。这允许您使用 Cloud Interconnect 或 Cloud VPN 以私密方式将流量从 Google Cloud 内部服务路由到其他环境中的服务或网关。

设置 Traffic Director

设置 Traffic Director 包含两个步骤。完成设置过程后,您的基础架构将处理应用网络,Traffic Director 会根据部署的更改使所有内容保持最新。

部署应用

首先,将您的应用代码部署到容器或虚拟机。Google 提供的机制可让您轻松地将应用网络基础结构(通常是 Envoy 代理)添加到您的虚拟机实例和 Pod。此基础架构是为了与 Traffic Director 通信并了解您的服务。

配置 Traffic Director

接下来,您需要配置全球服务,并定义如何处理流量。如需配置 Traffic Director,您可以使用 Google Cloud Console、gcloud 命令行工具、Traffic Director API 或其他工具(如 Terraform)。

完成这些步骤后,Traffic Director 就可以配置您的应用网络基础架构。

基础架构处理应用网络

当应用向 my-service 发送请求时,您的应用网络基础架构(例如 Envoy Sidecar 代理)会根据从 Traffic Director 收到的信息来处理请求。这使得 my-service 的请求可以无缝路由到能够接收请求的应用实例。

监控和持续更新

Traffic Director 监控构成您的服务的应用实例。此监控使 Traffic Director 发现服务运行状况良好或服务容量已发生变化(例如,创建了新的 Kubernetes Pod 时)。根据这些信息,Traffic Director 会持续更新您的应用网络基础架构。

功能

Traffic Director 的功能向您的微服务提供应用网络功能。本部分将讨论一些主要内容。

全代管式控制层面、运行状况检查和负载平衡

您希望将时间花费在管理基础架构上,而不是花费在管理基础架构上。Traffic Director 是具有正常运行时间服务等级协议 (SLA) 的全代管式解决方案,因此您无需安装、配置或更新基础架构。您受益于 Google 用于进行运行状况检查和全球负载平衡的同一基础架构。

基于开源产品构建

Traffic Director 使用 EnvoyIstio 等流行开源项目使用的控制层面 (xDS) API。如需查看支持的 API 版本,请参阅 xDS 控制层面 API

提供应用网络功能的基础架构(Envoy 或 gRPC,具体取决于您的使用场景)同样是开源的,因此您无需担心后者会被锁定专门的基础架构。

扩缩

从一次性应用网络解决方案到包含数千项服务的大规模服务网格部署,Traffic Director 可满足您的伸缩要求。

服务发现以及跟踪您的端点和后端

当应用向 my-service 发送请求时,您的基础架构会不懈地处理请求并将其发送到正确的目标。您的应用无需了解有关 IP 地址、协议或其他网络复杂性的任何信息。

全球负载平衡和故障转移

Traffic Director 使用 Google 的全局负载平衡和运行状况检查,根据后端近距离、运行状况和容量以最优方式平衡流量。通过自动将流量故障转移到运行状况良好且具有容量的后端,您可以提高服务可用性。

流量管理

借助高级流量管理,包括路由、请求操作(基于主机名、路径、标头、Cookie 等),您还可以确定服务之间的流量流动方式。对于 Canary 部署,您还可以应用重试、重定向和基于权重的流量拆分等操作。故障注入、流量镜像和离群值检测等高级模式使 DevOps 使用场景可以提高弹性。

可观测性

您的应用网络基础架构会收集遥测信息,例如指标、日志和跟踪记录,这些信息可集中在 Google Cloud 运维套件中聚合。收集好信息后,您可以获取数据洞见并创建提醒,以便在出现问题时获得通知。

后续步骤