我是
靠谱客的博主
烂漫哑铃,最近开发中收集的这篇文章主要介绍
apisix网关-构建docker镜像构建及插件化开发,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
高能劝退:lua开发,适合小白看!!!
前段时间有个项目,用的java程序做网关,压测tps只有1k多点,惨不忍睹。
后来公司有个大佬改用apisix做网关,tps飙升到1w多。
于是对神奇的apisix产生了深深的崇敬。感兴趣之余,便学习了一点apisix的插件开发。
当然,只是一些入门基本的开发。源码什么的肯定看不懂。
docker构建
为了开发方便,这里用了docker。可以选择自己构建,也可以从dockerhub拉取我构建好的镜像
1 | docker pull xshower/apisix:centos8 |
自己构建一个apisix的docker镜像,Dockerfile内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | FROM centos: 8 MAINTAINER xShower<https: //gitee.com/syher> ARG APISIX_VERSION= 1.5 LABEL apisix_version= "${APISIX_VERSION}" RUN yum -y install yum-utils gcc automake autoconf libtool make && yum-config-manager --add-repo https: //openresty.org/package/centos/openresty.repo && yum install -y openresty && yum install -y https: //github.com/apache/apisix/releases/download/$APISIX_VERSION/apisix-$APISIX_VERSION-0.el7.noarch.rpm && yum clean all && sed -i 's/PASS_MAX_DAYSt99999/PASS_MAX_DAYSt60/g' /etc/login.defs ADD entrypoint.sh . ADD apisix-dashboard.tar /usr/local/apisix/ WORKDIR /usr/local/apisix ENTRYPOINT sh /entrypoint.sh && /bin/bash |
基于centos8构建了最基础的apisix镜像,apisix-dashboard.tar是apisix的webui。需要自己解压到apisix的安装目录。
镜像构建完以后会执行entrypoint.sh脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #! /bin/sh INIT_DIR=/prepare-init.d LUAROCKS_DIR=/usr/local/apisix/third function run_script() { sh script_file } # 执行$INIT_DIR中的shell脚本 function init() { run_script } # 加载luarocks function init_luarocks() { } # 启动apisix function start() { } init init_luarocks start |
脚本内容很简单,在启动apisix之前加载$INIT_DIR目录下的shell脚本及构建$LUAROCKS_DIR目录下的luarocks依赖。
为了方便开发,我在$INIT_DIR目录下放了安装lua和luarocks的脚本。就是简单的wget/tar/make。脚本内容就不贴代码了,可以在我的git上面看。
这样一个简单的apisix镜像就构建好了,因为apisix依赖etcd。所以这里采用docker-compose容器编排。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | version: '3.1' services: apisix: #build: # context: ./docker # dockerfile: Dockerfile image: xshower /apisix :centos8 restart: always depends_on: - etcd ports: - 9080:9080 - 9443:9443 - 9180:9180 volumes: - . /docker/prepare-init .d: /prepare-init .d - . /conf/config .yaml: /usr/local/apisix/conf/config .yaml:ro - . /third : /usr/local/apisix/third - . /logs : /usr/local/apisix/logs - . /docker/entrypoint .sh: /entrypoint .sh etcd: image: bitnami /etcd :3.4.9 user: root restart: always volumes: - . /etcd_data : /etcd_data environment: ETCD_DATA_DIR: /etcd_data ETCD_ENABLE_V2: "true" ALLOW_NONE_AUTHENTICATION: "yes" ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379" ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379" ports: - "2379:2379/tcp" |
指定了apisix依赖以及文件路径映射和端口映射。这样,一个简单的apisix开发环境就搭建好了。
插件开发
apisix本身自带了很多插件都在$APISIX_HOME/apisix/plugins目录里:limit-req.lua限流;proxy-rewrite.lua地址匹配;jwt-auth.lua授权认证;kafka-logger.lua日志等。
有时候这些自带的插件不能很好的满足我们应用需求时,需要我们自己开发。
我们可以在$APISIX_HOME/apisix/plugins目录下编写lua脚本。
当然也可以添加自定义的插件目录,这需要修改/usr/bin/apisix文件
1 2 3 4 5 | # 第二行内容修改前 package.path = "/usr/local/apisix/?.lua;" .. package.path #修改后 package.path = "/usr/local/apisix/?.lua;/usr/local/apisix/third/?.lua;/usr/local/apisix/third/deps/share/lua/5.1/?.lua;" .. package.path |
其中,/usr/local/apisix/third就是我们自定义的插件目录,这样apisix既会读取默认的插件目录,又会读取我们定义的插件目录。
目录定义好以后,记得把自定义的插件放在third/plugins目录下,不能直接放在third目录中。
然后我们写一个lua插件,内容很简单:每次请求的时候,打印日志。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | local core = require( "apisix.core" ) local plugin_name = "third-plugin" local schema = { type = "object" , properties = { content = { type = "string" } } } local _M = { version = 0.2, priority = 5000, name = plugin_name, schema = schema, } function _M.access(conf, ctx) // 打印日志 core.log.warn(conf.content) end return _M |
然后修改$APISIX_HOME/conf/config.yaml
1 2 3 4 5 6 7 8 9 10 | #allow_admin: # - 127.0.0.0/24 #开启dashboard远程访问 #- "::/64" port_admin: 9180 #开启dashboard web端口<br data-filtered="filtered">etcd: host: - "http://主机IP:2379" # 修改成主机的ip,不能直接用127.0.0.1 plugins: - ...省略自带插件 - third-plugin |
启动docker。如图是IDEA启动docker-compose的设置。大家也可以在docker-compose.yml所在目录下执行docker-compose up -d命令
启动好我们就可以访问http://127.0.0.1:9180/apisix/dashboard。
首先配置upstream并保存
配置service并保存
配置route并保存
保存完以后,不需要重启apisix既可生效。
首先访问原来的接口地址:http://192.168.34.229:6789/#/cluster
然后访问我们配置的apisix的接口地址:http://127.0.0.1:9080/rocketmq/#/cluster(和dashboard web端口不一致,web端口是9180.)
结果是一样的。最后看看我们加入插件的效果。
如图,我们在页面配置的content内容都在日志里面打印出来了。
最后
以上就是烂漫哑铃为你收集整理的apisix网关-构建docker镜像构建及插件化开发的全部内容,希望文章能够帮你解决apisix网关-构建docker镜像构建及插件化开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复