Traffic Director 服务发现

Traffic Director 提供服务和端点发现。这样,您可以将运行代码的虚拟机和容器分组为您的服务的“端点”。Traffic Director 监控这些服务,以便与其客户端共享最新信息。因此,当某个应用使用 Traffic Director 客户端(例如 Envoy Sidecar 代理)发送请求时,使用有关您的服务的最新信息会受益。

在 Traffic Director 环境中,客户端是在虚拟机或容器上运行的应用代码,并且它们会将请求发送给服务器。服务器是接收此类请求的应用代码。Traffic Director 客户端是连接到 Traffic Director 且数据层面的一部分的 Envoy、gRPC 或其他 xDS 客户端。

在数据层面中,Envoy 或 gRPC 执行以下操作:

  1. 它会检查请求,并将请求与后端服务(您在部署期间配置的资源)相匹配。
  2. 匹配请求之后,Envoy 或 gRPC 会选择一个后端或端点并将请求定向到该后端或端点。

Service Discovery

Traffic Director 提供服务发现。配置 Traffic Director 时,您可以创建服务(后端服务)。此外,您还可以定义路由规则,以指定出站请求(您的应用代码发送的请求以及 Traffic Director 客户端处理的请求)与特定服务的匹配方式。因此,当 Traffic Director 客户端处理与规则匹配的请求时,可以选择应接收请求的服务。

例如:

  • 您有一个运行应用的虚拟机。此虚拟机具有连接到 Traffic Director 并代表应用处理出站请求的 Envoy Sidecar 代理。
  • 您配置了名为 payments 的后端服务。此后端服务具有两个 NEG 后端,它们指向运行 payments 服务代码的各个容器实例。
  • 您配置了具有转发规则(示例:IP 0.0.0.0 和端口 80)、目标代理和网址映射(示例:指向 payments 服务的主机名 payments.example.com)的路由规则映射。

使用此配置时,如果您的应用(在虚拟机上)向端口 80 上的 payments.example.com 发送 HTTP 请求,则 Traffic Director 客户端知道这是目的地为 payments 服务的请求。

如果您将 Traffic Director 与无代理 gRPC 服务搭配使用,则服务发现的工作原理类似。但是,gRPC 库充当 Traffic Director 客户端,仅获取您为其指定 xDS 解析器的服务的相关信息。默认情况下,Envoy 会获取在 Envoy 引导文件中指定的 Virtual Private Cloud 网络上配置的所有服务的相关信息。

端点发现

服务发现可让客户端了解您的服务。通过端点发现,客户端可以了解运行您的代码的实例。

创建服务时,您还需要指定该服务的后端。这些是代管式实例组 (MIG) 中的虚拟机,或者一般情况下,是网络端点组 (NEG) 中的容器。Traffic Director 会监控这些 MIG 和 NEG,以便了解创建和移除实例和端点的时间。

Traffic Director 会持续与其客户端共享有关这些服务的最新信息。这可让客户端避免将流量发送到不再存在的端点。此外,还可让客户端了解新端点并开始使用这些端点提供的额外容量。

在上面的示例中,Traffic Director 会为服务 shopping-cart 返回 MIG-1 中的两个运行状况良好的端点以及 MIG-2 中的三个运行状况良好的端点。除了向 MIG 或 NEG 添加端点并设置 Traffic Director 之外,您无需进行任何其他配置即可通过 Traffic Director 启用服务发现。

Sidecar 代理流量拦截在 Traffic Director 中的工作原理

Traffic Director 支持 Sidecar 代理模型。在此模型中,当应用将流量发送到其目的地时,流量会被 iptables 拦截,并重定向到应用运行所在主机上的 Sidecar 代理。Sidecar 代理决定如何平衡流量,然后将流量发送到其目的地。

在下图中(假设已正确配置 Traffic Director),Envoy 是 Sidecar 代理。Sidecar 代理与应用在相同的主机上运行。

名为 Web 的示例服务配置在 VIP 10.0.0.1:80 上,Traffic Director 可以在该端口上发现该服务并对其进行负载平衡。Traffic Director 通过转发规则配置(提供 VIP 和端口)发现设置。服务 Web 的后端已配置且正常运行,但它们位于图中 Compute Engine 虚拟机主机的外部。

Traffic Director 确定从主机到服务 Web 的流量的最佳后端是 192.168.0.1:80

Traffic Director 主机网络(点击可放大)
Traffic Director 主机网络(点击可放大)

图中的流量如下:

  1. 应用将流量发送到服务 Web,该服务解析为 IP 地址 10.0.0.1:80
  2. 主机上配置了 netfilter,因此前往 10.0.0.1:80 的流量会重定向到 10.0.0.1:15001
  3. 流量重定向到 Envoy 代理的拦截端口 127.0.0.1:15001
  4. 127.0.0.1:15001 上的 Envoy 代理拦截侦听器接收流量并执行对请求的原始目的地 (10.0.0.1:80) 的查询。查询将导致 192.168.0.1:8080 被选为最佳后端(由 Traffic Director 编程)。
  5. Envoy 通过网络与 192.168.0.1:8080 建立连接,并代理应用和此后端之间的 HTTP 流量,直到连接终止。