本文是从零学习envoy笔记第一章
  • 从零学习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 配置。

他的一个完整流量路径图如下:

yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
K8S YAML
  
Gateway API / Envoy Gateway CRD
  
K8S apiserver
  
Envoy Gateway Controller
  
转换为 Envoy xDS 配置
  
Envoy Proxy 数据面
  
Service / Pod / 外部 Backend

下文中,所有的原生 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]

支持如下的资源类型:

text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
v1.GatewayClass
v1.Gateway
v1.ListenerSet
v1.HTTPRoute
v1.GRPCRoute
v1.TLSRoute
v1.TCPRoute
v1.UDPRoute
v1.BackendTLSPolicy
v1.ReferenceGrant

快速理解方式:

  • GatewayClass:选择哪个 Gateway Controller,例如 Envoy Gateway
  • Gateway:创建一个流量入口,例如监听 80 / 443
  • Route:描述请求怎么匹配、转发到哪个后端 Service

Envoy Gateway 扩展资源

Gateway API 只定义通用能力,但很多生产功能需要具体实现补充,例如限流、鉴权、JWT、OIDC、CORS、Envoy 参数、外部后端等,所以 Envoy Gateway 提供了自己的扩展 CRD。

常见一些资源如下:

text
1
2
3
4
5
6
7
8
9
Backend
BackendTrafficPolicy
ClientTrafficPolicy
SecurityPolicy
EnvoyProxy
EnvoyGateway
EnvoyPatchPolicy
EnvoyExtensionPolicy
HTTPRouteFilter

理解方式:

  • 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, and SecurityPolicy [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等高级功能。

Reference

[1] Kubernetes Gateway API

[2] Gateway API Extensions