当前位置: 首页 > news >正文

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目,由API7.ai开发并捐赠。它是一个高性能的云原生API网关,具有动态、实时等特点。

APISIX网关可作为所有业务的流量入口,为用户提供了丰富的功能,包括动态路由、动态上游、动态证书、A/B测试、灰度发布(金丝雀发布)、蓝绿部署、限速、防攻击、指标收集、监控报警、可观测性和服务治理等。基于Nginx和OpenResty构建的APISIX,通过Lua语言扩展了其功能,具有高性能和低延迟的特点,是构建现代微服务架构的理想选择。

接下来本文将介绍如何安装并运行APISIX!

APISIX基础概念

上游(Upstream)

上游是指应用层服务或节点的抽象。它的作用是对服务节点进行负载均衡,以确保请求能够被有效地处理。在APISIX中,上游的地址信息可以直接配置到路由或服务上。通过创建上游对象,可以在多个路由或服务中共享相同的上游配置,从而简化管理和维护。

路由(Route)

路由是APISIX中最核心的资源对象之一。它定义了请求的匹配规则,并根据匹配结果执行相应的操作。路由通常包含以下三个重要部分:

  • 匹配规则:用于确定请求是否与路由匹配。
  • 插件配置:用于在请求生命周期中执行特定的逻辑操作。
  • 上游信息:指定请求应该被转发到哪个上游服务。

通过路由的配置,可以实现诸如路由转发、请求过滤、流量控制等功能。

服务(Service)

服务是某类API的抽象,通常与上游服务一一对应。它定义了API的基本信息,包括访问路径、后端服务地址等。路由与服务之间的关系通常是N:1的,即多个路由可以引用同一个服务。

消费者(Consumer)

消费者是指使用API服务的客户端。消费者需要进行认证并获得访问权限,才能够使用API提供的服务。在APISIX中,消费者可以与插件或上游服务进行绑定,从而实现个性化的访问控制和流量管理。

插件(Plugin)

插件是扩展APISIX应用层能力的重要机制。它们在请求或响应的生命周期中执行特定的逻辑操作,以实现诸如请求转发、请求修改、流量控制等功能。插件可以与路由、服务或消费者进行绑定,以实现个性化的功能定制和流量处理。

Admin API

APISIX 提供了 Admin API 和直观的 Dashboard,这些工具使得配置 Apache APISIX 路由、上游、服务、SSL 证书等功能变得简单而直观。

通过 Admin API,用户可以轻松地获取、创建、更新和删除资源。APISIX 具有热加载能力,这意味着在资源配置完成后,APISIX 会自动更新配置,无需重新启动服务。Dashboard 则提供了可视化界面,用户可以直观地管理和监控 APISIX 的各项功能。

Admin API 和 Dashboard 的使用使得对 API 网关的管理变得高效且易于维护。通过这些工具,用户可以根据需要动态地调整和优化 API 网关的配置,从而满足不同的业务需求。

APISIX的架构设计如下所示:

APISIX 架构图

其中,APISIX 核心包括路由匹配、负载均衡、服务发现、API 管理等重要功能,以及配置管理等基础模块。同时,APISIX 还提供了丰富的内置插件,涵盖了可观测性、安全、流量控制等方面。

Admin API 和 Dashboard 为用户提供了一种简单而强大的方式,使得用户可以轻松地管理和配置他们的 API 网关,从而更好地满足业务需求。

安装APISIX

本文中提供的安装方法适用于 CentOS 7 和 CentOS 8。如果你选择该方法安装 APISIX,需要先安装 etcd。

安装etcd

APISIX 使用 etcd 作为配置中心进行保存和同步配置。在安装 APISIX 之前,需要在你的主机上安装 etcd。

如果你在安装 APISIX 时选择了 Docker 或 Helm 安装,那么 etcd 将会自动安装;如果你选择其他方法或者需要手动安装 APISIX,请参考以下步骤安装 etcd。

APISIX要求ETCD版本3.5以上!

ETCD_VERSION='3.5.4'
wget https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
tar -xvf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz && \
cd etcd-v${ETCD_VERSION}-linux-amd64 && \
sudo cp -a etcd etcdctl /usr/bin/

