一、简介
国产云原生微服务API网关。
Apache APISIX是一个动态、实时、高性能的API网关,提供丰富的流量管理特性,例如负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等。既可以处理传统的南北向流量,也可以处理服务间的东西向流量。支持多种环境部署,并提供大量插件实现不同业务场景需求,且支持编写自定义插件。提供dashboard供用户通过页面管理apisix。
Apache APISIX基于Nginx和Etcd实现,其技术架构如下图所示:
其中,数据面DP是网关的主体,实现网关的主要功能,控制面CP使用户可以修改网关的配置并保存到etcd中。
请求处理流程如下图所示:
二、安装
APISIX支持rpm、docker、helm和源码安装,本文是rpm方式,适用于CentOS 7,其他方式可参考官方文档。
https://github.com/apache/apisix/blob/master/docs/en/latest/how-to-build.md
1. 配置yum仓库
如果官方openresty仓库没有安装的话,使用以下命令可以自动安装openresty和apisix仓库:
yum install -y https://repos.apiseven.com/packages/centos/apache-apisix-repo-1.0-1.noarch.rpm
如果官方openresty仓库已经安装了,使用以下命令自动安装apisix仓库:
yum-config-manager --add-repo https://repos.apiseven.com/packages/centos/apache-apisix.repo
2. 安装apisix
查看最新apisix包信息: yum info -y apisix
安装最新版apisix: yum install -y apisix
也可以安装指定版本的apisix: yum install -y apisix-2.15.0
3. 安装etcd
通过二进制方式安装,注意etcd版本,本次安装是单节点,仅用于测试
ETCD_VERSION='3.4.18' wget https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz tar -xzvf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz cd etcd-v${ETCD_VERSION}-linux-amd64 cp -a etcd etcdctl /usr/bin/ nohup etcd >/tmp/etcd.log 2>&1 & #默认监听端口2379
4. 高可用
对于生产环境,需要考虑系统的高可用性,一般需要部署多个etcd和apisix节点,且apisix节点无状态,配置完全相同,可任意扩容。
三、管理apisix
初始化依赖,主要是生成nginx配置文件,同时也会创建etcd主要key: apisix init
语法检查: apisix test
启动apisix: apisix start #默认监听端口9080
停止apisix: apisix quit #优雅停止 apisix stop #立即停止
帮助信息: apisix help
四、dashboard
Apache APISIX Dashboard可以使用户能够很方便的通过前端页面管理apisix网关。
1. rpm方式安装
yum install -y https://github.com/apache/apisix-dashboard/releases/download/v2.15.0/apisix-dashboard-2.15.0-0.el7.x86_64.rpm
2. 允许所有IP访问
vim /usr/local/apisix/dashboard/conf/conf.yaml #将allow_list字段置空
3. 启动dashboard
manager-api -p /usr/local/apisix/dashboard/ #前台启动,默认端口9000
4. 配置service启动
vim /usr/lib/systemd/system/apisix-dashboard.service [Unit] Description=apisix-dashboard Conflicts=apisix-dashboard.service After=network-online.target [Service] WorkingDirectory=/usr/local/apisix/dashboard ExecStart=/usr/local/apisix/dashboard/manager-api -c /usr/local/apisix/dashboard/conf/conf.yaml systemctl daemon-reload systemctl restart apisix-dashboard systemctl status apisix-dashboard #注意:也可以直接用自动生成的/etc/systemd/system/apisix-dashboard.service文件,如不需要,可直接删除
浏览器通过ip:9000访问,默认用户名和密码都是admin,其他安装方式可参考官方文档。
https://github.com/apache/apisix-dashboard/blob/master/docs/en/latest/install.md
五、配置apisix
通过修改本地 conf/config.yaml 文件,或者在启动 APISIX 时使用 -c 或 --config 添加文件路径参数 apisix start -c <path string>,完成对 APISIX 服务本身的基本配置。
其他默认配置,可以在 conf/config-default.yaml 文件中看到,该文件是与 APISIX 源码强绑定, 永远不要手工修改 conf/config-default.yaml 文件,如果需要自定义任何配置,都应在 config.yaml 文件中完成。
修改config.yaml后,需要重启或重载服务
apisix restart or apisix reload
注意:不要手工修改 APISIX 自身的 conf/nginx.conf 文件,当服务每次启动时,apisix 会根据 config.yaml 配置自动生成新的 conf/nginx.conf 并自动启动服务。
六、插件
1. 原生
插件配置可直接绑定在 Route 上,也可以被绑定在 Service 或 Consumer上,而对于同一个插件的配置,只能有一份是有效的,配置选择优先级总是 Consumer > Route > Service,而多个插件运行先后顺序是根据插件自身的优先级来决定的。
在 conf/config.yaml 中,可以声明本地 APISIX 节点都支持哪些插件,这是个白名单机制,不在该白名单的插件配置,都将会被自动忽略,这个特性可用于临时关闭或打开特定插件,应对突发情况非常有效。 如果你想在现有插件的基础上新增插件,注意需要拷贝 conf/config-default.yaml 的插件节点内容到 conf/config.yaml 的插件节点中。
APISIX 插件是热加载的,不管你是新增、删除还是修改插件,都不需要重启服务,只需要通过 admin API 发送一个 HTTP 请求即可:
curl http://127.0.0.1:9080/apisix/admin/plugins/reload -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT
查看启动的插件列表:
curl http://127.0.0.1:9080/apisix/admin/plugins/list -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
注意:如果你已经在路由规则里配置了某个插件(比如在 route 的 plugins 字段里面添加了它),然后禁用了该插件,在执行路由规则的时候会跳过这个插件。
2. 自定义
2.1 确定插件名称和优先级
名称是插件的唯一标识,不可重名,你应该给自己的插件起一个不包含在原来库中的名字,但是如果有需要,你可以使用使用相同名称的代码文件覆盖内置的代码文件,如 test-plugin。 新插件的优先级(priority属性)不能与现有插件的优先级相同,对于自定义插件建议优先级在1-99之间,如50。
2.2 创建插件代码文件
直接在 apisix/plugins/ 目录下创建插件代码文件 test-plugin.lua,代码内容可以参考example-plugin.lua。
2.3 在conf/config.yaml配置文件中新增插件
建议最好按优先级顺序排列。
2.4 热加载并查看插件列表
curl http://127.0.0.1:9080/apisix/admin/plugins/reload -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT curl http://127.0.0.1:9080/apisix/admin/plugins/list -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
2.5 生成配置,并导入dashborad
cd /usr/local/apisix/dashboard/conf mv schema.json schema.json-bak curl 127.0.0.1:9090/v1/schema > schema.json
2.6 重新启动dashboard
systemctl restart apisix-dashboard
然后,在dashboard插件列表中即可看到新增的插件。
七、健康检查
Apache APISIX 的健康检查使用 lua-resty-healthcheck 实现,用于检查上游节点的健康状态。
1. 主动检查
1.1 配置说明
-
可配置检查类型为HTTP、HTTPS或TCP,默认HTTP;
-
可配置请求端口默认为80,请求路径默认为根/;
-
可根据需要添加相应请求头;
-
健康状态表示对上游健康节点检查条件;
-
不健康状态表示对上游不健康节点的检查条件;
-
如果上游节点返回的状态码没在配置列表里,则保持原状;
1.2 检查说明
在配置启用后,主动检查并不会马上生效,需要一次请求来触发生效。当upstream
第一次被请求时触发健康检查逻辑,apisix对每一个上游节点发送检查请求,如果检查失败则标记为unhealthy,相当于摘除,之后的请求只会转发给其他健康的节点。第一次触发后,apisix会按照配置的时间间隔周期性地对上游节点进行健康检查,如果失败则从upstream中摘除,如果成功则重新添加到upstream。
2. 被动检查
2.1 配置说明
-
可配置检查类型为HTTP、HTTPS或TCP,默认HTTP;
-
健康状态表示判断上游节点健康的条件;
-
不健康状态表示判断上游节点不健康的条件;
2.2 检查说明
启用主动检查后,已经可以完成对上游节点的自动摘除和恢复,但是主动检查有自己的检查间隔时间,如果在下一次检查之前节点已经不可用了,此时如果有请求进来的话,apisix仍然认为这个节点是可用的,那就有可能会转发到这个节点上,导致请求失败。所以,apisix支持被动检查,即每次请求进来都会对健康的上游节点进行检查,如果失败则从upstream中摘除。
被动检查主要用于快速及时地摘除问题节点,因为重试机制及主动检查的存在,一般可以不启用被动检查,合理设置主动检查周期即可。
3. 注意:
-
只有在
upstream
被请求时才会开始健康检查,如果upstream
被配置但没有被请求,不会触发启动健康检查。 -
如果没有健康的节点,那么请求会继续发送给上游。
-
如果
upstream
中只有一个节点时不会触发启动健康检查,该唯一节点无论是否健康,请求都将转发给上游。 -
启用被动健康检查时,需要同时启用主动健康检查,这样不健康的节点才会恢复。
-
主动检查主要用于定时检查及恢复节点,被动检查主要用于快速摘除节点。
-
健康检查信息可以通过 控制接口 中的 GET /v1/healthcheck 接口得到(curl 127.0.0.1:9090/v1/healthcheck -i)
八、路由匹配
-
radixtree_uri:apisix默认路由,即只使用 uri 作为主索引,支持全量和深前缀匹配,且可以设置优先级和任意过滤属性,
匹配优先级为:全等 > 长前缀 > 短前缀 > 优先级 > 高级过滤 > 配置顺序,其中域名、请求头、参数、cookie等都属于高级过滤条件。
-
radixtree_host_uri:使用 host + uri 作为主索引,对当前请求会同时匹配 host 和 uri,支持的匹配条件与 radixtree_uri 基本一致。
标签:插件,检查,简介,dashboard,conf,节点,apisix From: https://www.cnblogs.com/zlw-xyz/p/17748863.html