APISIX-API服务网关

news/2025/3/10 18:16:15/文章来源:https://www.cnblogs.com/xiao987334176/p/18687471

一、简介

apisix是一款云原生微服务API网关,可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现,与传统API网关相比,apisix具有动态路由和插件热加载,特别适合微服务系统下的API管理。

Apisix 的诞生主要是为了是解决 Nginx 的动态配置问题以及网关功能扩展问题,其基于 Nginx 与 LuaJIT 技术带来的高性能、高灵活等特性打造。

核心概念

我们先来了解下apisix的一些核心概念,对我们接下来的使用会很有帮助!

  • 上游(Upstream):可以理解为虚拟主机,对给定的多个目标服务按照配置规则进行负载均衡。
  • 路由(Route):通过定义一些规则来匹配客户端的请求,然后对匹配的请求执行配置的插件,并把请求转发给指定的上游。
  • 消费者(Consumer):作为API网关,有时需要知道API的消费方具体是谁,通常可以用来做身份认证。
  • 服务(Service): 可以理解为一组路由的抽象。它通常与上游是一一对应的,路由与服务之间,通常是多对一的关系。
  • 插件(Plugin):API网关对请求的增强操作,可以对请求增加限流、认证、黑名单等一系列功能。可以配置在消费者、服务和路由之上。

 

二、安装

下载安装文件

由于官方提供了Docker Compose部署方案,只需一个脚本即可安装apisix的相关服务,非常方便,这里我们也采用这种方案来部署。

首先下载apisix-docker项目,其实我们只需要使用其中的example目录就行了,下载地址:https://github.com/apache/apisix-docker

这里直接下载zip文件,得到文件: apisix-docker-master.zip

然后把zip文件上传到linux服务器的/opt目录,进行解压,得到目录/opt/apisix-docker-master

进入/opt/apisix-docker-master/example目录

主要文件如下:

apisix_conf   # apisix配置文件目录
docker-compose.yml # docker-compose 部署脚本
etcd_conf # ectd配置文件目录
upstream # 两个测试用的Nginx服务配置

最新版本的docker-compose.yml,启动了5个服务,分别是:apisix,etcd,web1,web2,prometheus,grafana。

其中前2个,是最核心的,web1和web2是测试用的Nginx服务,最后2个是用来展示图表的。

 

但是这里,缺少一个核心服务apisix-dashboard,从3.6.0版本以后,就去除了apisix-dashboard。至于为什么要去除,原因不明。我从kimi得到的答案如下:

在最新版本的 apisix-docker 中移除 apisix-dashboard 的原因可能与以下几点有关:
  1. 功能集成与简化
    APISIX 本身提供了强大的 Admin API,用于管理和配置网关。通过 Admin API,用户可以直接操作 APISIX 的路由、插件等配置,而无需依赖 Dashboard。因此,为了简化部署流程,减少不必要的组件依赖,最新版本的 apisix-docker 可能选择移除 Dashboard。
  2. 部署灵活性
    Dashboard 的功能可以通过其他方式实现,例如通过自定义的管理界面或通过命令行工具。移除 Dashboard 后,用户可以根据自己的需求选择是否单独部署 Dashboard,而不是在默认的 Docker 部署中强制包含
  3. 性能与资源优化
    移除 Dashboard 可以减少 Docker 部署中的资源占用,尤其是在资源受限的环境中,用户可能更倾向于轻量化的部署
  4. 版本更新与兼容性
    如果 Dashboard 的版本更新与 APISIX 本身不完全同步,可能会导致兼容性问题。通过移除 Dashboard,用户可以更灵活地选择与 APISIX 兼容的 Dashboard 版本
如果需要使用 Dashboard,用户仍然可以单独部署 apisix-dashboard 容器,并通过配置文件将其与 APISIX 连接

 

对于新手小白来说,其实是很需要apisix-dashboard,因为他提供了web页面操作,很方便,不需要你去调用api接口来修改配置。

安装apisix-dashboard

下载3.6.0版本的文件,链接如下:https://github.com/apache/apisix-docker/tree/release/apisix-3.6.0

下载zip文件,得到apisix-docker-release-apisix-3.6.0.zip

然后把zip文件上传到linux服务器的/opt目录,进行解压,得到目录/opt/apisix-docker-release-apisix-3.6.0

 

