跳到主要内容

插件系统

设计目标

当前插件系统的目标仍然是:

  • 轻核心、重插件
  • 可按插件拆分 runtime 逻辑
  • 可按插件拆分 DB schema / query
  • 可按插件拆分 management API 注册

当前能力面

一个插件当前可以提供:

  1. route middleware
  2. route pipeline stages
  3. db schema / sql queries
  4. management ConnectRPC services

注册入口仍然是 plugins/registry.go

当前 route pipeline 语义

现在的 route pipeline 不再是“启动时构建一条固定链”,而是:

  1. 请求先命中 route
  2. runtime resolver 拿到当前 route / tenant / matched route
  3. 再按这条 route 的字段动态构建 pipeline

这让认证插件可以按 route 条件注入,而不是全局固定开启。

当前认证插件

当前内置认证相关插件主要有:

  • passthrough-auth-token
  • legacy-api-key-auth
  • consumer

route 级注入优先级:

  1. disable_auth
  2. passthrough_auth_token
  3. legacy_bearer_auth_tokens
  4. consumer

其中:

  • passthrough-auth-token 命中后直接 allow
  • legacy-api-key-auth 校验 route 自带 bearer token
  • consumer 负责 consumer_api_keys 鉴权和 consumer 约束

多认证插件并存时,语义是 AND

认证插件与分组

auth 插件现在还可以向 runtime state 输出“可用组约束”。

规则是:

  • 空约束表示“不限制组”
  • 非空约束会参与 route / consumer / api key 的组交集

最终 upstream selector 使用这个交集去筛 upstreams.group

Plugin-owned schema

当前 schema 已经开始按插件拆分:

  • consumer 插件拥有 consumer / consumer api key 相关 schema 与查询
  • passthrough-auth-token 插件拥有 route passthrough auth token 相关 schema

核心原则仍然是:

  • 业务能力尽量归属插件
  • runtime / management / schema 一起按插件收口
  • 不再依赖旧的全局大表去承载所有功能

当前未完成项

插件系统后续仍会继续承接:

  • fallback / retry 策略插件化
  • 更完整的负载均衡策略
  • protocol conversion
  • 计费 / credit runtime hook