使用 Python 自定义 APISIX 插件

本文介绍了如何使用Python自定义APISIX插件。通过APISIX的Runner,特别是Python Runner,开发者可以将Python代码应用于插件开发。详细步骤包括:启动Python Runner,配置APISIX,构建包含插件的Docker镜像,使用Helm Chart部署,以及编写和测试插件代码。示例代码展示了如何创建一个简单的插件并将其集成到APISIX路由中。

除了 APISIX 官方内置的插件之外,我们也可以根据自己的需求去自定义插件,要自定义插件需要使用到 APISIX 提供的 Runner,目前已经支持 Java、Go 和 Python 语言的 Runner,这个 Runner 相当于是 APISIX 和自定义插件之间的桥梁,比如 apache-apisix-python-runner 这个项目通过 Python Runner 可以把 Python 直接应用到 APISIX 的插件开发中,整体架构如下所示:

其中的 Plugin Runner 就是各语言的插件运行器,当配置 Plugin Runner 后,APISIX 会启动一个子进程运行 Plugin Runner,该子进程与 APISIX 进程属于同一个用户,当我们重启或重新加载 APISIX 时,Plugin Runner 也将被重启。

如果你为一个给定的路由配置了 ext-plugin-* 插件,请求命中该路由时将触发 APISIX 通过 Unix Socket 向 Plugin Runner 发起 RPC 调用。调用分为两个阶段:

  • ext-plugin-pre-req :在执行 APISIX 内置插件之前

  • ext-plugin-post-req :在执行 APISIX 内置插件之后

接下来我们就以 Python 为例来说明如何自定义插件,首先获取 apache-apisix-python-runner 项目:

➜ git clone https://github.com/apache/apisix-python-plugin-runner.git
➜ cd apisix-python-plugin-runner
➜ git checkout 0.1.0  # 切换刀0.1.0版本

如果是开发模式,则我们可以直接使用下面的命令启动 Python Runner:

➜ APISIX_LISTEN_ADDRESS=unix:/tmp/runner.sock python3 apisix/main.py start

启动后需要在 APISIX 配置文件中新增外部插件配置,如下所示:

➜ vim /path/to/apisix/conf/config.yaml
apisix:
  admin_key:
    - name: "admin"
      key: edd1c9f034335f136f87ad84b625c8f1
      role: admin

