- 从零学习envoy笔记 - Gateway总览
- 从零学习envoy笔记 - 学习EG API和Gateway API
- 从零学习envoy笔记 - 快速部署实验环境
- 从零学习envoy笔记 - 官方Task Backend Routing
- 从零学习envoy笔记 - 官方Task Backend Utilization Load Balancing
- 从零学习envoy笔记 - 官方Task Bandwidth Limit
- 从零学习envoy笔记 - 官方Task Client Traffic Policy
Envoy Gateway 是什么?
一句话来说:Envoy Gateway = Gateway API 标准资源 + Envoy Gateway 扩展 CRD + Envoy Proxy 数据面
Envoy Gateway 是一个 Kubernetes-native 的 API Gateway / 反向代理控制平面。它的作用不是自己直接处理业务流量,而是监听 Kubernetes 里的 Gateway API 和 Envoy Gateway 扩展资源,然后把这些声明式配置翻译成 Envoy Proxy 可以理解的 xDS 配置,最后由 Envoy Proxy 实例真正接收和转发流量。
官方文档把 Envoy Gateway 描述为一个用于管理 Envoy Proxy 的独立或 Kubernetes-based application gateway 项目。 在概念层面,用户通过标准 Gateway API 资源以及 Envoy Gateway 自己的 CRD 定义路由、安全和流量策略;Envoy Gateway Controller 负责 watch 这些资源并生成 Envoy Proxy 配置。
他的一个完整流量路径图如下:
| |
下文中,所有的原生 Gateway API 都称为 “Gateway API”,Envoy Gateway API 都称为 “EG API”,同理 “Envoy Gateway” 就统称为 “EG”
资源模型
在 EG (Envoy Gateway) 中,资源模型大概分为三种:
- Gateway API 标准资源
- Envoy Gateway 扩展资源: EG API
- Envoy Proxy 数据面
Gateway API 标准资源
这些是 Kubernetes SIG Network 定义的标准流量管理资源,属于 gateway.networking.k8s.io API 组。Gateway API 本身通常通过 CRD 安装到集群中 [1]。
支持如下的资源类型:
| |
快速理解方式:
- GatewayClass:选择哪个 Gateway Controller,例如 Envoy Gateway
- Gateway:创建一个流量入口,例如监听 80 / 443
- Route:描述请求怎么匹配、转发到哪个后端 Service
Envoy Gateway 扩展资源
Gateway API 只定义通用能力,但很多生产功能需要具体实现补充,例如限流、鉴权、JWT、OIDC、CORS、Envoy 参数、外部后端等,所以 Envoy Gateway 提供了自己的扩展 CRD。
常见一些资源如下:
| |
理解方式:
- BackendTrafficPolicy:定义 Gateway 到后端的行为
- ClientTrafficPolicy:定义客户端到 Gateway 的行为
- SecurityPolicy :定义ClientTrafficPolicy到BackendTrafficPolicy之间的策略,例如认证、鉴权、CORS、JWT、OIDC、API Key
- EnvoyProxy:Envoy 实例本身怎么部署、运行、暴露端口
- Backend:定义 Kubernetes Service 之外的后端
Currently supported extensions include
Backend,BackendTrafficPolicy,ClientTrafficPolicy,EnvoyExtensionPolicy,EnvoyGateway,EnvoyPatchPolicy,EnvoyProxy,HTTPRouteFilter, andSecurityPolicy[2]
Gateway API & Envoy Gateway API & Ingress API
- Ingress API: 早期 k8s 用于管理进入集群内部流量的一套标准,但由于 API 提供的功能有限,很多 proxy 通过扩展靠 annotation 来扩展,导致每个厂商的 Ingress controller 间配置不一致,迁移困难。
- Gateway API:k8s 用于管理集群的新 API 模型,把入口、监听器、路由、后端、策略拆开。
- Envoy Gateway API: envoy 厂商基于 Gateway API 模型使用 CRD 用于补充 Gateway API的不足,底层用 Envoy Proxy,提供例如 BackendTrafficProxy、ClientTrafficProxy、SecurityPolicy等高级功能。