写点什么

Apisix 网关快速入门实践

作者:IT巅峰技术
  • 2022-11-18
    上海
  • 本文字数:2160 字

    阅读完需:约 7 分钟

Apisix网关快速入门实践

一、Apisix 简介


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



(软件架构图)


二、网关搭建


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 仓库安装

  2. sudo yum install -y

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

  4. sudo yum install apisix

  5. 通过离线 RPM 包安装

  6. sudo mkdir -p apisix

  7. sudo yum install -y

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

  9. sudo yum clean all && yum makecache

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

  11. apisix init #配置初始化

  12. 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 将具有相同的上游和插件配置,减少冗余配置。



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 创建上游



3.2.2 创建路由



3.2.3 配置路径



3.2.4 选择上游



四、插件使用


4.1 插件加载流程



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


4.2 插件使用




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


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"。



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


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


5.1 启用 nacos 动态注册服务


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



5.2 Upstream 配置



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




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


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

发布于: 刚刚阅读数: 3
用户头像

一线架构师、二线开发、三线管理 2021-12-07 加入

Redis6.X、ES7.X、Kafka3.X、RocketMQ5.0、Flink1.X、ClickHouse20.X、SpringCloud、Netty5等热门技术分享;架构设计方法论与实践;作者热销新书《RocketMQ技术内幕》;

评论

发布
暂无评论
Apisix网关快速入门实践_IT巅峰技术_InfoQ写作社区