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.rhkb.cn/news/288286.html

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

相关文章

37、Linux中Xsync数据同步备份工具

37、Linux中Xsync数据同步备份工具 一、介绍二、配置集群hostname三、修改xsync文件四、赋权五、安装Rsync六、验证一七、配置免密登录1、生成rsa密钥2、copy机器自身公钥到目标机器3、.ssh/文件目录赋权 八、验证二 ⚠️ 注:本文全程在普通用户下操作,…

基于RK3588多can口多串口机器人全功能板

RK3588机器人控制器有五大技术优势 1. 内置多种功能强大的嵌入式硬件引擎,支持8K60fps 的 H.265 和 VP9 解码器、8K30fps 的 H.264 解码器和 4K60fps 的 AV1 解码器;支持 8K30fps 的 H.264 和H.265 编码器,高质量的 JPEG 编码器/解码器&…

网络探测工具Nmap介绍

1. Nmap简介 Nmap是一款用于网络发现和安全审计的网络安全工具。可用于列举网络主机清单、管理服务升级调度、监控主机、监控主机服务运行状况、检测目标主机是否在线和端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等。 2. 命令大纲 3. 命令详细介绍…

基于 Linux 的更新版 MaxPatrol VM 可扫描 Windows

👾 MaxPatrol VM 2.1 是俄罗斯唯一一款可以安装在 Linux 上并以审计和五重测试模式扫描 Windows 主机(甚至是旧版本)的漏洞管理产品。 让我们告诉你更新后的 MaxPatrol VM 还有哪些有用的功能: 1. 由于采用了新的数据存储模式&a…

【物联网开源平台】tingsboard安装与编译

别看这篇了,这篇就当我的一个记录,我有空我再写过一篇,编译的时候出现了一个错误,然后我针对那一个错误执行了一个命令,出现了绿色的succes,我就以为整个tingsboard项目编译成功了,后面发现的时候&#xff…

dubbo 源码系列之-集群三板斧---负载均衡(二)

在上一课时我们了解了 LoadBalance 接口定义以及 AbstractLoadBalance 抽象类的内容,还详细介绍了 ConsistentHashLoadBalance 以及 RandomLoadBalance 这两个实现类的核心原理和大致实现。本课时我们将继续介绍 LoadBalance 的剩余三个实现。 LeastActiveLoadBala…

C语言从入门到实战----数据在内存中的存储

1. 整数在内存中的存储 在讲解操作符的时候,我们就讲过了下⾯的内容: 整数的2进制表⽰⽅法有三种,即 原码、反码和补码 有符号的整数,三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤…

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和,即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…

【MD】激光驱动原子动力学的全尺寸从头算模拟

Zeng Q, Chen B, Zhang S, et al. Full-scale ab initio simulations of laser-driven atomistic dynamics[J]. npj Computational Materials, 2023, 9(1): 213.核心研究内容: 本文研究了激光驱动的原子动力学的全尺度从头算模拟。研究的重点是探讨在极端条件下材料…

Linux基础系统设置与备份策略

文章目录 Linux基础系统设置网络设置(手动设置与DHCP自动获取):nmcli、hostname日期与时间设置:timedatectl、ntpdate语系设置防火墙简易设置 Linux 服务器硬件数据的收集:dmidecode、lspci、lsusb、iostat了解磁盘的健康状态Linux 备份要点确…

【MySQL】2.MySQL数据库的基本操作

目录 数据库基本操作 查看数据库信息 查看数据库结构 显示数据表的结构(字段) 常用的数据类型 数据库管理操作 SQL语句概述 SQL分类 1.DDL:数据定义语言 1.1创建数据库和表 创建数据库 创建数据表 1.2删除数据库和表 删除数据表…

vscode c++环境配置

1.基础软件安装 安装Visual Studio Code. 安装C拓展。点击在vscode界面最左侧的Extensions图标(打开快捷键:ctrlshiftX),搜索“C/C”,点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下…

Linux系统使用Docker部署Jupyter Notebook结合内网穿透实现公网访问本地笔记

文章目录 1. 选择与拉取镜像2. 创建容器3. 访问Jupyter工作台4. 远程访问Jupyter工作台4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定二级子域名地址远程访问 本文主要介绍如何在Ubuntu系统中使用Docker本地部署Jupyter Notebook,并结合cpolar内网穿透…

《早起的奇迹》要么躺在床上等待生活的暴击,要么早起创造奇迹 - 三余书屋 3ysw.net

精读文稿 今天我们讲述的是关于《早起的奇迹》。通过神奇的早起,我们可以获得改变人生的力量。首先我要给你讲一个故事,这个故事的主人公是一个年轻人,他在少年时就取得了巨大的成就,在15岁时他已经拥有了自己的电台节目&#xff…

数据结构:堆和二叉树遍历

堆的特征 1.堆是一个完全二叉树 2.堆分为大堆和小堆。大堆:左右节点都小于根节点 小堆:左右节点都大于根节点 堆的应用:堆排序,topk问题 堆排序 堆排序的思路: 1.升序排序,建小堆。堆顶就是这个堆最小…

2024/03/27(C++·day3)

一、思维导图 二、完成下面类 代码 #include <cstring> #include <iostream>using namespace std;class myString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 无参构造函数myString() : size(10){str new char[si…

JVM(六)——内存模型与高效并发

内存模型与高效并发 一、java 内存模型 【java 内存模型】是 Java Memory Model&#xff08;JMM&#xff09; 简单的说&#xff0c;JMM 定义了一套在多线程读写共享数据时&#xff08;成员变量、数组&#xff09;时&#xff0c;对数据的可见性、有序 性、和原子性的规则和保障…

基于springboot+vue+Mysql的网上图书商城

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

M1 mac安装 Parallels Desktop 18 激活

M1 mac安装 Parallels Desktop 18 激活 下载安装Parallels Desktop 18.1.1 (53328) 激活1. 拷贝prl_disp_service2. 在终端打开Crack所在位置3. 输入命令&#xff0c;激活成功 下载 安装包和激活文件下载地址 链接: https://pan.baidu.com/s/1EjT7xeEDcntIIoOvvhBDfg?pwd9pue …

基于springboot的房屋租赁管理系统+数据库+免费远程调试

项目介绍: 基于springboot的房屋租赁管理系统。Javaee项目&#xff0c;springboot项目&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringBoot JspMaven来实现。MyS…