1. ApisixPluginConfig 的作用

  • 插件配置复用:将插件配置定义为独立的资源,供多个路由或服务引用。
  • 解耦插件与路由:修改插件配置时,只需更新 ApisixPluginConfig,无需逐个修改路由。
  • 支持复杂配置:避免在 Ingress 的 Annotations 中编写冗长的 JSON。
  • plugin_config_id: 通过这种方式添加的插件,将不会在apisix dashboard上显示,这块需要注意,但插件本身是生效的。

2. 使用步骤

(1) 创建 ApisixPluginConfig 资源

定义插件的具体配置(例如限流插件 limit-count):

apiVersion: apisix.apache.org/v2
kind: ApisixPluginConfig
metadata:
name: limit-config
spec:
plugins:
- name: limit-count
enable: true
config:
_meta:
disable: false #注意这行是必须的,否则在dashboard的路由>高级特性>插件模板配置中会出现白屏的情况
count: 100
time_window: 60
key: remote_addr
policy: local

(2) 在 ApisixRoute 或 Ingress 中引用

通过 plugin_config_name 字段关联到路由:

方式一:在 ApisixRoute 中引用
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: my-route
spec:
http:
- name: rule1
match:
hosts: ["example.com"]
paths: ["/*"]
backends:
- serviceName: my-service
servicePort: 80
# 引用插件配置
plugin_config_name: limit-config

注意:如果apisix-ingress中使用了自已的域名,那网关的域名就失效了,这块需要注意一下

方式二:在 Ingress 中通过注解引用
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
k8s.apisix.apache.org/plugin-config-name: "limit-config" # 指定插件配置名称
spec:
ingressClassName: apisix
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80

3. 验证配置

(1) 检查 ApisixPluginConfig 状态

kubectl get apisixpluginconfig limit-config -o yaml

如果是阿里云容器平台上,它会在自定义资源里出现

apisix-dashboard的路由》高级特性》插件模板会展示你的插件配置

(2) 查看 APISIX 路由详情

通过 Admin API 检查路由是否关联了插件:

curl http://<APISIX_ADMIN_IP>:9180/apisix/admin/routes -H 'X-API-KEY: <ADMIN_KEY>'

预期输出中应包含 limit-count 插件的配置。


4. 优势对比

方式 维护成本 复用性 灵活性 适用场景
ApisixPluginConfig 多个路由共享同一插件
Ingress Annotations 简单插件、单路由配置

5. 注意事项

  1. 作用域限制

    • 默认情况下,ApisixPluginConfig 是命名空间级别的资源,需确保路由和插件配置在同一命名空间。若需跨命名空间引用,需配置 APISIX Ingress Controller 的 scope 参数为 cluster
  2. 版本兼容性
    • 确保 APISIX Ingress Controller 版本支持 ApisixPluginConfig(v2.7+ 推荐使用)。
  3. 配置冲突
    • 如果同时在 ApisixRouteApisixPluginConfig 中定义了同名插件,ApisixRoute 中的配置会覆盖 ApisixPluginConfig

6. 高级用法:组合多个插件

可以在一个 ApisixPluginConfig 中定义多个插件:

apiVersion: apisix.apache.org/v2
kind: ApisixPluginConfig
metadata:
name: global-plugins
spec:
plugins:
- name: limit-count
enable: true
config:
_meta:
disable: false
count: 200
time_window: 60
- name: cors
enable: true
config:
_meta:
disable: false
allow_origins: "*"
allow_methods: "GET,POST"

总结

通过 ApisixPluginConfig 可以实现插件的集中管理和复用,特别适合以下场景

  1. 多个路由需要相同插件配置(如全局限流、鉴权)。
  2. 插件配置复杂,需避免在 Ingress 中维护冗长的 JSON。
  3. 需要动态更新插件配置而不影响路由定义。

如果此前通过 Ingress Annotations 管理插件,可以逐步迁移到 ApisixPluginConfig,提升配置的可维护性。