编写systemd /etc/systemd/system/etcd.service

[Unit]
Description=etcd service
Documentation=etcd service
After=network.target[Service]
Type=simple
ExecStart=/usr/bin/etcd
Restart=on-failure
RestartSec=30s[Install]
WantedBy=multi-user.target

安装APISIX

如果当前系统没有安装 OpenResty,请使用以下命令来安装 OpenResty 和 APISIX 仓库。

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

如果已安装 OpenResty 的官方 RPM 仓库,请使用以下命令安装 APISIX 的 RPM 仓库。

yum install yum-utils -y
yum-config-manager --add-repo https://repos.apiseven.com/packages/centos/apache-apisix.repo

完成上述操作后使用以下命令安装 APISIX

yum install apisix -y

image-20240226000744246

管理 APISIX 服务

APISIX 安装完成后,你可以运行以下命令初始化 NGINX 配置文件和 etcd

apisix init

使用以下命令启动 APISIX

apisix start

建议使用systemd进行后续的管理!

使用RPM 方式安装的默认已经配置好apisix的systemd 位于r/usr/lib/systemd/system/apisix.service

# apisix systemd service
# https://github.com/api7/apisix-build-tools/blob/master/usr/lib/systemd/system/apisix.service
[Unit]
Description=apisix
#Conflicts=apisix.service
After=network-online.target
Wants=network-online.target[Service]
Type=forking
Restart=on-failure
WorkingDirectory=/usr/local/apisix
ExecStartPre=/bin/rm -f /usr/local/apisix/logs/worker_events.sock
ExecStart=/usr/bin/apisix start
ExecStop=/usr/bin/apisixstop
ExecReload=/usr/bin/apisix reload
LimitNOFILE=65536[Install]
WantedBy=multi-user.target

配置APISIX

通过修改本地的配置文件,例如 /usr/local/apisix/conf/config.yaml 文件。

或者在启动 APISIX 时使用 -c--config 添加文件路径参数 apisix start -c <path string>,完成对 APISIX 服务本身的基本配置。

举例配置

apisix:node_listen:- 9080- 80                 # API6默认HTTP监听端口,这里列出了两个,允许同时访问9080和80端口ssl:                   # 开启SSL模块,启用HTTPSenable: truelisten:- port: 443       # HTTPS默认端口- port: 9443      # 可选端口,建议删除,只保留443作为默认端口enable_ipv6: falseenable_control: true    # 开启管理端口和相关Dashboard端口control:ip: "0.0.0.0"port: 9092           # 管理端口,用于API6的管理操作和Dashboard的访问
deployment:admin:allow_admin:               # 允许admin用户执行key的网段,详见:https://nginx.org/en/docs/http/ngx_http_access_module.html#allow- 0.0.0.0/0              admin_key:- name: "admin"key: thisisakeyrole: admin                 # admin角色:管理所有配置数据- name: "viewer"key: 4054f7cf07e344346cd3f287985e76a2role: vieweretcd:                             # ETCD连接地址,如果不使用Docker部署,可修改为其他IPhost:                           # 可以定义同一个ETCD集群的多个ETCD主机地址- "http://localhost:2379"          # 这里的ETCD也可以修改为宿主机IPprefix: "/apisix"               # API6配置前缀timeout: 30                     # 超时时间30秒
plugin_attr:                        # Prometheus相关配置,此处可以保持默认,后续再添加监控prometheus:export_addr:ip: "0.0.0.0"port: 9091                   # Prometheus导出端口,用于数据采集

启动APISIX

systemctl enable --now apisix

可以通过 curl 来访问正在运行的 APISIX 实例。比如,你可以发送一个简单的 HTTP 请求来验证 APISIX 运行状态是否正常

curl "http://127.0.0.1:9080" --head | grep Server

image-20240226002004764

现在,你已经成功安装并运行了 APISIX!

部署 Dashboard

安装步骤

安装RPM包

sudo yum install -y https://github.com/apache/apisix-dashboard/releases/download/v3.0.1/apisix-dashboard-3.0.1-0.el7.x86_64.rpm