将3.6.0版本的example/dashboard_conf,拷贝到master分支目录

cp -r /opt/apisix-docker-release-apisix-3.6.0/example/dashboard_conf /opt/apisix-docker-master/example/

创建etcd数据目录,并设置文件权限。注意:如果不设置文件权限,会导致etcd启动失败。

cd /opt/apisix-docker-master/example/

mkdir etcd_data

chmod 777 -R etcd_data

 

修改master分支的docker-compose.yml文件,增加apisix-dashboard,修改etcd持久化配置。

完整的docker-compose.yml,内容如下:

#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#version: "3"services:apisix-dashboard:image: apache/apisix-dashboard:3.0.1-alpinerestart: alwaysvolumes:- ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yamlports:- "9000:9000"networks:apisix:apisix:image: apache/apisix:${APISIX_IMAGE_TAG:-3.11.0-debian}restart: alwaysvolumes:- ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:rodepends_on:- etcd##network_mode: hostports:- "9180:9180/tcp"- "9080:9080/tcp"- "9091:9091/tcp"- "9443:9443/tcp"- "9092:9092/tcp"networks:apisix:etcd:image: bitnami/etcd:3.5.11restart: alwaysvolumes:- ./etcd_data:/bitnami/etcdenvironment:ETCD_ENABLE_V2: "true"ALLOW_NONE_AUTHENTICATION: "yes"ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379"ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"ports:- "2379:2379/tcp"networks:apisix:web1:image: nginx:1.19.0-alpinerestart: alwaysvolumes:- ./upstream/web1.conf:/etc/nginx/nginx.confports:- "9081:80/tcp"environment:- NGINX_PORT=80networks:apisix:web2:image: nginx:1.19.0-alpinerestart: alwaysvolumes:- ./upstream/web2.conf:/etc/nginx/nginx.confports:- "9082:80/tcp"environment:- NGINX_PORT=80networks:apisix:prometheus:image: prom/prometheus:v2.25.0restart: alwaysvolumes:- ./prometheus_conf/prometheus.yml:/etc/prometheus/prometheus.ymlports:- "9090:9090"networks:apisix:grafana:image: grafana/grafana:7.3.7restart: alwaysports:- "3000:3000"volumes:- "./grafana_conf/provisioning:/etc/grafana/provisioning"- "./grafana_conf/dashboards:/var/lib/grafana/dashboards"- "./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini"networks:apisix:networks:apisix:driver: bridgevolumes:etcd_data:driver: local
View Code

可以看到apisix-dashboard的版本为:3.0.1,其实这个版本也不低,算是最后一个版本了

查看镜像版本,链接地址:https://hub.docker.com/r/apache/apisix-dashboard/tags

 

 可以看到latest版本,最近一次更新是2年前。3.0.1,也是2年前。 也就是说,这就是最后一个版本了,2年都没更新了,后续也不会再更新了。

 

启动服务

cd /opt/apisix-docker-master/example

docker-compose up -d

 

查看启动服务状态

# docker-compose psName                         Command               State                                                                                   Ports                                                                                
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
example-apisix-1             /docker-entrypoint.sh dock ...   Up      0.0.0.0:9080->9080/tcp,:::9080->9080/tcp, 0.0.0.0:9091->9091/tcp,:::9091->9091/tcp, 0.0.0.0:9092->9092/tcp,:::9092->9092/tcp,                                        0.0.0.0:9180->9180/tcp,:::9180->9180/tcp, 0.0.0.0:9443->9443/tcp,:::9443->9443/tcp                                                                                   
example-apisix-dashboard-1   /usr/local/apisix-dashboar ...   Up      0.0.0.0:9000->9000/tcp,:::9000->9000/tcp                                                                                                                             
example-etcd-1               /opt/bitnami/scripts/etcd/ ...   Up      0.0.0.0:2379->2379/tcp,:::2379->2379/tcp, 2380/tcp                                                                                                                   
example-grafana-1            /run.sh                          Up      0.0.0.0:3000->3000/tcp,:::3000->3000/tcp                                                                                                                             
example-prometheus-1         /bin/prometheus --config.f ...   Up      0.0.0.0:9090->9090/tcp,:::9090->9090/tcp                                                                                                                             
example-web1-1               /docker-entrypoint.sh ngin ...   Up      0.0.0.0:9081->80/tcp,:::9081->80/tcp                                                                                                                                 
example-web2-1               /docker-entrypoint.sh ngin ...   Up      0.0.0.0:9082->80/tcp,:::9082->80/tcp   

