关于apisix的安装不过多介绍,网上有很多相关示例,也可以参照官方给出的示例进行安装(官方地址:Architecture | Apache APISIX),dashboard使用也不过多介绍这里主要介绍一下apisix的Admin API控制使用。
一、APISIX简介
Apache APISIX 是基于 Nginx/OpenResty + Lua 方案打造的一款 动态、实时、高性能 的 云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
二、相关概念/组件描述
概念/组件 | 描述 |
---|---|
Route | 通过路由定义规则来匹配客户端请求,根据匹配结果加载并执行相应的插件,最后把请求转发给到指定的上游应用。 |
Upstream | 上游的作用是按照配置规则对服务节点进行负载均衡,它的地址信息可以直接配置到路由或服务上。 |
Service | 服务由路由中公共的插件配置、上游目标信息组合而成。服务与路由、上游关联,一个服务可对应一组上游节点、可被多条路由绑定。 |
Consumer | 消费者是路由的消费方,形式包括开发者、最终用户、API 调用等。创建消费者时,需绑定至少一个认证类插件。 |
Admin API | 用户可以通过 Admin API 控制 APISIX 实例 |
三、Admin API路由route示例操作说明
所有的Admin API 都采用Restful 风格,路由资源请求地址为 /apisix/admin/routes/{id}
,我们可以通过不同的 HTTP 方法来查询、新增、编辑或删除路由资源:
GET /apisix/admin/routes
- 获取资源列表;GET /apisix/admin/routes/{id}
- 获取资源;PUT /apisix/admin/routes/{id}
- 根据 id 创建资源;POST /apisix/admin/routes
- 创建资源,id 将会自动生成;DELETE /apisix/admin/routes/{id}
- 删除指定资源;PATCH /apisix/admin/routes/{id}
- 标准 PATCH,修改指定 Route 的部分属性,其他不涉及的属性会原样保留;PATCH /apisix/admin/routes/{id}/{path}
- SubPath PATCH,通过 {path} 指定 Route 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。
【详情及其他相关的upstrem、service、consumer等操作具体可以查看 (官方示例)】
下面介绍一下常用的流程操作
四、查询操作命令
1、查询service列表
curl http://127.0.0.1:9080/apisix/admin/services -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
2、查询route列表
curl http://127.0.0.1:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
3、查询upstream列表
curl http://127.0.0.1:9080/apisix/admin/upstreams -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
4、查询consumer列表
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
五、创建路由Route及上游Upstream
1、方式一:直接创建包含upstream的route
curl http://127.0.0.1:9080/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["POST"],
"host": "127.0.0.1",
"uri": "/api/shop/order",
"plugins":{
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:9000": 1
}
}
}'
路由规则说明:
当满足以下所有规则的时候,请求将被转发到上游服务
a、请求方法类型为POST;
b、请求头包含 host 字段,且它的值为 127.0.0.1;
c、请求路径匹配/api/shop/order;
注意:
创建命令中http://127.0.0.1:9080/apisix/admin/routes/1后的1为routes_id,如果已经存在会直接进行覆盖,所以创建前需使用查询命令查询当前该用的编号。防止覆盖掉已有的路由。
2、方式二:先创建upstream,在创建route使用upstream_id进行绑定
a.创建upstream
curl "http://127.0.0.1:9080/apisix/admin/upstreams/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"type": "roundrobin",
"nodes": {
127.0.0.1:9000": 1
}
}'
nodes中:127.0.0.1:3007后的数字代表权重
注意:
创建命令中http://127.0.0.1:9080/apisix/admin/upstreams/1后1为upstreams_id,如果已经存在会直接进行覆盖,所以创建前需使用查询命令查询当前该用的编号。防止覆盖掉已有的路由
b.创建route,使用upstream_id进行绑定
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["POST"],
"host": "127.0.0.1",
"uri": "/api/shop/order",
"plugins":{
},
"upstream_id": "1"
}'
六、创建消费者Consumer
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY:edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "test",
"plugins":{
"key-auth": {
"key": "abcdefghijklmnopqrstuvwxyz"
}
}
}'
说明:
插件中提供了很多种不同的认证插件,这里选取的是key-auth,可参考官方文档选择适合自己的插件:Authentication插件列表 ,此步操作等同于启用了key-auth插件
七、绑定Consumer与Route
方式一:对指定路由启用Key认证,通过route_id进行指定
curl -i "http://127.0.0.1:9080/apisix/admin/routes/1?api_key=edd1c9f034335f136f87ad84b625c8f1" -X PATCH -d '
{
"plugins": {
"key-auth": {}
}
}'
方式二:在创建路由的时候就直接启动对应的认证插件
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["POST"],
"host": "127.0.0.1",
"uri": "/api/shop/order",
"plugins":{
"key-auth":{}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:9000": 1
}
}
}'
八、调用执行
curl -F '参数1' -F '参数2' -F '参数3' -F '参数N' \
-X POST http://127.0.0.1.9080/api/shop/order\
-H 'apikey: abcdefghijklmnopqrstuvwxyz'
说明:
使用F添加参数,使用H添加相关的认证参数
另外当参数为file文件类型时,需在前面加@代表本地文件:eg: curl -F ‘file=@/home/a.txt’ ....
九、删除操作命令
(1)删除route和upstream
通过route_id或upstream_id进行删除
curl -X DELETE http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
curl -X DELETE http://127.0.0.1:9080/apisix/admin/upstreams/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
(2)删除consumer
通过username进行删除
curl -X DELETE http://127.0.0.1:9080/apisix/admin/consumers/test -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
(3)upstream删除node
curl "http://127.0.0.1:9080/apisix/admin/upstreams/1" \
-H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PATCH -d '
{
"nodes": {
127.0.0.1:9000": 1
}
}'