Envoy Gateway 的 Gateway API 扩展功能介绍 - Tetrate
文章目录
背景
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/
最新文章
- Envoy Gateway 的 Gateway API 扩展功能介绍 – Tetrate
- 使用Django REST Framework构建API——第二部分
- 鸿蒙应用实践:利用扣子API开发起床文案生成器
- 如何获取OpenRouter API Key 密钥(分步指南)
- OpenAI Responses API 使用指南:构建智能响应的强大引擎
- 解码API Key 密钥:基本用途和安全最佳实践
- .NET Core微服务之路:基于Ocelot的API网关实现–http/https协议篇
- 利用Python调用百度千帆大模型接口实战指南
- WebSocket与REST:深入解析两者之间的区别
- 探索 DeepSeek API – 聊天补全及更多功能 – SerpApi
- 如何高效使用Nextjs API路由 – NextBuild
- Go-Zero定义API实战:探索API语法规范与最佳实践