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: admin
      password: admin
    - username: user
      password: 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: false
    key: auth-one
  ...

路由端:

...
plugins:
  key-auth:
    _meta:
      disable: false
    header: 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: false
    password: user
    username: user
  ...

路由端:

...
plugins:
  basic-auth:
    _meta:
      disable: false
    hide_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: false
    allowed_by_methods:
      - methods:
          - GET
        user: postmanget
      - methods:
          - GET
        user: consumer_demo
    blacklist:
      - consumer_demo2
      - consumer_demo3
    rejected_code: 403
    rejected_msg: 请求被拒绝
    type: consumer_name
    whitelist:
      - 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: false
    password: user
    username: user
  key-auth:
    _meta:
      disable: true
    key: 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.com
    port: 80
    weight: 1
  - host: postman-echo1.com
    port: 80
    weight: 1
  - host: postman-echo2.com
    port: 80
    weight: 1
pass_host: pass
retries: 3
retry_timeout: 6
scheme: http
timeout:
  connect: 6
  send: 6
  read: 6
keepalive_pool:
  idle_timeout: 60
  requests: 1000
  size: 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: v1
  tag_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.com
    port: 80
    weight: 1
  - host: postman-echo1.com
    port: 80
    weight: 1
  - host: postman-echo2.com
    port: 80
    weight: 1
  - host: postman-echo3.com
    port: 80
    weight: 1
  - host: postman-echo4.com
    port: 80
    weight: 1
  - host: postman-echo5.com
    port: 80
    weight: 1
retries: 3
timeout:
  connect: 6
  send: 6
  read: 6
type: roundrobin
scheme: http
pass_host: pass
name: postman
desc: postman描述
keepalive_pool:
  idle_timeout: 60
  requests: 1000
  size: 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: v1
  route: 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网关系统,并提供更高效可靠且安全性强大的服务。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记11:数字电位器MCP4017

系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…

高速行者,5G工业路由器助力车联网无缝通信

随着5G技术的飞速发展,智能制造正迎来一个全新的时代。5G工业路由器作为车联网的核心设备,正在发挥着关键的作用。它不仅提供高速稳定的网络连接,还支持大规模设备连接和高密度数据传输,为车辆之间的实时通信和信息交换提供了强有…

GitLab更新失败(CentOS)

使用yum更新GitLab,出现如下错误提示: Error: Failed to download metadata for repo gitlab_gitlab-ce: repomd.xml GPG signature verification error: Bad GPG signature 编写如下脚本: for pubring in /var/cache/dnf/gitlab_gitlab-?…

java Web会议信息管理系统 用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 jsp 会议信息管理系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0&am…

react native

简介 React Native 就是使用React和应用平台的原生功能来构建 Android 和 iOS 应用的开源框架。在 Android 和 iOS 开发中,一个视图是 UI 的基本组成部分,React 组件通过 JavaScript 来调用这些视图。可以构建自己的 Native Components(原生组件)&#…

智慧体育场馆的优势都有哪些?

体育场馆作为体育产业和事业发展的重要载体,全民对健康和运动的需求越来越大,体育馆的需求也更大。而以前的体育场馆管理不仅人工成本高,人民的使用和消费也不方便。因此智慧体育馆的出现大大降低了运营人力成本及现金管理风险,大…

Jmeter脚本优化——随机函数

线程组下有 2 个请求的参数中均使用到相同的参数,在进行参数化时,想 要每个请求使用不同的取值。 ( 1 ) 线程组设置如下 ( 2 ) 线程组下添加加购物车请求,请求传参包含商品 id (…

发车,易安联签约某新能源汽车领军品牌,为科技创新保驾护航

近日,易安联成功签约某新能源汽车领军品牌,为其 数十万终端用户 建立一个全新的 安全、便捷、高效一体化的零信任终端安全办公平台。 随着新能源汽车行业的高速发展,战略布局的不断扩大,技术创新不断引领其市场价值走向高点&am…

以太网PHY,MAC及其通信接口介绍

本文主要介绍以太网的 MAC 和 PHY,以及之间的 MII(Media Independent Interface ,媒体独立接口)和 MII 的各种衍生版本——GMII、SGMII、RMII、RGMII等。 一:简介 从硬件的角度看,以太网接口电路主要由MA…

docker快速安装Es和kibana

文章目录 概要一、Es二、kibana三、dcoker compose管理四、参考 概要 在工作过程中,经常需要测试环境搭建Es环境,本文基于Es V8.12.2来演示如何快速搭建单节点Es和kibana。 服务器默认已按装docker 一、Es 1:拉取镜像 docker pull elast…

【排序算法】深入解析快速排序(霍尔法三指针法挖坑法优化随机选key中位数法小区间法非递归版本)

文章目录 📝快速排序🌠霍尔法🌉三指针法🌠挖坑法✏️优化快速排序 🌠随机选key🌉三位数取中 🌠小区间选择走插入,可以减少90%左右的递归🌉 快速排序改非递归版本&#x1…

POE供电IP网络广播号角 网络号角喇叭SV-7044

POE供电IP网络广播号角 网络号角喇叭SV-7044 SV-7044是一款网络号角喇叭,具有10/100M以太网接口,从网络接口接收网络的音频数据后播放。 本网络号角喇叭内置有一个高品质扬声器,提供立体声的音频播放。该网络号角喇叭可以直接播放来自网络的音…

FPGA之组合逻辑与时序逻辑

数字逻辑电路根据逻辑功能的不同,可以分成两大类:组合逻辑电路和时序逻辑电路,这两种电路结构是FPGA编程常用到的,掌握这两种电路结构是学习FPGA的基本要求。 1.组合逻辑电路 组合逻辑电路概念:任意时刻的输出仅仅取决…

Vue 02 组件、Vue CLI

Vue学习 Vue 0201 组件引入概念组件的两种编写形式① 非单文件组件基本使用使用细节组件嵌套组件本质 VueComponent重要的内置关系 ② 单文件组件 02 Vue CLI介绍 & 文档安装使用步骤脚手架结构render默认配置ref 属性props配置mixin配置项插件scoped 样式案例:…

jmeter二次开发发送java请求_保姆级教程!!!

一、引言 JMeter是Apache基金会开发的一款开源性能测试工具,广泛应用于软件性能测试领域。它能够模拟多线程并发用户对应用程序进行压力测试,以评估应用程序的性能和稳定性。然而,在实际使用过程中,用户可能会遇到需要发送Java请…

java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor

更换JDK 问题记录 java: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module 0x3278991b) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler …

openssl AF_ALG引擎使用

cmd AF_ALG是Linux提供的一种虚拟接口,用于访问内核中的加密算法。在Linux中,可以使用AF_ALG接口配合加密算法框架(Crypto API)来进行加密操作。 以下是一个使用AF_ALG和openssl进行加密操作的例子: # 加密 openssl…

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器是一种高级别的模拟设备,用于模拟太阳光的光谱、强度及照射角度,应用于太阳能电池板、光伏系统等领域的研究和测试。其参数包括光谱范围、光强度、光源、照射角度、均匀性和稳定性,可根据需求调整…

CVE-2022-33891 Apache Spark shell 命令注入漏洞分析

漏洞简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架 Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的…

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…