1. 课程导论:Envoy扩展过滤器与策略即代码资源配额模型集成案例

1.1 核心概念:Envoy扩展过滤器

Envoy 代理的核心设计哲学是“可编程的数据平面”。其 L4/L7 过滤器链(Filter Chain) 机制允许开发者在不修改 Envoy 核心代码的前提下,插入自定义的网络流量处理逻辑。本课程聚焦于 HTTP 过滤器扩展,通过编写 Wasm 或 Lua 扩展,在请求/响应路径上执行策略决策。

关键术语: 过滤器(Filter)、过滤器链(Filter Chain)、Wasm 扩展、Lua 扩展、解码器/编码器回调。

1.2 核心概念:策略即代码(Policy as Code)

策略即代码(PaC)将基础设施和应用程序的治理规则从人工审批或静态配置文件,转变为可版本控制、可自动化测试、可审计的代码。在云原生网关场景中,PaC 意味着将速率限制、配额检查、访问控制等策略,以声明式或可编程的方式嵌入到 Envoy 的请求处理流程中。

传统策略管理 策略即代码(PaC)
人工编辑 YAML/JSON 配置文件 使用高级语言(Rego, CUE)编写策略
策略变更依赖重启或热加载 策略变更实时生效,支持 A/B 测试
缺乏单元测试和版本控制 策略代码纳入 Git 仓库,支持 CI/CD
审计困难,依赖日志回溯 策略执行结果可结构化记录,支持审计

1.3 资源配额模型(Resource Quota Model)的演进

资源配额模型经历了从“静态硬限制”到“动态、多维、可协商”的演进过程。本课程将重点介绍一种适用于微服务网关的 分层配额模型,该模型能够同时处理全局配额、用户级配额和 API 级配额。

  1. 第一代:静态固定配额 —— 基于 IP 或 的固定速率限制,无法应对突发流量。
  2. 第二代:令牌桶/漏桶模型 —— 引入突发能力,但配额维度单一(仅限 QPS)。
  3. 第三代:多维资源配额模型 —— 同时限制 QPS、并发连接数、请求体大小、CPU 时间等。
  4. 第四代:策略驱动的动态配额模型 —— 配额规则由 PaC 引擎动态计算,支持基于上下文(时间、用户等级、服务健康度)的弹性调整。
课程聚焦: 本案例将实现第四代模型的核心子集——基于 Rego 策略的“请求体大小 + 并发请求数”联合配额检查。
资源配额模型演进路线图 第一代 静态固定配额 第二代 令牌桶/漏桶 第三代 多维资源配额 第四代 策略驱动动态 说明:第四代模型通过 PaC 引擎(如 OPA/Rego)动态计算配额,支持基于用户等级、服务健康度等上下文的弹性调整。 本课程将实现第四代模型的核心子集:请求体大小 + 并发请求数的联合配额检查。

1.4 本课程目标

完成本课程后,学员将能够:

  • 理解 Envoy 扩展过滤器的生命周期和 Wasm 扩展开发流程。
  • 掌握 使用 Rego 语言编写资源配额策略,并集成到 Envoy 的请求处理链中。
  • 实现 一个完整的“请求体大小 + 并发请求数”联合配额检查过滤器。
  • 部署 基于 Istio 的 Sidecar 模式,验证策略在真实微服务环境中的生效情况。

1.5 学习路径与章节结构

本课程共 30 章,分为四个阶段:

阶段 章节范围 核心内容
基础篇 第 1-8 章 Envoy 过滤器原理、Wasm SDK 搭建、Rego 语法入门
核心实现篇 第 9-18 章 配额模型设计、过滤器状态管理、OPA 集成、并发控制
集成与部署篇 第 19-25 章 Istio 环境配置、Sidecar 注入、策略热更新、监控与告警
进阶与实战篇 第 26-30 章 性能调优、多集群配额同步、故障注入测试、生产级最佳实践
前置要求: 建议学员具备基本的 Kubernetes 操作经验,了解 Envoy 代理的基本概念,并熟悉至少一种编程语言(Go 或 Rust 更佳)。
课程学习路径与集成架构 学习路径 基础篇 (1-8章) 核心实现篇 (9-18章) 集成与部署篇 (19-25章) 集成架构(本案例) 客户端 Envoy 过滤器 (Wasm 扩展) OPA 策略引擎 (Rego 策略) 流程:客户端请求 → Envoy 过滤器拦截 → 调用 OPA 评估配额策略 → 返回决策(允许/拒绝)→ 过滤器执行配额扣减或拒绝请求

1.6 案例预期成果

通过本课程,你将构建一个完整的端到端系统:

  • Envoy 扩展过滤器:一个基于 Wasm 的 HTTP 过滤器,负责拦截请求并调用策略引擎。
  • Rego 策略库:包含资源配额定义、配额检查逻辑和超额处理规则。
  • 配额状态管理:使用 Redis 或本地内存维护并发请求数和已消耗的请求体大小。
  • Istio 集成:通过 EnvoyFilter CRD 将过滤器注入到 Istio 数据平面。
学习建议: 建议学员在本地搭建一个 Kind 或 Minikube 集群,并安装 Istio 1.18+ 版本,以便跟随课程进行实操练习。