启动方式

在Shell中运行dashboard

sudo manager-api -p /usr/local/apisix/dashboard/

或者作为服务运行dashboard

systemctl start apisix-dashboard

访问Dashboard

在不修改配置的情况下,通过浏览器访问 http://127.0.0.1:9000 使用GUI界面的Dashboard。默认的用户名和密码为admin。

通过以上步骤,你已经成功安装并部署了Apache APISIX Dashboard。

参考

APISIX安装指南

APISIX官方文档

API7.ai官网

相关文章:

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目&#xff0c;由API7.ai开发并捐赠。它是一个高性能的云原生API网关&#xff0c;具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口&#xff0c;为用户提供了丰富的功能&#xff0c;包括动态路由、动态上游、动态证书、A…...

Gradio Dataframe 学习笔记

Gradio Dataframe 学习笔记 0. 简介1. 使用场景2. 测试数据3. 学习代码4. 更多功能5. 学习资源6. 总结 0. 简介 Gradio是一个用于构建交互式机器学习界面的Python库。它可以轻松创建各种类型的界面&#xff0c;包括用于数据可视化和探索的界面。 Gradio Dataframe 组件是 Gra…...

深入理解计算机系统笔记

1.1 嵌套的数组 当我们创建数组的数组时&#xff0c;数组分配和引用的一般原则也是成立的。 例如&#xff0c;声明 int A[5][3]; 等价于下面的声明 typedef int row3_t[3]; row3_t A[5] 要访问多维数组的元素&#xff0c;编译器会以数组起始为基地址&#xff0c; (可能需…...

300分钟吃透分布式缓存(拉钩教育总结)

开篇寄语 开篇寄语&#xff1a;缓存&#xff0c;你真的用对了吗&#xff1f; 你好&#xff0c;我是你的缓存老师陈波&#xff0c;可能大家对我的网名 fishermen 会更熟悉。 我是资深老码农一枚&#xff0c;经历了新浪微博从起步到当前月活数亿用户的大型互联网系统的技术演进…...

2024亚马逊全球开店注册前需要准备什么?

在2023年出海四小龙SHEIN、Temu、速卖通AliExpress、TikTok Shop快速增长扩张&#xff0c;成为了中国跨境卖家“逃离亚马逊”的新选择。但是&#xff0c;跨境电商看亚马逊。当前&#xff0c;亚马逊仍然是跨境电商行业的绝对老大&#xff0c;占有将近70%成以上的业务份额。 作为…...

android Service 与 activity 通信 并不断传数据

注&#xff1a;这只是个Demo 以下载为案例&#xff0c;实现开启下载&#xff0c;暂停下载&#xff0c;下载进度不断发送给activity class DownloadService : Service() {override fun onBind(intent: Intent?): IBinder? {return MyBinder()}inner class MyBinder : Binder…...

Acwing-基础算法课笔记之数学知识(扩展欧几里得算法)

Acwing-基础算法课笔记之数学知识&#xff08;扩展欧几里得算法&#xff09; 一、扩展欧几里得算法1、裴蜀定理2、过程模拟3、代码模板 二、线性同余方程1、定义2、模拟过程3、结论证明 一、扩展欧几里得算法 1、裴蜀定理 对于任意正整数 a a a&#xff0c; b b b&#xff0…...

简单排列组合题(python版)

文章预览&#xff1a; 题目解法一输出结果 解法二输出结果输出结果 题目 有四个数字:1,2,3,4能组成多少个互不相同且无重复的数字的三位数? 各式多少? 解法一 我们粗略看一下这个题既然我们要组成三位数&#xff0c;那我们就循环3层每一层出一个数&#xff0c;并且if语句判…...

【排坑】搭建 Karmada 环境

git clone 报错 问题&#xff1a;Failed to connect to github.com port 443:connection timed out 解决&#xff1a; git config --global --unset http.proxy【hack/local-up-karmada.sh】 1. karmada ca-certificates (no such package) 问题&#xff1a;fetching http…...

每日一类:Qt GUI开发的基石《QWidget》

