APISIX 是一个云原生、高性能、可扩展的微服务 API 开源网关,基于OpenResty(Nginx+Lua)和etcd来实现,对比传统的API网关,具有动态路由
和热插件加载
的特点。系统本身自带前端,可以手动配置路由
、负载均衡
、限速限流
、身份验证
等插件,操作方便。APISIX是用Lua语言开发,语言相对简单,容易上手,同时可以按自己的需求进行系统的二次开发以及开发自己的插件,目前APISIX已经发布到1.1版本。
本文将从APISIX功能,安装以及使用三个方面对APISIX进行介绍。
APISIX的功能有很多,包括动态路由
、url重写
、动态上游
、IP黑白名单
、A/B测试
、灰度发布
、限速限流
、监控报警
、健康检查
等等,本文只介绍几个比较常用的功能,其他功能具体可以查看APISIX的官方文档说明。
使用过Nginx的同学都会遇到过这种情况,在修改nginx.conf后需要重启nginx服务修改才会生效,重启时间虽然短暂,但难免会有一段服务不可用时间。当然,可以通过其他方式进行规避服务不可用。APISIX的服务热启动通过在路由、Service、Upstreams等插件中动态的修改配置即可,并不需要再重启APISIX服务来使修改生效。
不再需要在nginx.conf文件中编写复杂的规则代码来实现需求,通过使用自带的路由、Upstreams等插件,在前端页面中添加所需要的规则即可实现。下文应用会详细介绍。目前通过插件可以实现uri重写、根据请求信息中的内容实现路由跳转等等。也可以根据自己的需求开发符合自己需求的插件。
通过Upstreams插件,可以实现基于权重的roundrobin和chash负载均衡。
APISIX支持etcd集群,通过etcd集群增强了系统的可用性,大大减小了故障损失。
APISIX外接第三方prometheus监控系统,提供符合prometheus数据格式的监控指标数据。Prometheus 是由 SoundCloud 开源监控告警解决方案,已经比较成熟完善。
CentOS7
# install epel, `luarocks` need it.
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -ivh epel-release-latest-7.noarch.rpm
# add OpenResty source
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
# install OpenResty, etcd and some compilation tools
sudo yum install -y etcd openresty curl git gcc luarocks lua-devel
# start etcd server
sudo service etcd start
Ubuntu 16.04 & 18.04
# add OpenResty source
wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
sudo apt-get update
# install OpenResty, etcd and some compilation tools
sudo apt-get install -y git etcd openresty curl luarocks
# start etcd server
sudo service etcd start
通过源码包安装:
# 下载源码包
wget http://www.apache.org/dist/incubator/apisix/1.1/apache-apisix-1.1-incubating-src.tar.gz
tar zxvf apache-apisix-1.1-incubating-src.tar.gz
# 安装运行时依赖的Lua库
cd apache-apisix-1.1-incubating
make deps
确保你的运行环境中的 Node 版本 >= 8.12.0。
git clone https://github.com/apache/incubator-apisix-dashboard.git
git checkout #这里的tag版本和你使用的apisix版本一致
yarn && yarn build:prod
把编译后的在 /dist
目录下的所有文件,拷贝到 apisix/dashboard
目录下。 使用浏览器打开 http://127.0.0.1:9080/apisix/dashboard/
即可使用, 不用填写用户名和密码,直接登录。
# init nginx config file and etcd
make init
# start APISIX server
make run
# stop APISIX server
make stop
配置一个可用的链路。
创建Upstream界面中有Desc、Type、Key、Node。Type中根据需要选择roundrobin
、chash
两种方式,如果选择chash
方式需要从下拉列表中选择合适的Key。Node节点根据实际需求可以添加多个,如下图:
创建Route界面中有Desc、URIs、Hosts、AddURI、Remote Address、Methods、Upstream、Service。在URIs中添加接收的请求uri,支持正则表达,例如:请求地址有http://ip:port/hello/world.jsp、http://ip:port/hello/apisix.do,这里的URIs可以添加/hello/*
来匹配处理这类请求。在Upstream中选择刚才创建的upstream。其他选择可以默认不填,如下图:
完成上述两步配置后,就可以通过client端请求APISIX实现路由跳转。
综上,APISIX搭建比较简单,上手比较容易,能够满足日常的网关需求,同时也可以自己进行二次开发。当然,APISIX中也有其他功能,相关功能可以自己进行扩展研究。可以根据自己的实际需求,对APISIX功能进行适当的删减,符合自己的才是最重要的。
后期需要在监控方面进行二次开发,目前是外接三方Prometheus,Prometheus是一款比较成熟完善的监控系统,但是外接三方让系统看起来比较庞大,并不是那么的精简,后期可以参考Prometheus中监控指标进行二次开发。