首页 > 其他分享 >apisix简介

apisix简介

时间:2023-10-08 14:35:17浏览次数:47  
标签:插件 检查 简介 dashboard conf 节点 apisix

一、简介

国产云原生微服务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)

八、路由匹配

  1. radixtree_uri:apisix默认路由,即只使用 uri 作为主索引,支持全量和深前缀匹配,且可以设置优先级和任意过滤属性,

匹配优先级为:全等 > 长前缀 > 短前缀 > 优先级 > 高级过滤 > 配置顺序,其中域名、请求头、参数、cookie等都属于高级过滤条件。

  1. radixtree_host_uri:使用 host + uri 作为主索引,对当前请求会同时匹配 host 和 uri,支持的匹配条件与 radixtree_uri 基本一致。

 

标签:插件,检查,简介,dashboard,conf,节点,apisix
From: https://www.cnblogs.com/zlw-xyz/p/17748863.html

相关文章

  • Sharding-JDBC 简介
    在介绍Sharding-JDBC之前,有必要先介绍下Sharding-JDBC的大家族ShardingSphere。在介绍ShardingSphere之后,相信大家会对ShardingSphere的整体架构以及Sharding-JDBC扮演的角色会有更深的了解。ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、......
  • 匈牙利算法简介与应用
     一、分配问题应用案例:1、男女相亲场景,10男10女为例,可让每人对每个异性进行意向度排序,若是男性优先则可以用男性意向度评分矩阵,女性优先同理,或者使用男女意向评分平均值作为意向度居正,然后用匈牙利算法求最大值,即可获得综合意向度得分最高的分配方法2、电销和催收用户分配场景,......
  • 每日一库:cobra 简介
    当你需要为你的Go项目创建一个强大的命令行工具时,你可能会遇到许多挑战,比如如何定义命令、标志和参数,如何生成详细的帮助文档,如何支持子命令等等。为了解决这些问题,github.com/spf13/cobra就可以派上用场。github.com/spf13/cobra是一个用于构建强大的命令行应用程序的Go语......
  • AJAX简介
     1.AJAX五大特点1.无需刷新页面就可改变页面内容,减少用户等待时间(最大特点)。2.改善表单验证万式,不再需要打开新页面,也不再需要将整个页面数据提交。3.按需获取数据,每次只从服务器端获取需要的数据。4.读取外部数据,进行数据处理整合。5.异步与服务器进行交互,在交......
  • YAML简介
    YAML什么是YAML它是一种以数据为中心的标记语言,全称(YAMLAin'tMarkupLanguage)举例简单的application.yml文件server:port:8080特点1.语言简单,用于在人和计算机之间交换数据2.需要缩进3.主要用于配置信息4.减少了xml等配置文件的众多无效符号YAML语法1.区分大小......
  • MySQL 的 InnoDB 存储引擎简介
    MySQL是世界上最流行的开源关系型数据库管理系统之一,而其中的存储引擎则是其关键组成部分之一。InnoDB存储引擎在MySQL中扮演了重要角色,提供了许多高级功能和性能优化,适用于各种应用程序和工作负载。本文将深入介绍InnoDB存储引擎的各个方面,以帮助您更好地理解它的特性和优......
  • 计算机的发展史(信息学奥赛简介)
    ⦁ 信息学奥赛简介:NOIP:全国青少年信息学奥林匹克联赛是教育部认可的五大学科(数学,物理,化学,生物,信息学)竞赛之一,由1984中国计算机学会(CCF)创办,联赛分为普及组和提高组。复赛可以使用c,c++,Pascal语言,2022年后只能使用c++。CSP-J/S:2019年CCF推出CSP(软件能力认证),CSP-J/S(非专业级别认证),CS......
  • SOUI总结之简介
    简介uires.idx:定义资源索引init.xml:定义全局UI的属性,包含字体,字符串表,skin,style,objattr,参见前篇介绍。dlg_main.xml:主窗口XML。关于XML定义的大概顺序是:1:资源引入uires.idx(这里定义界面要使用的一些资源)格式:<资源类型>Name=资源自定义名称,path=资源路径</资源......
  • REST架构风格简介
     1.优点2.缺点 ......
  • 1.数据库简介
    MySQL简介:JavaEE企业级Java开发,Web前端(HTML,CSS,JavaScript)后端连接数据库JDBC,连接前端,传输数据数据库(存数据,TxtExcel,world)代码,数据库(增删改查)混饭吃操作系统,数据结构,算法,优秀离散数学,数字电路,体系结构,编译原理,实战=无敌MySQL是一个关系型数据库管理系统前世:瑞典MysqlAB公......