路由简介

查看本文大纲

Envoy 中的 Route 是用来定义如何将入站 HTTP 请求转发到后端服务的关键配置。Envoy 的路由配置提供了高度灵活的路由决策和流量管理功能,使得开发者可以精确地控制请求流向及其处理方式。本文将详细介绍 Envoy 中的路由配置概念和其功能。

路由配置的作用

在 Envoy 中,路由配置负责将来自客户端的请求映射到上游服务。这包括定义请求应当如何被处理、是否应当被重写或重定向、以及应当被发送到哪个具体的上游集群。路由配置通常与 HTTP 连接管理器 过滤器一起使用,后者是处理 HTTP 流量的主要网络过滤器。

主要特性

Envoy 路由配置的主要特性包括:

  • 请求匹配:路由规则可以根据请求的属性如 HTTP 头部、URL 路径、查询参数等进行匹配。
  • 路由动作:一旦请求与某个路由规则匹配,可以进行多种动作,例如路由到特定的上游集群、重定向到另一个 URL、直接响应等。
  • 重写规则:允许在转发请求前修改请求的 URI、主机名或其他头部信息。
  • 超时与重试策略:对于每条路由规则,可以定义特定的超时和重试策略,以增强服务的健壮性。
  • 请求分流与加权路由:支持根据一定的比例将流量分配到不同的服务,或者根据权重分配流量到多个集群。

配置示例

以下是一个简单的 Envoy 路由配置示例,其中定义了一个基本的路由规则,该规则将所有根路径(/)的 GET 请求路由到名为 service_cluster 的上游集群:

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 80 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/", methods: ["GET"] }
                route: { cluster: service_cluster }
          http_filters:
          - name: envoy.filters.http.router

高级路由功能

除了基础的匹配和路由功能之外,Envoy 还提供了高级的路由功能,包括:

  • Header-to-Header 路由:允许基于请求头部中的特定键值对进行路由决策。
  • gRPC 路由:对 gRPC 交通进行支持,包括基于服务名和方法名的路由。
  • 环境敏感路由:支持基于运行时环境参数(如不同环境或配置标志)动态调整路由决策。

最后更新于 2024/11/27