059-api网关之apache apisix初体验

1,994 阅读3分钟

这是坚持技术写作计划(含翻译)的第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
image.png

通过api创建路由服务启停插件,可以参考 官方文档-快速入门指南

小试牛刀


此处简单示范一下,反代 httpbin.org/
image.png

创建消费者并启用插件

消费者,可以用于提供给下游的的appid,比如用于限流,鉴权,开zipkin等操作,粒度到账号(注意这个账号是在apisix层面的,不涉及到后边应用)
开启key-auth插件
官方文档-key-auth
image.png
开启限流limit-count
官方文档-limit-count
image.png
修改 httpbin_test 路由,启用key-auth插件
image.png
访问试一下key-auth
image.png

试一下 limit-count,多刷新几次就会被拦截
image.png
启用 serverless插件
官方文档-serverless

配合key-auth演示一下serverless-pre插件,假设原有系统有自己的header,而apisixkey-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"
}

image.png
image.png

批量创建路由/基于openapi导入

image.png
官方文档-Import OpenAPI Guide

自定义插件


官方文档-自定义插件

招聘小广告


山东济南的小伙伴欢迎投简历啊 加入我们 , 一起搞事情。
长期招聘,Java程序员,大数据工程师,运维工程师,前端工程师。

参考资料