这是坚持技术写作计划(含翻译)的第59篇,定个小目标999,每周最少2篇。
本文简单讲解 apache apisix 和 apisix dashboard docker安装及简单演示
apisix 简单介绍
apisix可能是api很6的的意思吧,哈哈
基于nginx系(nginx/openresty/tengine)的网关比较多,得益于nginx/openresty/tengine的高性能,在一些性能要求比较高的场景用nginx系的比较多
比较有名的当属开源的kong和商业的 openresty edge(openresty创始人搞的商业版),以及新秀 apache apisix
关于 apisix的特性和与kong的对比,详见 官方文档 ,就不复制粘贴了
apisix安装
apisix 支持容器化部署和裸机部署
关于centos和ubuntu的编译和安装,详见官方文档 编译和安装
关于容器化部署分两种,本地quick start 的 docker-compose 和 主流的 k8s 的 helm-chart 安装
快速启动
先跑个demo,看看效果
我将apisix-dashboard合并到apisix中了,参考 github.com/anjia0532/a…,也给官方提PR#150了(如果官方合并了后,建议用官方的库)
git clone https://github.com/anjia0532/apisix-docker.git
# 官方库
# git clone https://github.com/apache/apisix-docker.git
cd example
# 启动
docker-compose up -d
# 停止
docker-compose down
启动后,查看服务概览
http://localhost:9080 是apisix的http端口, http://localhost:9443 是https端口
localhost:2379 是etcd端口
docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------
example_apisix-dashboard_1 /usr/local/apisix-dashboar ... Up 0.0.0.0:9000->9000/tcp
example_apisix_1 sh -c /usr/bin/apisix init ... Up 0.0.0.0:9080->9080/tcp, 0.0.0.0:9443->9443/tcp
example_etcd_1 /entrypoint.sh etcd Up 0.0.0.0:2379->2379/tcp, 2380/tcp
example_web1_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:9081->80/tcp
example_web2_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:9082->80/tcp
http://localhost:9000 是apisix-dashboard
用户名,密码都是admin
通过api创建路由服务启停插件,可以参考 官方文档-快速入门指南
小试牛刀
此处简单示范一下,反代 httpbin.org/
创建消费者并启用插件
消费者,可以用于提供给下游的的appid,比如用于限流,鉴权,开zipkin等操作,粒度到账号(注意这个账号是在apisix层面的,不涉及到后边应用)
开启key-auth插件
官方文档-key-auth
开启限流limit-count
官方文档-limit-count
修改 httpbin_test 路由,启用key-auth插件
访问试一下key-auth
试一下 limit-count,多刷新几次就会被拦截
启用 serverless插件
官方文档-serverless
配合key-auth
演示一下serverless-pre
插件,假设原有系统有自己的header,而apisix
的key-auth
要求名字必须是apikey
,改造原系统?还是自己抄一个key-auth
?工作量都很大,完全可以使用serverless-pre
来做
摘抄官方文档的描述
serverless 的插件有两个,分别是
serverless-pre-function
和serverless-post-function
, 前者会在指定阶段的最开始运行,后者是在指定阶段的最后运行。
serverless-pre有两个参数,分别讲解下
phase: 是执行阶段,枚举值 ["rewrite", "access", "header_filter", "body_filter", "log", "balancer"],借助 官方流程图会更好理解一点
functions:是自己写的匿名函数
示例
{
"functions": [
"return function() ngx.req.set_header(\"apikey\", ngx.req.get_headers()[\"my-api-id\"]); end"
],
"phase": "rewrite"
}
批量创建路由/基于openapi导入
自定义插件
招聘小广告
山东济南的小伙伴欢迎投简历啊 加入我们 , 一起搞事情。
长期招聘,Java程序员,大数据工程师,运维工程师,前端工程师。