Apisix網(wǎng)關(guān)快速入門實踐

一、Apisix簡介

APISIX是一個微服務(wù)API網(wǎng)關(guān),具有高性能、可擴展性等優(yōu)點。它基于nginx(openresty)、Lua、etcd實現(xiàn)功能,借鑒了Kong的思路。和傳統(tǒng)的API網(wǎng)關(guān)相比,APISIX具有較高的性能和較低的資源消耗,并且具有豐富的插件,也方便自己進行插件擴展。

軟件架構(gòu)圖.png

二、網(wǎng)關(guān)搭建

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 #啟動網(wǎng)關(guān)

三、路由配置

3.1 重點概念:

路由(Route):通過定義一些規(guī)則來匹配客戶端的請求,然后根據(jù)匹配結(jié)果加載并執(zhí)行相應(yīng)的插件,并把請求轉(zhuǎn)發(fā)給到指定Upstream。主要包含三部分內(nèi)容:匹配規(guī)則(比如uri、host、remote_addr等),插件配置(限流限速等)和上游信息。請看下圖示例,是一些Route規(guī)則的實例,當某些屬性值相同時,圖中用相同顏色標識。

消費方(Consumer):對于API網(wǎng)關(guān)通常可以用請求域名、客戶端IP地址等字段識別到某類請求方,然后進行插件過濾并轉(zhuǎn)發(fā)請求到指定上游,通過抽象出消費方,可通過插件聚合創(chuàng)建出消費方,通過在設(shè)置路由規(guī)則時綁定和啟用。

上游(Upstream):是虛擬主機抽象,對給定的多個服務(wù)節(jié)點按照配置規(guī)則進行負載均衡。Upstream的地址信息可以直接配置到Route(或Service)上,當Upstream有重復時,就需要用“引用”方式避免重復了。

服務(wù)(Service):是某類API的抽象(也可以理解為一組Route的抽象)。它通常與上游服務(wù)抽象是一一對應(yīng)的,Route與Service之間,通常是N:1的關(guān)系。不同Route規(guī)則同時綁定到一個Service上,這些Route將具有相同的上游和插件配置,減少冗余配置。

image.png

Script(腳本):表示將在 HTTP 請求/響應(yīng)生命周期期間執(zhí)行的腳本。配置可直接綁定在 Route 上。Script 與 Plugin 互斥,且優(yōu)先執(zhí)行 Script ,這意味著配置 Script 后,Route 上配置的 Plugin 將不被執(zhí)行。Script 也有執(zhí)行階段概念,支持 access、header_filter、body_filter 和 log 階段。系統(tǒng)會在相應(yīng)階段中自動執(zhí)行 Script 腳本中對應(yīng)階段的代碼。

{
     ...
    "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 創(chuàng)建上游

image.png

3.2.2 創(chuàng)建路由

image.png

3.2.3 配置路徑

image.png

3.2.4 選擇上游

image.png

四、插件使用

4.1 插件加載流程

image.png

請求路由是通過查詢ETCD的路由和消費方進行插件匹配,過濾得到可使用的插件后運行插件進行動態(tài)上游反向代理。

4.2 插件使用

image.png
image.png

通過配置路由時進行插件配置啟用響應(yīng)插件,并進行插件文件配置信息配置

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

漏桶算法(Leaky Bucket)是網(wǎng)絡(luò)世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)時經(jīng)常使用的一種算法,它的主要目的是控制數(shù)據(jù)注入到網(wǎng)絡(luò)的速率,平滑網(wǎng)絡(luò)上的突發(fā)流量。漏桶算法提供了一種機制,通過它,突發(fā)流量可以被整形以便為網(wǎng)絡(luò)提供一個穩(wěn)定的流量。

4.2.2 屬性說明

rate:指定的請求速率(以秒為單位),請求速率超過 rate 但沒有超過 (rate + brust)的請求會被加上延時burst:請求速率超過 (rate + brust)的請求會被直接拒絕rejected_code:當請求超過閾值被拒絕時,返回的 HTTP 狀態(tài)碼key:是用來做請求計數(shù)的依據(jù),當前接受的 key 有:"remote_addr"(客戶端 IP 地址), "server_addr"(服務(wù)端 IP 地址), 請求頭中的"X-Forwarded-For" 或 "X-Real-IP"。

image.png

上述截圖配置:限制了每秒請求速率為 1,大于 1 小于 3的會被加上延時,速率超過 3就會被拒絕。

五、通過Nacos實現(xiàn)網(wǎng)關(guān)下的注冊發(fā)現(xiàn)

5.1 啟用nacos動態(tài)注冊服務(wù)

在文件 conf/config.yaml 中添加以下配置到,啟用nacos動態(tài)注冊服務(wù):

image.png

5.2 Upstream配置

image.png

配置上游服務(wù),選擇使用服務(wù)發(fā)現(xiàn),填寫服務(wù)名、命名空間等保存,最后通過創(chuàng)建路由服務(wù)關(guān)聯(lián)上游服務(wù)即可實現(xiàn)nacos的動態(tài)注冊發(fā)現(xiàn)服務(wù)。


程序員的核心競爭力其實還是技術(shù),因此對技術(shù)還是要不斷的學習,關(guān)注 “IT巔峰技術(shù)” 公眾號 ,該公眾號內(nèi)容定位:中高級開發(fā)、架構(gòu)師、中層管理人員等中高端崗位服務(wù)的,除了技術(shù)交流外還有很多架構(gòu)思想和實戰(zhàn)案例。

作者是 《 消息中間件 RocketMQ 技術(shù)內(nèi)幕》 一書作者,同時也是 “RocketMQ 上海社區(qū)”聯(lián)合創(chuàng)始人,曾就職于拼多多、德邦等公司,現(xiàn)任上市快遞公司架構(gòu)負責人,主要負責開發(fā)框架的搭建、中間件相關(guān)技術(shù)的二次開發(fā)和運維管理、混合云及基礎(chǔ)服務(wù)平臺的建設(shè)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容