Envoy Gateway 的 Gateway API 扩展功能介绍 - Tetrate

作者:API传播员 · 2025-12-05 · 阅读时间:7分钟
Envoy Gateway 利用 Kubernetes 网关 API 的策略附件扩展机制,提供高级流量管理、安全性和自定义扩展功能,如速率限制、访问控制和负载均衡,简化 Kubernetes 入口配置。

背景

Kubernetes 网关 API传统 Ingress API 的一种更具表现力和可扩展性的替代方案,被视为下一代 Kubernetes 入口解决方案。网关 API 的一个显著优势是其提供了一种称为策略附件的显式扩展机制。与 Ingress API 不同,该机制允许控制器通过自定义策略扩展功能,而无需直接修改网关 API 本身。

Envoy Gateway 是基于 Envoy 构建的入口网关,利用网关 API 作为其配置语言,与最新的网关 API 版本完全兼容,支持多种资源类型,包括 Gateway、HTTPRoute、GRPCRoute、TLSRoute、TCPRoute 和 UDPRoute。Envoy Gateway 的目标是通过简化配置和管理流程,为用户提供更友好的体验。

此外,Envoy Gateway 还利用网关 API 的扩展机制,提供了丰富的附加功能,如速率限制、访问控制和 WebAssembly 扩展等,进一步增强了标准网关 API 的功能。

在本系列文章的第一部分中,我们将深入探讨 Envoy Gateway 的扩展功能,并介绍其为 Kubernetes 应用程序带来的附加价值。本文将涵盖以下内容:

  • Kubernetes 网关 API 扩展相较于 Ingress API 的优势
  • Envoy Gateway 中策略附件机制的工作原理
  • 如何使用 BackendTrafficPolicy 管理 Envoy 与后端之间的流量
  • 使用 SecurityPolicy 提供请求访问控制的方法
  • 利用 EnvoyExtensionPolicy 为 Envoy Gateway 开发自定义扩展

Kubernetes Ingress 的局限性

Ingress 是 Kubernetes 提供的一种 API 资源,用于定义管理集群入站流量的规则。尽管 Ingress API 提供了基本的 HTTP 路由功能,例如基于主机和路径的路由以及 TLS 终止,但其功能非常有限,难以满足现代应用程序复杂的流量管理需求。

为了解决这些限制,不同的 Ingress 控制器引入了非标准的扩展方法,例如通过注释或自定义 API 资源来增加功能。例如,NGINX Ingress 控制器通过注释支持正则表达式路径匹配,而 Traefik 则使用自定义资源 IngressRoute 实现类似功能。

然而,这些非标准扩展会导致 Ingress API 的可移植性受损。当用户在不同的 Ingress 控制器之间切换时,需要重新学习和配置不同的 API 设置。这种碎片化不仅增加了复杂性,还阻碍了 Kubernetes 生态系统的统一发展。


网关 API:下一代入口 API

为了解决 Ingress API 的局限性,Kubernetes 社区推出了网关 API。该 API 提供了一种统一、可扩展且功能丰富的方式来定义和管理集群的入站流量规则。

与 Ingress API 相比,网关 API 提供了更多功能,包括支持多种资源类型(如 Gateway、HTTPRoute、GRPCRoute、TLSRoute、TCPRoute 和 UDPRoute)以及更灵活的流量路由配置选项,例如路径匹配、标头匹配、主机匹配、TLS 配置、流量拆分和请求重定向等。

尽管网关 API 提供了强大的功能,但它仍然是一个通用标准,无法直接支持特定实现相关的功能。例如,速率限制和访问控制等功能在不同数据平面(如 Envoy 和 NGINX)上的实现方式各不相同,因此网关 API 无法为这些功能提供通用标准。

网关 API 的一个关键创新是策略附件机制。通过将自定义策略与 Gateway 和 HTTPRoute 等资源关联,控制器可以扩展 API 的功能,而无需修改网关 API 本身。这种机制增强了 API 的灵活性,使其能够支持高级流量管理、安全性和自定义扩展。

此外,网关 API 还支持其他扩展机制,例如自定义后端资源和过滤器资源,从而为不同控制器提供了标准化的扩展方式。


Envoy Gateway 的网关 API 扩展

Envoy 是一款功能强大的云代理,广泛应用于服务网格API 网关和边缘代理场景。然而,配置和管理 Envoy 可能非常复杂,通常需要编写大量配置文件。为了解决这一问题,Envoy 社区推出了 Envoy Gateway 项目。

