API网关-Apisix路由配置教程(数据编辑器方式)

文章目录

  • 前言
  • 一、端口修改
    • 1. apisix 端口修改
    • 2. dashboard 端口修改
    • 3. 登录密码修改
  • 二、常用插件介绍
    • 1. 常用转换插件
      • 1.1 proxy-rewrite插件
        • 1.1.1 属性字段
        • 1.1.2 配置示例
    • 2. 常用认证插件
      • 2.1 key-auth插件
        • 2.1.1 消费者端字段
        • 2.1.2 路由端字段
        • 2.1.3 配置示例
      • 2.2 basic-auth插件
        • 2.2.1 消费者端字段
        • 2.2.2 路由端字段
        • 2.2.3 配置示例
    • 3. 常用安全插件
      • 3.1 consumer-restriction插件
        • 3.1.1 属性字段
        • 3.1.2 配置示例
  • 三、消费者配置(数据编辑器方式)
    • 1. UI页面对应字段说明
    • 2. 配置示例
  • 四、上游配置
    • 1. UI页面对应字段说明
    • 2. 配置示例
    • 3. 健康检查
      • 3.1 主动健康检查
      • 3.2 被动健康检查
  • 五、路由配置
    • 1. UI页面对应字段说明
    • 2. 配置示例(绑定上游方式)
  • 六、模拟异常情况
    • 1. 模拟节点不健康
      • 1.1 上游配置
      • 1.2 路由配置如下
      • 1.3 测试结果
      • 1.4 日志查看
      • 1.5 结果分析
  • 总结


前言

本文介绍了在 API 网关中进行端口修改、常用插件配置、消费者配置、上游配置和路由配置的方法。通过对这些方面的详细说明,读者可以了解如何灵活地调整和定制自己的 API 网关环境,以满足不同场景下的需求。


一、端口修改

1. apisix 端口修改

添加多个代理监听端口,修改/usr/local/apisix/conf/config.yaml配置文件,添加如下配置,添加的配置将覆盖默认配置文件。

 apisix:node_listen:- 9080- 9081- 9082

2. dashboard 端口修改

修改/usr/local/apisix/conf/conf.yaml配置文件,修改如下配置。

conf:listen:port: 9000

3. 登录密码修改

可修改/usr/local/apisix/conf/conf.yaml配置文件中的用户认证配置。

authentication:users:- username: adminpassword: admin- username: userpassword: user

二、常用插件介绍

使用插件需要配置 plugins 字段,不配置默认不使用插件。启用插件需要把 plugins 字段下 _meta.disable 的值设为 false。

1. 常用转换插件

1.1 proxy-rewrite插件

proxy-rewrite 是处理上游代理信息重写的插件,支持对 scheme、uri、host 等信息进行重写。