ext-plugin:
<think>我们正在讨论Apache APISIX支持的插件列表。根据引用[1]和[2],我们知道APISIX提供了丰富的流量管理功能,包括负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等。引用[3]提到了一个具体的插件——CSRF安全插件。引用[4]则提到了APISIX插件机制,它允许在不同的阶段(如access、rewrite、header filter等)插入插件。 Apache APISIX插件生态非常丰富,目前支持70多个开箱即用的插件(截至2023年10月,官方文档显示有80多个插件)。这些插件覆盖了多个方面,包括安全、流量控制、可观测性、请求转换等。 以下是一些常见的插件类别及代表性插件: 1. **安全类插件**: - `key-auth`:基于Key的身份验证 - `jwt-auth`:JWT(JSON Web Token)身份验证 - `basic-auth`:基本身份验证 - `ip-restriction`:IP黑白名单 - `cors`:跨域资源共享(CORS) - `csrf`:跨站请求伪造保护(如引用[3]所述) - `consumer-restriction`:根据消费者(consumer)进行访问限制 - `openid-connect`:OpenID Connect身份验证 - `ldap-auth`:LDAP身份验证 2. **流量控制类插件**: - `limit-req`:请求速率限制(基于漏桶算法) - `limit-conn`:限制并发请求数 - `limit-count`:限制请求数量(如引用中提到的配置) - `request-validation`:请求验证 - `proxy-cache`:代理缓存 - `traffic-split`:流量切分(用于金丝雀发布等) - `fault-injection`:故障注入(模拟服务故障) 3. **可观测性类插件**: - `prometheus`:暴露Prometheus格式的指标 - `skywalking`:Apache SkyWalking集成 - `zipkin`:Zipkin集成(分布式跟踪) - `datadog`:Datadog集成 - `http-logger`:将访问日志发送到HTTP服务器 - `tcp-logger`:将日志发送到TCP服务器 - `kafka-logger`:将日志发送到Kafka - `udp-logger`:将日志发送到UDP服务器 - `syslog`:将日志发送到Syslog 4. **请求/响应转换类插件**: - `proxy-rewrite`:代理重写(修改请求的URI、方法、主机头等) - `response-rewrite`:重写后端响应 - `grpc-transcode`:gRPC转码(将HTTP请求转为gRPC请求) - `grpc-web`:支持gRPC-Web - `serverless`:在APISIX中运行无服务器函数(如Lua函数) 5. **其他功能插件**: - `redirect`:重定向 - `echo`:直接返回响应(用于测试) - `server-info`:暴露APISIX服务器信息 - `batch-requests`:批量请求支持 - `mqtt-proxy`:MQTT协议代理 - `websocket-proxy`:WebSocket代理 注意:插件列表会不断更新,具体以官方文档为准。用户可以通过APISIX的Admin API动态添加、修改或删除插件配置,无需重启服务(热加载)[^2]。 由于插件数量众多,这里无法一一列举。建议访问官方文档的插件部分查看完整列表:https://apisix.apache.org/zh/docs/apisix/plugins/ 此外,如果内置插件不能满足需求,用户还可以使用自定义插件(支持Lua和Java等语言)进行扩展。 因此,回答用户的问题:Apache APISIX支持70多个开箱即用的插件,覆盖安全、流量控制、可观测性、请求转换等多个方面。 下面,我们生成相关问题: 1. 如何在Apache APISIX中启用JWT身份验证插件? 2. 如何使用APISIX的`traffic-split`插件实现金丝雀发布? 3. 如何配置APISIX的Prometheus插件以监控API流量? 4. APISIX插件热加载是如何实现的? 注意:在回答中,我们引用了[1][2][3]。</think>### Apache APISIX 支持的插件列表 Apache APISIX 提供 **80+ 开箱即用插件**,覆盖安全、流量管理、可观测性等场景。以下是核心分类及代表性插件(基于官方文档整理[^1][^2]): --- #### 一、安全防护类 1. **身份认证** - `key-auth`:API 密钥认证 - `jwt-auth`:JWT 身份验证 - `basic-auth`:基础用户名/密码认证 - `openid-connect`:OAuth 2.0 协议集成 - `casbin`:基于 RBAC 的访问控制 2. **攻击防护** - `cors`:跨域资源共享控制 - `csrf`:跨站请求伪造防护(自动生成/验证 Token)[^3] - `ip-restriction`:IP 黑白名单 - `bot-detection`:恶意爬虫拦截 --- #### 二、流量管理类 1. **流量控制** - `limit-req`:请求速率限制(漏桶算法) - `limit-count`:请求次数限制(固定窗口)[^2] - `limit-concurrency`:并发连接数限制 2. **高级路由** - `traffic-split`:金丝雀发布/灰度流量切分 - `proxy-mirror`:请求镜像(影子流量) - `fault-injection`:故障注入(模拟服务异常) 3. **协议转换** - `grpc-transcode`:HTTP-JSON 转 gRPC - `websocket-proxy`:WebSocket 协议代理 --- #### 三、可观测性类 1. **日志集成** - `http-logger`:HTTP 请求日志推送 - `kafka-logger`:日志写入 Kafka - `elasticsearch-logger`:ES 日志存储 2. **监控指标** - `prometheus`:暴露 Prometheus 格式指标 - `skywalking`:Apache SkyWalking 链路追踪 - `datadog`:Datadog 监控集成 --- #### 四、请求转换类 1. **内容改写** - `proxy-rewrite`:动态修改 URI/请求头 - `response-rewrite`:重写响应内容及状态码 - `grpc-web`:gRPC-Web 协议支持 2. **缓存优化** - `proxy-cache`:响应内容缓存 - `request-validation`:请求参数校验 --- #### 五、其他实用插件 | 插件名称 | 功能描述 | |------------------------|-----------------------------------| | `serverless` | 动态执行 Lua/WebAssembly 函数 | | `mqtt-proxy` | MQTT 协议代理支持 | | `udp-logger` | 日志通过 UDP 协议转发 | | `node-status` | 实时获取 APISIX 节点状态 | > ✅ **完整插件列表**: > 访问官方文档查看实时更新:[APISIX Plugins 列表](https://apisix.apache.org/zh/docs/apisix/plugins) --- ### 插件核心优势 1. **动态加载** 插件配置**无需重启网关**,通过 Admin API 实时生效[^2][^4] 2. **热更新机制** 修改插件代码后自动重载,支持业务无缝升级 3. **自定义扩展** 支持 Lua/Java/Go/Python 开发自定义插件[^1] ```bash # 示例:启用 Prometheus 监控插件 curl http://127.0.0.1:9080/apisix/admin/routes/1 \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \ -X PUT -d ' { "plugins": { "prometheus": {} # 启用插件 } }' ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值