Envoy Gateway 是一个基于 Envoy 的入口网关,旨在通过简化配置和管理流程,为用户提供更友好的体验。它以网关 API 作为配置语言,与最新版本完全兼容,并支持多种资源类型。

Envoy Gateway 还利用网关 API 的扩展机制,提供了一套丰富的附加功能,包括:

  • 策略附件:支持客户端流量策略、后端流量策略、安全策略、EnvoyExtensionPolicy 和 EnvoyPatchPolicy 等。
  • 自定义 HTTPRoute 筛选器:支持 URL 重写、直接响应等高级请求和响应处理功能。
  • 自定义后端:允许将流量路由到非 Kubernetes 后端,如 IP 地址、主机名或 UDS 地址。

接下来,我们将重点介绍 Envoy Gateway 提供的自定义策略资源。


政策附件机制

策略附件是网关 API 提供的一种扩展机制,允许将策略附加到 GatewayClass、Gateway、HTTPRoute、GRPCRoute 和 Service 等资源上。Envoy Gateway 利用这一机制实现了多种策略,展示了 Envoy 在流量管理方面的强大能力。

策略附件的范围和优先级如下:

  • 附加到父资源的策略适用于其所有子资源。
  • 如果父资源和子资源都附加了相同类型的策略,则子资源的策略优先。
  • 如果同一类型的多个策略附加到单个资源,则优先应用最早创建的策略。

ClientTrafficPolicy:管理客户端与 Envoy 之间的流量

ClientTrafficPolicy 是一种策略附件资源,用于配置客户端与 Envoy 之间的流量。它支持以下配置:

  • TCP 设置:包括 TCP 保持活动、超时等。
  • TLS 设置:支持 TLS 版本、密码套件和客户端证书验证等。
  • HTTP 设置:支持 HTTP 请求超时、空闲超时等。
  • 其他设置:包括代理协议支持和客户端原始 IP 地址检索等。

以下是一个 ClientTrafficPolicy 示例:

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: ClientTrafficPolicy
metadata:
  name: client-traffic-policy-example
spec:
  targetRef:
    kind: Gateway
    name: example-gateway
  tcp:
    keepalive: true
    timeout: 30s
  tls:
    version: TLSv1.2
    clientCertificate: true
  http:
    requestTimeout: 10s
    idleTimeout: 60s

后端流量策略:管理 Envoy 与后端之间的流量

BackendTrafficPolicy 用于配置 Envoy 与后端服务之间的流量。它支持以下功能:

  • 全局和本地速率限制
  • 多种负载均衡算法
  • 断路器配置
  • TCP 和 HTTP 设置

以下是一个 BackendTrafficPolicy 示例:

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
  name: backend-traffic-policy-example
spec:
  targetRef:
    kind: HTTPRoute
    name: example-route
  rateLimit:
    global: 1000
  loadBalancer:
    policy: ROUND_ROBIN

安全策略:请求的访问控制

SecurityPolicy 提供了多种访问控制功能,包括:

  • CORS 策略:配置允许的源、标头和方法。
  • 身份验证:支持 JWT、OIDC 和 Basic Auth 等。
  • 授权:支持基于 IP 和 JWT 声明的访问控制。
  • 外部身份验证:支持将请求转发到外部服务进行验证。

以下是一个 SecurityPolicy 示例:

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: SecurityPolicy
metadata:
  name: security-policy-example
spec:
  targetRef:
    kind: HTTPRoute
    name: example-route
  authentication:
    oidc:
      issuer: https://example.com
  authorization:
    ipAllowList:
      - 192.168.1.0/24

通过利用 SecurityPolicy,用户可以将复杂的安全策略从应用程序代码卸载到 Envoy Gateway,从而简化开发并增强安全性。


总结

Envoy Gateway 通过网关 API 的扩展机制,为 Kubernetes 用户提供了强大的流量管理、安全性和自定义扩展功能。通过策略附件机制,用户可以轻松实现高级功能,如速率限制、负载均衡和访问控制。

在下一篇文章中,我们将探讨如何使用 EnvoyExtensionPolicy 为 Envoy Gateway 创建自定义扩展。

原文链接: https://tetrate.io/blog/kubernetes-envoy-gateway-extensions/