可以看到启动了7个服务,确保都是up状态。

 

三、web页面登录

接下来就可以通过可视化工具来管理apisix了,登录账号密码为admin:admin,访问地址:http://192.168.20.128:9000/

 登录之后看下界面,还是挺漂亮的,apisix搭建非常简单

 点击仪表盘-->现在配置,输入地址:http://192.168.20.128:3000/

添加完成之后,就可以看到仪表盘了

 还有两个测试服务:

web1访问地址:http://192.168.20.128:9081/,访问就看到页面输出:hello web1

web2访问地址:http://192.168.20.128:9082/,访问就看到页面输出:hello web2

 

四、APISIX使用

apisix作为新一代的网关,不仅支持基本的路由功能,还提供了丰富的插件,功能非常强大。

基本使用:

我们先来体验下apisix的基本功能,之前已经启动了两个Nginx测试服务web1和web2,接下来我们将通过apisix的路由功能来访问它们

上游

首先我们需要创建上游(Upstream),上游相当于虚拟主机的概念,可以对真实的服务提供负载均衡功能;

点击创建

 创建web1的上游,设置好名称、负载均衡算法和目标节点信息;

 

 剩下的默认即可,然后就可以创建完成。

 再按照上述方法创建web2的上游,创建完成后上游列表显示如下;

