Apisix网关快速入门实践

一、Apisix简介

APISIX是一个微服务API网关,具有高性能、可扩展性等优点。它基于nginx(openresty)、Lua、etcd实现功能,借鉴了Kong的思路。和传统的API网关相比,APISIX具有较高的性能和较低的资源消耗,并且具有丰富的插件,也方便自己进行插件扩展。

软件架构图.png

二、网关搭建

Docker安装方式

2.1 下载apisix-docker仓库

git clone https://github.com/apache/apisix-docker.git

cd apisix-docker/example

2.2 docker-compose启用APISIX

docker-compose -p docker-apisix up -d

2.3 RPM安装方式

1. 通过在线RPM 仓库安装

sudo yum install -y 

https://repos.apiseven.com/packages/centos/apache-apisix-repo-1.0-1.noarch.rpm

sudo yum install apisix

2. 通过离线RPM包安装

sudo mkdir -p apisix

sudo yum install -y

https://repos.apiseven.com/packages/centos/apache-apisix-repo-1.0-1.noarch.rpm

sudo yum clean all && yum makecache

sudo yum install -y --downloadonly --downloaddir=./apisix apisix

apisix init #配置初始化

apisix start #启动网关

三、路由配置

3.1 重点概念:

路由(Route):通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的插件,并把请求转发给到指定Upstream。主要包含三部分内容:匹配规则(比如uri、host、remote_addr等),插件配置(限流限速等)和上游信息。请看下图示例,是一些Route规则的实例,当某些属性值相同时,图中用相同颜色标识。

消费方(Consumer):对于API网关通常可以用请求域名、客户端IP地址等字段识别到某类请求方,然后进行插件过滤并转发请求到指定上游,通过抽象出消费方,可通过插件聚合创建出消费方,通过在设置路由规则时绑定和启用。

上游(Upstream):是虚拟主机抽象,对给定的多个服务节点按照配置规则进行负载均衡。Upstream的地址信息可以直接配置到Route(或Service)上,当Upstream有重复时,就需要用“引用”方式避免重复了。

服务(Service):是某类API的抽象(也可以理解为一组Route的抽象)。它通常与上游服务抽象是一一对应的,Route与Service之间,通常是N:1的关系。不同Route规则同时绑定到一个Service上,这些Route将具有相同的上游和插件配置,减少冗余配置。

image.png

Script(脚本):表示将在 HTTP 请求/响应生命周期期间执行的脚本。配置可直接绑定在 Route 上。Script 与 Plugin 互斥,且优先执行 Script ,这意味着配置 Script 后,Route 上配置的 Plugin 将不被执行。Script 也有执行阶段概念,支持 access、header_filter、body_filter 和 log 阶段。系统会在相应阶段中自动执行 Script 脚本中对应阶段的代码。

{
     ...
    "script": "local _M = {} \n function _M.access(api_ctx) \n ngx.log(ngx.INFO,\"hit access phase\") \n end \nreturn _M"
}

3.2 基于Apisix Dashboard的路由配置

开放控制台访问:

修改/usr/local/apisix/conf/config.yaml配置文件,增加允许访问的远程 IP 地址

 allow_admin:                
    - 127.0.0.0/24              # If we don't set any IP list, then any IP access is allowed by default.
    - 1.1.1.0/24           # 新增加的远程IP地址段。                

3.2.1 创建上游

image.png

3.2.2 创建路由

image.png

3.2.3 配置路径

image.png

3.2.4 选择上游

image.png

四、插件使用

4.1 插件加载流程

image.png

请求路由是通过查询ETCD的路由和消费方进行插件匹配,过滤得到可使用的插件后运行插件进行动态上游反向代理。

4.2 插件使用

image.png
image.png

通过配置路由时进行插件配置启用响应插件,并进行插件文件配置信息配置

4.2.1 以limt-req 为例的基于漏桶原理的请求限速

漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。

4.2.2 属性说明

rate:指定的请求速率(以秒为单位),请求速率超过 rate 但没有超过 (rate + brust)的请求会被加上延时burst:请求速率超过 (rate + brust)的请求会被直接拒绝rejected_code:当请求超过阈值被拒绝时,返回的 HTTP 状态码key:是用来做请求计数的依据,当前接受的 key 有:"remote_addr"(客户端 IP 地址), "server_addr"(服务端 IP 地址), 请求头中的"X-Forwarded-For" 或 "X-Real-IP"。

image.png

上述截图配置:限制了每秒请求速率为 1,大于 1 小于 3的会被加上延时,速率超过 3就会被拒绝。

五、通过Nacos实现网关下的注册发现

5.1 启用nacos动态注册服务

在文件 conf/config.yaml 中添加以下配置到,启用nacos动态注册服务:

image.png

5.2 Upstream配置

image.png

配置上游服务,选择使用服务发现,填写服务名、命名空间等保存,最后通过创建路由服务关联上游服务即可实现nacos的动态注册发现服务。


程序员的核心竞争力其实还是技术,因此对技术还是要不断的学习,关注 “IT巅峰技术” 公众号 ,该公众号内容定位:中高级开发、架构师、中层管理人员等中高端岗位服务的,除了技术交流外还有很多架构思想和实战案例。

作者是 《 消息中间件 RocketMQ 技术内幕》 一书作者,同时也是 “RocketMQ 上海社区”联合创始人,曾就职于拼多多、德邦等公司,现任上市快递公司架构负责人,主要负责开发框架的搭建、中间件相关技术的二次开发和运维管理、混合云及基础服务平台的建设。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容