apisix~ApisixPluginConfig的使用的更多相关文章

  1. OpenResty 社区王院生:APISIX 的高性能实践

    2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,OpenResty 软件基金会联合创始人王院生在活动上做了&l ...

  2. 再谈 APISIX 高性能实践

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,APISIX 主要作者王院生在活动上做了<APISIX ...

  3. 王院生:Apache APISIX 微服务网关极致性能架构解析

    2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做 ...

  4. APISIX系列 | 使用 docker-apisix 安装APISIX服务

    官方仓库:https://github.com/iresty/docker-apisix 官方仓库 拉取 git clone git@github.com:iresty/docker-apisix.g ...

  5. apisix 基于openresty 的api 网关

    apisix 是由openresty 团队开发并开源的微服务api gateway,还不错,官方文档也比较全,同时这个也是一个不错的学习openresty 的项目 以下为来自官方的架构图 插件加载 插 ...

  6. 网关 apache APISIX

    网关 apache - 国内版 Binghttps://cn.bing.com/search?q=%E7%BD%91%E5%85%B3+apache&qs=n&form=QBRE&am ...

  7. 基于 Apache APISIX 的下一代微服务架构

    2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,Apache APISIX PPMC 温铭做了题为 ...

  8. 从 0 到 1:Apache APISIX 的 Apache 之路

    2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,本次活动,邀请了来自Apache APISIX.又 ...

  9. apisix docker镜像构建及插件化开发

    高能劝退:lua开发,适合小白看!!! 前段时间有个项目,用的java程序做网关,压测tps只有1k多点,惨不忍睹. 后来公司有个大佬改用apisix做网关,tps飙升到1w多. 于是对神奇的apis ...

  10. apisix网关-构建docker镜像构建及插件化开发

    高能劝退:lua开发,适合小白看!!! 前段时间有个项目,用的java程序做网关,压测tps只有1k多点,惨不忍睹. 后来公司有个大佬改用apisix做网关,tps飙升到1w多. 于是对神奇的apis ...

随机推荐

  1. 深⼊mysqlONDUPLICATEKEYUPDATE语法的分析

    深⼊mysqlONDUPLICATEKEYUPDATE语法的分析mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLI ...

  2. 独立看门狗IWDG

    一.简介     STM32F10xxx内置两个看门狗(独立看门狗是12位递减计数器,窗口看门狗是7位递减计数器),提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门 ...

  3. Q:ssh远程连接慢的原因排查

    连接linux服务器一般都是使用SSH远程连接的方式.有时,SSH连接速度很慢,大约30s左右,但是ping时一切正常. 问题原因 1.server的sshd会去DNS查找访问的client ip的h ...

  4. NET中三种主机简单理解

    在NET中有三个不同的主机: .NET WebApplication 主机,也称为最小主机. 这是.NET 6中的一个新特性,旨在提供最小的启动时间和内存消耗.最小主机只包括.NET运行时的最基本组件 ...

  5. 深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异

    深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异 数据库统计信息的作用 在数据库系统中,查询优化在决定应用程序性能方面起着至关重要的作用. 高效的查询依赖于最新的数 ...

  6. Oracle DBA末日or重生?不会APEX=淘汰!

    残酷现实:传统DBA正在消失 "只会调优SQL的DBA,正在沦为数据库修理工!" 掌握APEX的DBA,薪资翻3倍,秒变企业核心资产! 一.DBA的死刑通知书 1. 云+AI:直接 ...

  7. rgba颜色转换为十六进制

    RGBA颜色转HEX 转换步骤: 先将r.g.b分别转换为十六进制,比如 r.g.b分别为 255,则转换后得到的为 FF.FF.FF 将a 乘以 255,然后获得的积的整数部分转换为十六进制,如 a ...

  8. gitlab - [01] 概述

    gitlab! 一.GitLab是什么 GitLab是一个集成了Git仓库管理.持续集成(CI/CD).项目管理.代码审查.包管理和发布在内的全方位DevOps平台.它为软件开发团队提供了从项目规划到 ...

  9. Flink学习(十八) 状态管理与状态编程

    Flink中的状态 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态:可以认为状态就是一个本地变量,可以被任务的业务逻辑访问:Flink会进行状态管理,包括状态一致性,故障处理以及 ...

  10. [解决方案]git pull : error: cannot lock ref 'refs/remotes/origin/*' (unable to update local ref)

    错误 git pull 报错不能更新本地分支 错误分析 本地分支跟远程分支不匹配 导致更新失败 解决方案 备份自己修改的代码 .git\refs\remotes (文件路径)对应删除你报错的分支 gi ...