前言
本文介绍了在 API 网关中进行端口修改、常用插件配置、消费者配置、上游配置和路由配置的方法。通过对这些方面的详细说明,读者可以了解如何灵活地调整和定制自己的 API 网关环境,以满足不同场景下的需求。
一、端口修改
1. apisix 端口修改
添加多个代理监听端口,修改/usr/local/apisix/conf/config.yaml
配置文件,添加如下配置,添加的配置将覆盖默认配置文件。
apisix:
node_listen:
- 9080
- 9081
- 9082
2. dashboard 端口修改
修改/usr/local/apisix/conf/conf.yaml
配置文件,修改如下配置。
conf:
listen:
port: 9000
3. 登录密码修改
可修改/usr/local/apisix/conf/conf.yaml
配置文件中的用户认证配置。
authentication:
users:
- username: admin
password: admin
- username: user
password: user
二、常用插件介绍
使用插件需要配置 plugins 字段,不配置默认不使用插件。启用插件需要把 plugins 字段下 _meta.disable 的值设为 false。
1. 常用转换插件
1.1 proxy-rewrite插件
proxy-rewrite 是处理上游代理信息重写的插件,支持对 scheme、uri、host 等信息进行重写。
1.1.1 属性字段
1.1.2 配置示例
...
plugins:
proxy-rewrite:
regex_uri:
- ^/postman/(.*)
- /$1
...
...
2. 常用认证插件
2.1 key-auth插件
key-auth插件是一种用于向路由或服务添加身份验证密钥的工具,它需要与消费者配合使用。通过将密钥添加到请求参数或请求头中,消费者可以验证其请求。
2.1.1 消费者端字段
2.1.2 路由端字段
2.1.3 配置示例
消费者端:
username: consumer_demo
desc: consumer_demo描述
plugins:
key-auth:
_meta:
disable: false
key: auth-one
...
路由端:
...
plugins:
key-auth:
_meta:
disable: false
header: apikey
...
...
2.2 basic-auth插件
basic-auth插件是一种用于向路由或服务添加基本访问身份验证的工具。它需要与消费者配合使用。API的消费者可以将他们的密钥添加到请求头中,以验证其请求。不同的消费设置该插件要设置不同的用户名,如果不同消费者使用该插件设置的用户名相同,可能会有异常。
2.2.1 消费者端字段
2.2.2 路由端字段
2.2.3 配置示例
消费者端:
username: consumer_demo
desc: consumer_demo描述
plugins:
basic-auth:
_meta:
disable: false
password: user
username: user
...
路由端:
...
plugins:
basic-auth:
_meta:
disable: false
hide_credentials: false
...
...
3. 常用安全插件
3.1 consumer-restriction插件
consumer-restriction 插件允许用户根据路由、服务或消费者来设置相应的访问限制。
3.1.1 属性字段
3.1.2 配置示例
...
plugins:
consumer-restriction:
_meta:
disable: false
allowed_by_methods:
- methods:
- GET
user: postmanget
- methods:
- GET
user: consumer_demo
blacklist:
- consumer_demo2
- consumer_demo3
rejected_code: 403
rejected_msg: 请求被拒绝
type: consumer_name
whitelist:
- postmanget
- consumer_demo
- consumer_demo1
- consumer_demo2
- consumer_demo3
...
...
三、消费者配置(数据编辑器方式)
消费者是路由的消费方,形式包括开发者、最终用户、API 调用等。
它具有最高优先级:Consumer > Route > Plugin Config > Service。
1. UI页面对应字段说明
2. 配置示例
创建消费者consumer_demo,配置并启用basic-auth插件。
username: consumer_demo
desc: consumer_demo描述
plugins:
basic-auth:
_meta:
disable: false
password: user
username: user
key-auth:
_meta:
disable: true
key: auth-one
四、上游配置
在 API 网关中,“上游”(Upstream)是指向后端服务的请求转发目标。API Gateway 通过将客户端请求代理到上游服务器来处理和响应这些请求。
1. UI页面对应字段说明
2. 配置示例
name: postman
desc: postman描述
type: roundrobin
nodes:
- host: postman-echo.com
port: 80
weight: 1
- host: postman-echo1.com
port: 80
weight: 1
- host: postman-echo2.com
port: 80
weight: 1
pass_host: pass
retries: 3
retry_timeout: 6
scheme: http
timeout:
connect: 6
send: 6
read: 6
keepalive_pool:
idle_timeout: 60
requests: 1000
size: 320
3. 健康检查
3.1 主动健康检查
主动健康检查指 APISIX 通过预设的探针类型(HTTP、HTTPS、TCP),主动探测上游节点的存活性。
当发向健康节点 A 的 N 个连续探针都失败时,该节点将被标记为不健康,不健康的节点将会被 APISIX 的负载均衡器忽略,无法收到请求;若某个不健康的节点,连续 M 个探针都成功时,该节点将被重新标记为健康,进而可以被代理。
3.2 被动健康检查
被动健康检查指通过判断从 APISIX 转发到上游节点的请求响应状态,来判断对应的上游节点是否健康。相对于主动健康检查,被动健康检查的方式无需发起额外的探针,但是也无法提前感知节点状态,可能会有一定量的失败请求。
若发向健康节点 A 的 N 个连续请求都被判定为失败,则该节点将被标记为不健康。
五、路由配置
路由根据定义的规则匹配客户端的请求,加载并执行相应的插件,并将请求转发给指定的上游。
1. UI页面对应字段说明
2. 配置示例(绑定上游方式)
name: route_demo
labels:
API_VERSION: v1
tag_demo: postman_tag
desc: route_demo描述
status: 1
uris:
- /postman/*
- /postmanget/*
methods:
- GET
priority: 1
plugins:
proxy-rewrite:
regex_uri:
- ^/postman/(.*)
- /$1
upstream_id: '506489652354484505'
六、模拟异常情况
apisix主机为 192.168.145.103。使用公共接口 https://postman-echo.com/get?foo1=bar1&foo2=bar2 进行测试,该接口的返回数据如下:
1. 模拟节点不健康
这里准备了6个节点,分别为 postman-echo.com、postman-echo.com1、postman-echo.com2、postman-echo.com3、postman-echo.com4、postman-echo.com5,其中 postman-echo.com 节点是健康的,其他节点是不健康的。
1.1 上游配置
nodes:
- host: postman-echo.com
port: 80
weight: 1
- host: postman-echo1.com
port: 80
weight: 1
- host: postman-echo2.com
port: 80
weight: 1
- host: postman-echo3.com
port: 80
weight: 1
- host: postman-echo4.com
port: 80
weight: 1
- host: postman-echo5.com
port: 80
weight: 1
retries: 3
timeout:
connect: 6
send: 6
read: 6
type: roundrobin
scheme: http
pass_host: pass
name: postman
desc: postman描述
keepalive_pool:
idle_timeout: 60
requests: 1000
size: 320
retry_timeout: 6
1.2 路由配置如下
uris:
- /postman/*
- /postmanget/*
name: route_demo
desc: route_demo描述
priority: 1
methods:
- GET
plugins:
proxy-rewrite:
regex_uri:
- ^/postman/(.*)
- /$1
upstream_id: '506489652354484505'
labels:
API_VERSION: v1
route: rpute_demo
status: 1
1.3 测试结果
成功获取到数据,但是响应时间比较长,相对于前面1s的响应时间,这里用了1.70min。
1.4 日志查看
查看/usr/local/apisix/logs/error.log
文件,可以看到如下报错。
查看/usr/local/apisix/logs/access.log
文件,可以看到成功的一条记录。
1.5 结果分析
当有其他节点不健康时,响应速度会变慢。当所有节点不健康时,无法获取响应数据。
总结
本文从多个方面介绍了在 API 网关中进行各种配置操作的方法。无论是修改端口还是添加插件或设置消费者等,都能够帮助用户更好地管理和控制其API网关环境。通过理解并熟悉这些操作步骤,读者可以根据自身需求来优化和定制他们所使用的API网关系统,并提供更高效可靠且安全性强大的服务。
希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!