1.1.1 属性字段
名称类型是否必填默认值有效值描述
uristring转发到上游的新 uri 地址
methodstringGET, POST, PUT, HEAD, DELETE, OPTIONS,MKCOL, COPY, MOVE, PROPFIND, PROPFIND,LOCK, UNLOCK, PATCH, TRACE将路由的请求方法代理为该请求方法
regex_uriarray[string]使用正则表达式匹配来自客户端的 uri,如果匹配成功,则使用模板替换转发到上游的 uri,如果没有匹配成功,则将客户端请求的 uri 转发至上游。当同时配置 uri 和 regex_uri 属性时,优先使用 uri。当前支持多组正则表达式进行模式匹配,插件将逐一尝试匹配直至成功或全部失败。例如:[“^/iresty/(.*)/(.*)/(.*)”, “/$1-$2-$3”, ^/theothers/(.*)/(.*)", “/theothers/$1-$2”],奇数索引的元素代表匹配来自客户端请求的 uri 正则表达式,偶数索引的元素代表匹配成功后转发到上游的 uri 模板。请注意该值的长度必须为偶数值。
hoststring转发到上游的新主机地址
headersobject转发到上游的新 uri 地址
headers.addobject添加新的请求头,如果请求头已存在,则追加到末尾。格式为 {“name”: “value”, …}
headers.setobject改写请求头,如果请求头不存在,则会添加。格式为 {“name”: “value”, …}
headers.removearray移除请求头。格式为 [“name”, …]
use_real_request_uri_unsafebooleanfalse使用 real_request_uri(nginx 中的原始 $request_uri)绕过 URI 规范化。启用它被认为是不安全的,因为它会绕过所有 URI 规范化步骤。
1.1.2 配置示例
...
plugins:proxy-rewrite:regex_uri:- ^/postman/(.*)- /$1...
...

2. 常用认证插件

2.1 key-auth插件

key-auth插件是一种用于向路由或服务添加身份验证密钥的工具,它需要与消费者配合使用。通过将密钥添加到请求参数或请求头中,消费者可以验证其请求。

2.1.1 消费者端字段
名称类型是否必填描述
keystringkey 是唯一的,不同的消费者应设置不同的 key。如果多个消费者使用了相同的 key,将会出现请求匹配异常。
2.1.2 路由端字段
名称类型是否必填默认值描述
headerstringapikey设置从哪个请求头获取 key
querystringapikey设置从哪个请求请求参数获取 key
headerbooleanfalse当设置为 false 时,将含有认证信息的请求头或请求参数传递给上游。如果为 true 时,将删除对应的请求头或请求参数,具体删除哪一个取决于是从请求头获取 key 还是从请求参数获取 key。
2.1.3 配置示例

消费者端:

username: consumer_demo
desc: consumer_demo描述
plugins:key-auth:_meta:disable: falsekey: auth-one...

路由端:

...
plugins:key-auth:_meta:disable: falseheader: apikey...
...

2.2 basic-auth插件

basic-auth插件是一种用于向路由或服务添加基本访问身份验证的工具。它需要与消费者配合使用。API的消费者可以将他们的密钥添加到请求头中,以验证其请求。不同的消费设置该插件要设置不同的用户名,如果不同消费者使用该插件设置的用户名相同,可能会有异常。

2.2.1 消费者端字段
名称类型是否必填描述
usernamestring消费者的唯一用户名
passwordstring密码
2.2.2 路由端字段
名称类型是否必填默认值描述
hide_credentialsbooleanfalse设置为 true 时,不会将认证请求头传递给上游
2.2.3 配置示例

消费者端:

username: consumer_demo
desc: consumer_demo描述
plugins:basic-auth:_meta:disable: falsepassword: userusername: user...

路由端:

...
plugins:basic-auth:_meta:disable: falsehide_credentials: false...
...

3. 常用安全插件

3.1 consumer-restriction插件

consumer-restriction 插件允许用户根据路由、服务或消费者来设置相应的访问限制。

3.1.1 属性字段
名称类型是否必填默认值有效值描述
typestringconsumer_nameconsumer_name, consumer_group_id, service_id, route_id支持设置访问限制的对象类型。
consumer_name:把 Consumer 的 username 列入白名单或黑名单来限制 Consumer 对 Route 或 Service 的访问。
consumer_group_id: 把 Consumer Group 的 id 列入白名单或黑名单来限制 Consumer 对 Route 或 Service 的访问。
service_id:把 Service 的 id 列入白名单或黑名单来限制 Consumer 对 Service 的访问,需要结合授权插件一起使用。
route_id:把 Route 的 id 列入白名单或黑名单来限制 Consumer 对 Route 的访问。
whitelistarray[string]加入白名单的对象,优先级高于 allowed_by_methods
blacklistarray[string]加入黑名单的对象,优先级高于 whitelist
rejected_codeinteger403[200,…]当请求被拒绝时,返回的 HTTP 状态码
rejected_msgstring当请求被拒绝时,返回的错误信息
allowed_by_methodsarray[object]一组为消费者设置允许的配置,包括用户名和允许的 HTTP 方法列表
allowed_by_methods.user为消费者设置的用户名
allowed_by_methods.methodsarray[string]GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT, TRACE, PURGE允许的 HTTP 方法列表
3.1.2 配置示例
...
plugins:consumer-restriction:_meta:disable: falseallowed_by_methods:- methods:- GETuser: postmanget- methods:- GETuser: consumer_demoblacklist:- consumer_demo2- consumer_demo3rejected_code: 403rejected_msg: 请求被拒绝type: consumer_namewhitelist:- postmanget- consumer_demo- consumer_demo1- consumer_demo2- consumer_demo3...
...

三、消费者配置(数据编辑器方式)

消费者是路由的消费方,形式包括开发者、最终用户、API 调用等。
它具有最高优先级:Consumer > Route > Plugin Config > Service。

1. UI页面对应字段说明

UI页面字段名数据编辑器字段是否必填
名称username
描述desc
插件plugins

2. 配置示例

创建消费者consumer_demo,配置并启用basic-auth插件。

username: consumer_demo
desc: consumer_demo描述
plugins:basic-auth:_meta:disable: falsepassword: userusername: userkey-auth:_meta:disable: truekey: auth-one

四、上游配置

在 API 网关中,“上游”(Upstream)是指向后端服务的请求转发目标。API Gateway 通过将客户端请求代理到上游服务器来处理和响应这些请求。

1. UI页面对应字段说明

UI页面字段名数据编辑器字段是否必填默认值说明
名称name上游的名称
描述desc上游的描述
负载均衡算法typeroundrobin默认为带权轮询
主机名nodes.host目标节点的主机名
端口nodes.port目标节点的端口
权重nodes.weight目标节点的权重
Host 请求头pass_hostpasspass:保持与客户端请求一致的主机名
node:使用目标节点列表中的主机名或IP
重试次数retries可用后端节点的数量重试机制将请求发到下一个上游节点。值为 0 表示禁用重试机制,留空表示使用可用后端节点的数量。
重试超时时间retry_timeout之前的请求和重试请求花费太多时间就不再继续重试限制是否继续重试的时间,若之前的请求和重试请求花费太多时间就不再继续重试。0 代表不启用重试超时机制。
协议schemeHTTP
连接超时timeout.connect6建立从请求到上游服务器的连接的超时时间
发送超时timeout.send6发送数据到上游服务器的超时时间
接受超时timeout.read6从上游服务器接收数据的超时时间
连接池容量keepalive_pool.size320为 upstream 对象设置独立的连接池容量
连接池空闲超时时间keepalive_pool.idle_timeout60为 upstream 对象设置独立的连接池空闲超时时间
连接池请求数量keepalive_pool.requests1000为 upstream 对象设置独立的连接池请求数量

2. 配置示例

name: postman
desc: postman描述
type: roundrobin
nodes:- host: postman-echo.comport: 80weight: 1- host: postman-echo1.comport: 80weight: 1- host: postman-echo2.comport: 80weight: 1
pass_host: pass
retries: 3
retry_timeout: 6
scheme: http
timeout:connect: 6send: 6read: 6
keepalive_pool:idle_timeout: 60requests: 1000size: 320

3. 健康检查

  • 只有在 upstream 被请求时才会开始健康检查,如果 upstream 被配置但没有被请求,不会触发启动健康检查。
  • 如果没有健康的节点,那么请求会继续发送给上游。
  • 如果 upstream 中只有一个节点时不会触发启动健康检查,该唯一节点无论是否健康,请求都将转发给上游。

3.1 主动健康检查

主动健康检查指 APISIX 通过预设的探针类型(HTTP、HTTPS、TCP),主动探测上游节点的存活性。

当发向健康节点 A 的 N 个连续探针都失败时,该节点将被标记为不健康,不健康的节点将会被 APISIX 的负载均衡器忽略,无法收到请求;若某个不健康的节点,连续 M 个探针都成功时,该节点将被重新标记为健康,进而可以被代理。

3.2 被动健康检查

被动健康检查指通过判断从 APISIX 转发到上游节点的请求响应状态,来判断对应的上游节点是否健康。相对于主动健康检查,被动健康检查的方式无需发起额外的探针,但是也无法提前感知节点状态,可能会有一定量的失败请求。

若发向健康节点 A 的 N 个连续请求都被判定为失败,则该节点将被标记为不健康。

由于不健康的节点无法收到请求,仅使用被动健康检查无法重新将节点标记为健康,因此需要结合主动健康检查来使用。


五、路由配置

路由根据定义的规则匹配客户端的请求,加载并执行相应的插件,并将请求转发给指定的上游。

1. UI页面对应字段说明

UI页面字段名数据编辑器字段是否必填默认值说明
名称name路由名称唯一的,最大长度为100
标签labels为路由增加自定义标签,可用于路由分组。
标签labels.tag_nametag_name是自定义的标签名,标签名和标签值都要自定义,例如:tag_demo: postman_tag
描述desc路由的描述
发布status1设置路由状态是否启用,1表示启用,0表示禁用
匹配条件.路径uris/*匹配 uri 的路径,可设置多个匹配路径
匹配条件.HTTP方法methods不填默认所有方法,在UI页面需要选择 ALL
匹配条件.优先级priority0设置匹配条件的优先级
选择上游服务upstream_id需要绑定的上游服务的 ID,UI页面选择后会自动绑定上游对应的 ID

2. 配置示例(绑定上游方式)

name: route_demo
labels:API_VERSION: v1tag_demo: postman_tag
desc: route_demo描述
status: 1
uris:- /postman/*- /postmanget/*
methods:- GET
priority: 1
plugins:proxy-rewrite:regex_uri:- ^/postman/(.*)- /$1
upstream_id: '506489652354484505'

六、模拟异常情况

apisix主机为 192.168.145.103。使用公共接口 https://postman-echo.com/get?foo1=bar1&foo2=bar2 进行测试,该接口的返回数据如下:
在这里插入图片描述

1. 模拟节点不健康

这里准备了6个节点,分别为 postman-echo.com、postman-echo.com1、postman-echo.com2、postman-echo.com3、postman-echo.com4、postman-echo.com5,其中 postman-echo.com 节点是健康的,其他节点是不健康的。

1.1 上游配置

nodes:- host: postman-echo.comport: 80weight: 1- host: postman-echo1.comport: 80weight: 1- host: postman-echo2.comport: 80weight: 1- host: postman-echo3.comport: 80weight: 1- host: postman-echo4.comport: 80weight: 1- host: postman-echo5.comport: 80weight: 1
retries: 3
timeout:connect: 6send: 6read: 6
type: roundrobin
scheme: http
pass_host: pass
name: postman
desc: postman描述
keepalive_pool:idle_timeout: 60requests: 1000size: 320
retry_timeout: 6

1.2 路由配置如下

uris:- /postman/*- /postmanget/*
name: route_demo
desc: route_demo描述
priority: 1
methods:- GET
plugins:proxy-rewrite:regex_uri:- ^/postman/(.*)- /$1
upstream_id: '506489652354484505'
labels:API_VERSION: v1route: rpute_demo
status: 1

1.3 测试结果

成功获取到数据,但是响应时间比较长,相对于前面1s的响应时间,这里用了1.70min。
在这里插入图片描述

1.4 日志查看

查看/usr/local/apisix/logs/error.log文件,可以看到如下报错。
在这里插入图片描述
查看/usr/local/apisix/logs/access.log文件,可以看到成功的一条记录。
在这里插入图片描述

1.5 结果分析

当有其他节点不健康时,响应速度会变慢。当所有节点不健康时,无法获取响应数据。


总结

本文从多个方面介绍了在 API 网关中进行各种配置操作的方法。无论是修改端口还是添加插件或设置消费者等,都能够帮助用户更好地管理和控制其API网关环境。通过理解并熟悉这些操作步骤,读者可以根据自身需求来优化和定制他们所使用的API网关系统,并提供更高效可靠且安全性强大的服务。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 19cADG集群补丁升级

Oracle 19cADG集群补丁升级 文章目录 Oracle 19cADG集群补丁升级1.备库备份2.备库升级Opatch3.备库应用补丁4.主库备份 oracle_home目录5.主库升级Opatch6.注册补丁7.编译无效对象8.检查主库的补丁注册情况9.备库切换主库完成补丁注册 1.备库备份 su - oracle cd $ORACLE_HOME…

[webpack-cli] Invalid options object 报错

[webpack-cli] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema devServer: {contentBase: ./src, // 告诉服务器从哪里提供内容,默认情况下,它会使用当前工作目录作为根目录c…

深度学习pytorch——减少过拟合的几种方法(持续更新)

1、增加数据集 2、正则化(Regularization) 正则化:得到一个更加简单的模型的方法。 以一个多项式为例: 随着最高次的增加,会得到一个更加复杂模型,模型越复杂就会更好的拟合输入数据的模型(图-1)&#…

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中,会遇到这样的场景,需要根据某个条件对数据进行增、删、改的操作;遇到这种情况我们有2种方法进行解决: 方法一:①查询指定条件;②根据查询出的指定条件结果在执行…

阿里云国际DDoS高防的定制场景策略

DDoS高防的定制场景策略允许您在特定的业务突增时段(例如新业务上线、双11大促销等)选择应用独立于通用防护策略的定制防护策略模板,保证适应业务需求的防护效果。您可以根据需要设置定制场景策略。 背景信息 定制场景策略提供基于业务场景…

【图论 | 数据结构】用链式前向星存图(保姆级教程,详细图解+完整代码)

一、概述 链式前向星是一种用于存储图的数据结构,特别适合于存储稀疏图,它可以有效地存储图的边和节点信息,以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起,通过数组的方式连接(类似静态数组实现链表)。这种方法的优点是存储空间小,查询速度快,尤其适…

金融投贷通--功能测试分析与设计

金融投贷通功能测试分析与设计 测试点分析借款业务测试点投资业务测试点 测试用例借款业务测试用例投资业务测试用例 缺陷面试题 测试报告 测试点分析 借款业务测试点 投资业务测试点 测试用例 借款业务测试用例 借款成功(主业务)、借款成功&#xff…

iOS——【CGD】

GCD 什么是GCD GCD指的是Grand Central Dispatch,它是苹果公司开发的一套多线程编程技术。GCD提供了一种简单而有效的方式来管理应用程序中的并发任务。它通过将任务提交到适当的队列(串行队列或并发队列)来管理并发执行的任务,…

WebAR开发简介

WebAR 开发使企业能够以独特且高度有趣的方式向客户和员工提供信息。 它提供增强现实 (AR) 内容,人们在智能手机上将其视为视觉叠加。 然而,WebAR 可在手机的普通网络浏览器上运行,无需下载任何应用程序。 WebAR 的多种用途包括帮助零售和在…

跟张良均老师学大数据人工智能——数据挖掘集训营开营

集训营特色: 知识点深入浅出,实现以学促用 以业务内容为主线,数据挖掘技能嵌入 多行业项目实战,全面提升职业素养 全程线上辅导,助力熟练掌握技能 惊喜优惠: 限时“六折”! 师傅带练 方向…

Qt|读写数据库管理图片资源工具

文章目录 创建项目设置UI布局控制数据库类实现界面实现类主函数 功能:用来管理数据库中图像资源 开发环境:windows10VS2017Qt5.14.2开发 创建项目 首先创建Qt Widgets Application next->next->finish就创建好了 设置UI布局 打开已经创建好的U…

笔记本如何调节亮度?笔记本亮度调节方法

对于经常长时间面对笔记本电脑的小伙伴们来说,屏幕亮度过暗或者过亮,都会对眼睛造成伤害。那么,我们如何调节笔记本亮度至适中呢?下面为大家介绍3种简单的调节屏幕亮度的方法,一起来看看吧! 笔记本亮度调节方法一: 1、…

Amuse:.NET application for stable diffusion

目录 Welcome to Amuse! Features Why Choose Amuse? Key Highlights Paint To Image Text To Image Image To Image Image Inpaint Model Manager Hardware Requirements Compute Requirements Memory Requirements System Requirements Realtime Requirements…

Electron 入门 - 创建应用的全流程 - npm 踩坑版

说明 本文记录一下,使用Electron创建一个简单的客户端应用的全流程。 在官方文档的基础上,针对依赖安装过程中出现的异常,进行了补充,确保可以正常的创建应用。 创建步骤 0、校验node版本 官方文档建议使用 最新版本的 NodeJS …

Codigger用户篇:安全、稳定、高效的运行环境(一)

在当今数字化时代,个人数据的安全与隐私保护显得尤为重要。为了满足用户对数据信息的安全需求,我们推出Codigger分布式操作系统,它提供了一个运行私有应用程序的平台,旨在为用户提供一个安全、稳定、高效的私人应用运行环境。Codi…

html 元素宽度自适应 占据剩余宽度

弹性盒实现 父元素设置display: flex; 需要自适应宽度的子元素设置flex: 1; <html lang"en"> <head><style>*{margin: 0;padding: 0;}.main{display: flex;}.box1,.box2{width: 100px;height: 200px;}.box1{background: rgb(134 187 233);}.box2…

【javaWeb 第五篇】后端-Http协议学习

HTTP协议 HTTP概述HTTP-请求数据格式HTTP响应格式HTTP-协议解析 HTTP概述 Hyper Text Transfer Protocol,超文本传输协议&#xff0c;规定了浏览器和服务器之间的数据传输规则 简述概念就是&#xff0c;浏览器需要向服务器发送请求&#xff0c;想要得到服务器中的数据&#xff…

2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现&#xff1a; 图形&#xff08;或图像&#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形&#xff0c;位图则使用像素来描述图像。一般来说&#…

Share-ChatGPT官网UI/文件上传/联网搜索/GPTS 一并同步

地址&#xff1a;Share-ChatGPT 文章目录 界面UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&#xff0c;写论文视频演示仓库地址 界面 支持多账号同时管理&#xff0c;合理利用资源&#xff1a; UI&#xff0c;GPTS&#xff0c;读论文&#xff0c;数据分析&a…

论文篇06-论文范文-论基于架构的软件设计方法ABSD及应用(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

试题 试题:论基于架构的软件设计方法(ABSD)及应用 基于架构的软件设计(Architecture-Based Software Design,ABSD)方法以构成软件架构的商业、质量和功能需求等要素来驱动整个软件开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,它以软件系统功能的分解为基础…