深入探索QWidget&#xff1a;Qt GUI开发的基石 在Qt框架中&#xff0c;QWidget类扮演着构建图形用户界面&#xff08;GUI&#xff09;的基础角色。它不仅提供了窗口的基本功能&#xff0c;还允许开发者通过继承和定制来创建各式各样的用户界面元素。本文将详细介绍QWidget的关…...

人大金仓与mysql的差异与替换

人大金仓中不能使用~下面的符号&#xff0c;字段中使用”&#xff0c;无法识别建表语句 创建表时语句中只定义字段名.字段类型.是否是否为空 Varchar类型改为varchar&#xff08;长度 char&#xff09; Int(0) 类型为int4 定义主键&#xff1a;CONSTRAINT 键名 主键类型&#x…...

Excel2LaTeX插件的使用、LaTeX表格

目录 一、下载Excel2Latex 二、使用Excel2Latex 1、将Excel2LaTeX文件添加到加载项 2、导出LaTex的表格数据 3、注意事项 1&#xff09;生成的latex表格断断续续问题 2&#xff09;改变线形的粗细 3&#xff09;表格太大&#xff0c;需要缩小到适应大小 4&#xff09;…...

MySQL 用了哪种默认隔离级别,实现原理是什么?

MySQL 的默认隔离级别是 RR - 可重复读&#xff0c;可以通过命令来查看 MySQL 中的默认隔离级别。 RR - 可重复读是基于多版本并发控制&#xff08;Multi-Version Concurrency Control&#xff0c;MVCC &#xff09;实现的。MVCC&#xff0c;在读取数据时通过一种类似快照的方…...

【C++初阶】第四站:类和对象(下)(理解+详解)

前言&#xff1a; 本篇知识点&#xff1a;初始化列表、explicit关键字、static成员、友元、内部类、匿名对象、编译器的优化 专栏&#xff1a;C初阶 目录 再谈构造函数 1️⃣构造函数体赋值 2️⃣初始化列表 explicit关键字 static成员 1.static概念 2.static特性 面试…...

redis的基本数据类型(一)

redis的基本数据类型 1、redis1.1、数据库分类1.2、NoSQL分类1.3、redis简介1.4、redis应用1.5、如何学习redis 2、redis的安装2.1、Windows安装2.2.1、客户端redis管理工具 2.2、Linux安装&#x1f525;2.2.1、redis核心文件2.2.2、启动方式2.2.3、redis桌面客户端1、redis命令…...

Windows无法识别exFAT格式怎么办?

Windows通常无法读取Mac格式的驱动器。如果使用Apple的HFS Plus将驱动器格式化为exFAT&#xff0c;默认情况下Windows无法读取exFAT驱动器&#xff0c;即使exFAT文件系统与Mac和Windows兼容。事实上&#xff0c;一些制造商销售的“Mac驱动器”是用这种限于Mac的文件系统预先格式…...

AI大模型的发展趋势?

大模型的发展趋势主要体现在以下几个方面&#xff1a; 1、模型规模的增长&#xff1a; 随着数据量和计算能力的不断增加&#xff0c;大型模型的规模也在不断扩大。模型参数数量、层数等指标不断刷新&#xff0c;以应对更复杂的任务和更大规模的数据。 2、多模态融合&#xff…...

List去除重复数据的五种方式

1、使用 LinkedHashSet 删除 arraylist 中的重复数据 LinkedHashSet 是在一个 ArrayList 删除重复数据的最佳方法。LinkedHashSet 在内部完成两件事&#xff1a; 删除重复数据 保持添加到其中的数据的顺序 Java 示例使用 LinkedHashSet 删除 arraylist 中的重复项。在给定的示例…...

VUE3自定义文章排行榜的简单界面

文章目录 一、代码展示二、代码解读三、结果展示 一、代码展示 <template><div class"article-ranking"><div class"header"><h2 class"title">{{ title }}</h2></div><div class"ranking-list&qu…...

七通道NPN 达林顿管GC2003,专为符合标准 TTL 而制造,最高工作电压 50V,耐压 80V

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...