路由

 创建web1的路由(Route),路由可以用于匹配客户端的请求,然后转发到上游;

 点击创建

 输入名称web1

 输入路径/web1/*

 选择好路由的上游为web1

 接下来选择需要应用到路由上的插件,apisix的插件非常丰富,多达三十种,作为基本使用,我们暂时不选插件;

 再创建web2的路由,创建完成后路由列表显示如下;

 接下来我们通过apisix网关访问下

web1服务:http://192.168.20.128:9080/web1/

web2服务:http://192.168.20.128:9080/web2/

 进阶使用

 限流功能

有时候我们需要对网关进行限流操作,比如每个客户端IP在30秒内只能访问2次接口,可以通过启用limit-count插件来实现。

我们在创建路由的时候可以选择配置limit-count插件;

编辑路由web1,启动插件limit-count

 然后对limit-count插件进行配置,根据remote_addr进行限流;

访问web1服务:http://192.168.20.128:9080/web1/

当我们在30秒内第3次调用接口时,apisix会返回503来限制我们的调用。

 

ip限制

假如我们需要对某个url做ip限制,只允许限定的ip访问,可以使用插件ip-restriction

编辑路由web2,启用插件

 启用插件,如果你不知道怎么配置,可以点击文档

 会打开一个新的链接:https://apisix.apache.org/docs/apisix/plugins/ip-restriction/

 那么根据文档,修改配置

{"whitelist": ["127.0.0.1","113.74.26.106/24"],"message": "Do you want to do something bad?"
}

效果如下:

访问web2服务:http://192.168.20.128:9080/web2/

这里就会出现错误提示了

 

总结

体验了一把apisix这个全新一代的API网关,有可视化管理的网关果然不一样,简单易用,功能强大!如果你的微服务是云原生的话,可以试着用它来做网关。

其实apisix并不是个小众框架,很多国内外大厂都在使用了,如果你想知道哪些公司在使用,可以参考下面的连接。

https://github.com/apache/apisix/blob/master/powered-by.md

 

apisix的官方文档非常友好,支持中文,简直是业界良心!过一遍官方文档基本就能掌握apisix了。

官方文档:https://apisix.apache.org/zh/docs/apisix/getting-started

 

本文参考链接:https://blog.csdn.net/weixin_43064185/article/details/130223907

 

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

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

相关文章

会议真的有必要吗?我们产品开发9年了,但从来没开过会

在经历了10多年稳定安逸但缺少激情的朝九晚五工作后,于2017年我成立了一家软件公司,以自己所喜欢节奏和方式工作。 在这近10年的时间内我们开发了多个成熟的软件产品,已有不少用户在使用,独立自由且保持盈利。我们发现在这些年的软件研发过程中,我们软件研发团队竟然没有一…

C# SqlParameter设置值为0数据库实际为null的原因

以前我也发现了这个问题,当时 我是想通过SqlParameter插入一个int数据到数据库,类似下面这样1 MySqlParameter[] parameters = new MySqlParameter[] 2 { 3 new MySqlParameter("@order",0) 4 } 但是执行后,会发现数据库显示为null,当时没去…

java基础Day6 java数组

一、数组的定义 二、数组的声明和创建 dataType[] arrayRefVar;//首选方法 dataType arrayRefVar[];//效果相同,但不是首选方法int[] nums;//声明一个数组nums = new int[10];//创建一个数组//给数组元素赋值 nums[0] = 1; nums[1] = 2; nums[2] = 3; nums[3] = 4; nums[4] = …

windows服务管理

windows服务管理在 Windows 系统中,有多种方法可以管理服务。以下是一些常用的服务管理方法: 1. 服务控制管理器 (SCM) 服务控制管理器是一个系统级别的工具,用于启动、停止、暂停和恢复服务。它可以通过以下方式访问:运行命令:在“运行”对话框(快捷键 Win + R)中输入 …

深入探讨存储过程的创建与应用:提高数据库管理效率的关键工具

title: 深入探讨存储过程的创建与应用:提高数据库管理效率的关键工具 date: 2025/1/23 updated: 2025/1/23 author: cmdragon excerpt: 在数据驱动的商业环境中,数据库管理系统必须具备高效的操作能力。而存储过程作为一种封装的数据库逻辑,提供了一种有效的解决方案,以增…

大模型论文精选||多智能体微调:通过多样推理链实现自我提升

多智能体微调是一种实现自我提升的补充方法,它将微调应用于语言模型的多智能体群体。一组均基于相同基础模多智能体微调是一种实现自我提升的补充方法,它将微调应用于语言模型的多智能体群体。一组均基于相同基础模型的语言模型,通过模型间的多智能体交互生成的数据,分别对…

LWIP UDP使用

MCU: 小华HC32F4A0 板子没有合适的接口作为串口输出了,调试有点困难,想了个办法把lwip的UDP重定向到fputc函数 代码参考:https://www.cnblogs.com/54zorb/p/9609021.html UDP相关代码 /********************************* UDP测试 ************************************/ /*…

大模型论文精选|| 多 LLM 文本摘要:创新方法与卓越成果

多LLM文本摘要:创新方法与卓越成果 论文 https://arxiv.org/abs/2412.1多LLM文本摘要:创新方法与卓越成果论文 https://arxiv.org/abs/2412.15487 Multi-LLM Text Summarization 2412.15487 多LLM摘要框架在每一轮对话中有两个至关重要的步骤:生成和评估。根据使用的是多LLM…

国产化板卡设计原理图:2018-基于双FT-M6678 DSP的3U VPX的信号处理平台

基于双FT-M6678 DSP的3U VPX的信号处理平台一、板卡概述该板卡是由我公司自主研发的基于3U VPX架构的信号处理板,该处理板包含2片 FT-M6678 DSP芯片,1片 Spartan-3系列XC3S200AN配置芯片,两片DSP分别有1路RapidIO x4连接至VPX背板,两片DSP之间通过Hyperlink x4和SGMII互联。…

国产化板卡设计原理图:2288-基于FMC接口的JFM7K325T PCIeX4 3U VPX接口卡

基于FMC接口的JFM7K325T PCIeX4 3U VPX接口卡 一、板卡概述 标准VPX 3U板卡, 基于JFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows,Linux驱动。可应用于高性能计算,频域算…

vue template 转 jsx 写法及TS类型应用

vue 的响应式数据 + jsx 开发体验简直不要太好,心智负担确实小,简直完爆 react(纯属个人暴论),不足的地方就是生态了,这点确实比不过 react。 本文更侧重于 TS 类型的写法,毕竟初次接触 vue jsx 时,实在对其 TS 类型声明很不顺手。要说 vue 模板语法哪些 API 不能在 js…

团队任务分配与高效执行应该如何做?从这些方面合理调配

本文聚焦团队任务分配与高效执行,深度剖析团队协作中任务分配不合理、沟通协作障碍、目标不明确、缺乏有效监督反馈等痛难点,阐述团队协作的必要性,进而给出合理分配任务、加强沟通协作等解决方法,还推荐了相关工具,为提升团队效能提供指引 。一、团队协作的痛难点 (一)…