Apache APISIX 快速入门

文章目录

  • apisix 快速入门
    • 什么是apisix
    • 有了 NGINX 和 Kong,为什么还需要 Apache APISIX?
    • 软件架构
      • 基于 Nginx 开源版本,而 Nginx 并不支持动态配置,为什么 Apache APISIX 声称自己可以实现动态配置?
    • 安装
    • 配置 APISIX
      • 配置路由
      • 配置负载均衡
      • 密钥验证
        • Key Authentication 是什么#
      • 限速

apisix 快速入门

什么是apisix

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

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

你可以使用 APISIX 网关作为所有业务的流量入口,它提供了动态路由、动态上游、动态证书、A/B 测试、灰度发布(金丝雀发布)、蓝绿部署、限速、防攻击、收集指标、监控报警、可观测、服务治理等功能。

APISIX 和其他的 API 网关有什么不同之处?#
Apache APISIX 在以下方面有所不同:

— 它使用 etcd 来保存和同步配置,而不是使用如 PostgreSQL 或 MySQL 这类的关系数据库。etcd 中的实时事件通知系统比这些替代方案更容易扩展。这允许 APISIX 实时同步配置,使代码简洁,并避免单点故障

  • 完全动态
  • 支持热加载插件。

有了 NGINX 和 Kong,为什么还需要 Apache APISIX?

原文链接:https://xie.infoq.cn/article/04ec5ead0571ca4b4b1806ad0

总结
NGINX:虽然 NGINX 是一个稳定且广泛使用的解决方案,但其社区活跃度低、动态配置能力不足,且对 gRPC 的支持有限。
Kong:Kong 在云原生架构方面有所优势,但其控制面并不完全符合云原生标准,且对 PostgreSQL 的依赖限制了其弹性扩展能力。

活跃的开源社区:APISIX 是全球最活跃的开源 API 网关项目之一,拥有超过 200 位贡献者,社区活跃度高于 NGINX 和 Kong。这种活跃度意味着更快的更新和更丰富的功能扩展。
支持多语言:APISIX 正在逐步支持多种编程语言(如 Java、Golang、Rust 和 NodeJS),使得开发者可以使用自己熟悉的技术栈进行开发。

软件架构

官方文档:https://apisix.apache.org/zh/docs/apisix/architecture-design/apisix/
Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX + ngx_lua 的技术基础之上,充分利用了 LuaJIT 所提供的强大性能。

APISIX 在其核心中,提供了路由匹配、负载均衡、服务发现、API 管理等重要功能,以及配置管理等基础性模块。除此之外,APISIX 插件运行时也包含其中,提供原生 Lua 插件的运行框架和多语言插件的运行框架,以及实验性的 Wasm 插件运行时等。APISIX 多语言插件运行时提供多种开发语言的支持,比如 Golang、Java、Python、JS 等。

APISIX 目前也内置了各类插件,覆盖了 API 网关的各种领域,如认证鉴权、安全、可观测性、流量管理、多协议接入等。当前 APISIX 内置的插件使用原生 Lua 实现,关于各个插件的介绍与使用方式,可以查看相关插件文档。

基于 Nginx 开源版本,而 Nginx 并不支持动态配置,为什么 Apache APISIX 声称自己可以实现动态配置?

原文链接:https://apisix.apache.org/zh/blog/2021/08/25/why-apache-apisix-chose-nginx-and-lua/
Nginx 的路由需要在配置文件里面进行配置,每次更改路由,都需要 reload 之后才能生效。这是因为 Nginx 的路由分发只支持静态配置,不能动态增减路由。

为了实现路由动态配置,Apache APISIX 做了两件事:

  1. 在 Nginx 配置文件里面配置单个 server,这个 server 里面只有一个 location。我们把这个 location 作为主入口,这样所有的请求都会走到这个地方上来。
  2. 我们用 Lua 完成路由分发的工作。Apache APISIX 的路由分发模块,支持在运行时增减路由,这样就能动态配置路由了。

你可能会问,在 Lua 里面做路由分发,会比 Nginx 的实现慢吗?

就像前面提到过的一样,凡是对性能要求比较高的,我们会把核心代码用 C 改写。我们的路由分发模块就是这么干的。路由分发模块在匹配路由时,会采用一个前缀树来匹配。而这个前缀树是用 C 实现的。感兴趣的读者可以看下代码:https://github.com/api7/lua-resty-radixtree/ 。

采用 Lua 代码来做路由还有一个好处:它减低了二次开发的门槛。

如果在路由过程中需要有特殊的逻辑,用户可以实现成自定义的变量和运算符,比如通过 IP 库匹配到的地理位置来决定采用哪条路由。用户只需要写一些 Lua 代码,这要比修改 Nginx C module 的难度小多了。

在 Apache APISIX 里面,不仅仅路由是动态的,我们的 TLS 服务端证书和上游节点配置都是动态的,而且无需修改 Nginx —— 上述功能可以跑在官方的 Nginx + Lua 技术栈上。

总结: 动态性好一点,不用重reload nginx。

安装

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

这里就是以docker安装为主。

快速启动脚本需要以下条件:

已安装 Docker,用于部署 etcd 和 APISIX。
已安装 curl,用于验证 APISIX 是否安装成功。

APISIX 可以借助 quickstart 脚本快速安装并启动:

curl -sL https://run.api7.ai/apisix/quickstart | sh
该命令启动 apisix-quickstart 和 etcd 两个容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 host 网络模式,因此可以从本地直接访问。

配置 APISIX

请不要手动修改 APISIX 安装目录下的 ./conf/nginx.conf 文件。当 APISIX 启动时,会根据 config.yaml 的配置自动生成新的 nginx.conf 并自动启动服务。

通过修改本地 ./conf/config.yaml 文件,或者在启动 APISIX 时使用 -c 或 --config 添加文件路径参数 apisix start -c ,完成对 APISIX 服务本身的基本配置。默认配置不应修改,可以在 apisix/cli/config.lua 中找到。

比如指定 APISIX 默认监听端口为 8000,并且设置 etcd 地址为 http://foo:2379,其他配置保持默认。在 ./conf/config.yaml 中只需这样配置:

apisix:node_listen: 8000 # APISIX listening portdeployment:role: traditionalrole_traditional:config_provider: etcdetcd:host:- "http://foo:2379"

更新 Admin API key

deployment:admin:admin_key-name: "admin"key: newsupersecurekey  # 请修改 key 的值role: admin

建议修改 Admin API 的 key,保护 APISIX 的安全。

更新完成后,你可以使用新的 key 访问 Admin API:

curl http://127.0.0.1:9180/apisix/admin/routes?api_key=newsupersecurekey -i

配置路由

在 APISIX 中,路由配置通常是动态管理的,而不是静态写在 config.yaml 文件中。

APISIX 的路由配置是动态管理的,主要通过 API 或控制面工具(如 APISIX Dashboard)进行配置,并存储在 Etcd 中。config.yaml 文件主要用于配置 APISIX 的基本运行参数和与外部系统的集成设置。

Route 是什么#
Route(也称之为路由)是访问上游目标的路径,在 Apache APISIX 中,Route 首先通过预定的规则来匹配客户端请求,然后加载和执行相应的插件,最后将请求转发至特定的 Upstream。

在 APISIX 中,一个最简单的 Route 仅由匹配路径和 Upstream 地址两个信息组成。

Upstream 是什么#
Upstream(也称之为上游)是一组具备相同功能的节点集合,它是对虚拟主机的抽象。Upstream 可以通过预先配置的规则对多个服务节点进行负载均衡。

创建路由#
你可以创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

通过下面的命令,你将创建一个路由,把请求http://127.0.0.1:9080/ip 转发至 httpbin.org/ip:

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{"id": "getting-started-ip","uri": "/ip","upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}}
}'

如果配置成功,将会返回 HTTP/1.1 201 Created。

验证#

curl "http://127.0.0.1:9080/ip"

你将会得到类似下面的返回:

{"origin": "183.94.122.205"
}

配置负载均衡

创建一个具有两个上游服务的路由,访问 /headers 将被转发到 httpbin.org 和 mock.api7.ai 这两个上游服务,并且会返回请求头。

创建一个具有两个上游服务的路由,访问 /headers 将被转发到 httpbin.org 和 mock.api7.ai 这两个上游服务,并且会返回请求头。

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{"id": "getting-started-headers","uri": "/headers","upstream" : {"type": "roundrobin","nodes": {"httpbin.org:443": 1,"mock.api7.ai:443": 1},"pass_host": "node","scheme": "https"}
}'

如果路由创建成功,你将会收到返回 HTTP/1.1 201 Created。

info
将 pass_host 字段设置为 node,将传递请求头给上游。
将 scheme 字段设置为 https,向上游发送请求时将启用 TLS。

密钥验证

APISIX 拥有灵活的插件扩展系统,目前有很多可用于用户身份验证和授权的插件。例如:

  • Key Authentication
  • Basic Authentication
  • JSON Web Token (JWT) Authentication
  • Keycloak
  • Casdoor
  • Wolf RBAC
  • OpenID Connect
  • Central Authentication Service (CAS)
  • HMAC
  • Casbin
  • LDAP
  • Open Policy Agent (OPA)
  • Forward Authentication
  • Multiple Authentications

本教程中,你将创建一个带有 Key Authentication 插件的 消费者,并学习如何启用和停用身份验证插件。

Consumer 是什么#
Consumer(也称之为消费者)是指使用 API 的应用或开发人员。

在 APISIX 中,消费者需要一个全局唯一的 名称,并从上面的列表中选择一个身份验证 插件。

Key Authentication 是什么#

**Key Authentication(也称之为密钥验证)**是一个相对比较简单但是应用广泛的身份验证方法,它的设计思路如下:

管理员为路由添加一个身份验证密钥(API 密钥)。
API 消费者在发送请求时,在查询字符串或者请求头中添加密钥。

创建消费者#
创建一个名为 tom 的消费者,并启用 key-auth 插件,密钥设置为 secret-key。所有携带密钥 secret-key 的请求都会被识别为消费者 tom

caution
生产环境请使用复杂的密钥。

curl -i "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT -d '
{"username": "tom","plugins": {"key-auth": {"key": "secret-key"}}
}'

如果消费者创建成功,你将得到返回 HTTP/1.1 201 Created。

启用 Authentication#
在教程配置路由中,我们已经创建了路由 getting-started-ip,我们通过 PATCH 方法为该路由增加 key-auth 插件:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"key-auth": {}}
}'

如果增加插件成功,你将得到返回 HTTP/1.1 201 Created。

禁用 Authentication#
将参数设置 _meta.disable 为 true,即可禁用密钥验证插件。

curl "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"key-auth": {"_meta": {"disable": true}}}
}'

限速

APISIX 是一个统一的控制中心,它管理 API 和微服务的进出流量。除了客户端发来的合理的请求,还可能存在网络爬虫产生的不必要的流量,此外,网络攻击(比如 DDos)也可能产生非法请求。

APISIX 提供限速功能,通过限制在规定时间内发送到上游服务的请求数量来保护 APIs 和微服务。请求的计数在内存中完成,具有低延迟和高性能的特点。

在教程配置路由中,我们已经创建了路由 getting-started-ip,我们通过 PATCH 方法为该路由增加 limit-count 插件:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"limit-count": {"count": 2,"time_window": 10,"rejected_code": 503}}
}'

上述配置将传入流量的速率限制为每 10 秒最多 2 个请求。

禁用 Rate Limiting#
将参数设置 _meta.disable 为 true,即可禁用限速插件。

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"limit-count": {"_meta": {"disable": true}}}
}'

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

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

相关文章

2025嵌入式高频面试题解析

一、概述 到了年初,是求职者最活跃的时间。本文梳理了嵌入式高频面试题,帮助求职者更好地准备面试,同时也为技术爱好者提供深入学习嵌入式知识的参考。 二、C 语言基础 2.1 指针与数组 问题 1:指针和数组的区别是什么&#xf…

1.攻防世界 baby_web

题目描述这里有提示,初始页面 进入题目页面如下 很简洁的页面只有一行HELLO WORLD ctrlu查看了源码也没有信息 用burp suite抓包,并发送到重放器 根据提示(初始页面)修改访问index.php文件 index.php index.php 是一种常见的…

什么是三层交换技术?与二层有什么区别?

什么是三层交换技术?让你的网络飞起来! 一. 什么是三层交换技术?二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 大家好…

【机器学习】数据预处理之数据归一化

数据预处理之数据归一化 一、摘要二、数据归一化概念三、数据归一化实现方法3.1 最值归一化方法3.2 均值方差归一化方法 一、摘要 本文主要讲述了数据归一化(Feature Scaling)的重要性及其方法。首先通过肿瘤大小和发现时间的例子,说明了不同…

【AIGC】语言模型的发展历程:从统计方法到大规模预训练模型的演化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯语言模型的发展历程:从统计方法到大规模预训练模型的演化1 统计语言模型(Statistical Language Model, SLM):统…

高效知识管理与分类优化指南:从目录设计到实践应用

摘要 本文旨在帮助读者在信息爆炸时代构建高效的知识管理体系,提供了知识收藏目录、浏览器书签和电脑文件夹的优化分类方案。知识收藏目录方案包括工作与项目、记录与日常、知识管理等八大类,具有边界清晰、扩展灵活、贴合实际场景等优势。浏览器书签分类…

OpenAI 实战进阶教程 - 第十二节 : 多模态任务开发(文本、图像、音频)

适用读者与目标 适用读者:已经熟悉基础的 OpenAI API 调用方式,对文本生成或数据处理有一定经验的计算机从业人员。目标:在本节中,你将学会如何使用 OpenAI 提供的多模态接口(图像生成、语音转录等)开发更…

Java面试题2025-JVM

JVM 1.为什么需要JVM,不要JVM可以吗? 1.JVM可以帮助我们屏蔽底层的操作系统 一次编译,到处运行 2.JVM可以运行Class文件 2.JDK,JRE以及JVM的关系 3.我们的编译器到底干了什么事? 仅仅是将我们的 .java 文件转换成了…

Deepseek的MLA技术原理介绍

DeepSeek的MLA(Multi-head Latent Attention)技术是一种创新的注意力机制,旨在优化Transformer模型的计算效率和内存使用,同时保持模型性能。以下是MLA技术的详细原理和特点: 1. 核心思想 MLA技术通过低秩联合压缩技术,将多个注意力头的键(Key)和值(Value)映射到一…

QML初识

目录 一、关于QML 二、布局定位和锚点 1.布局定位 2.锚点详解 三、数据绑定 1.基本概念 2.绑定方法 3.数据模型绑定 四、附加属性及信号 1.附加属性 2.信号 一、关于QML QML是Qt框架中的一种声明式编程语言,用于描述用户界面的外观和行为;Qu…

java项目之美妆产品进销存管理系统的设计与开发源码(ssm+mysql)

项目简介 美妆产品进销存管理系统的设计与开发实现了以下功能: 美妆产品进销存管理系统的设计与开发的主要使用者分为管理员登录后修改个人的密码。产品分类管理中,对公司内的所有产品分类进行录入,也可以对产品分类进行修改和删除。产品管…

Python(pymysql包)操作MySQL【增删改查】

下载pymysql: pip install pymysql 在MySQL中创建数据库:unicom create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;use unicom; 在unicom中创建数据表:admin create table admin(id int not null primary key auto_i…

日志2025.2.9

日志2025.2.9 1.增加了敌人挥砍类型 2.增加了敌人的死亡状态 在敌人身上添加Ragdoll,死后激活布偶模式 public class EnemyRagdoll : MonoBehaviour { private Rigidbody[] rigidbodies; private Collider[] colliders; private void Awake() { rigidbodi…

HTTP无状态的概念以及对后端服务的设计会产生的影响

HTTP无状态(Statelessness) 是指每个HTTP请求都是独立的,服务器不会记住或依赖于前一个请求的任何信息。每次请求的处理都与其他请求没有直接关系。也就是说,服务器在处理请求时,不会存储关于客户端状态的信息。 一、HTTP无状态的具体含义 ①每个请求独立:每个请求包含了…

操作系统—进程与线程

补充知识 PSW程序状态字寄存器PC程序计数器:存放下一条指令的地址IR指令寄存器:存放当前正在执行的指令通用寄存器:存放其他一些必要信息 进程 进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位…

python:面向对象案例烤鸡翅

自助烤鸡翅的需求: 1.烤鸡翅的时间和对应的状态: 0-4min :生的 4-7min:半生不熟 7-12min:熟了 12min以上:烤糊了 2.添加调料: 客户根据自己的需求添加 定义烤鸡翅的类、属性和方法,显示对象的信息 …

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.上传头像 -持久…

Windows下ollama详细安装指南

文章目录 1、Windows下ollama详细安装指南1.1、ollama介绍1.2、系统要求1.3、下载安装程序1.4、安装步骤1.5、验证安装1.6、环境变量配置1.7、模型选择与安装【deepseek 示例】1.7.1、拉取并运行模型1.7.2、进阶使用技巧 1、Windows下ollama详细安装指南 1.1、ollama介绍 olla…

10vue3实战-----实现登录的基本功能

10vue3实战-----实现登录的基本功能 1.基本页面的搭建2.账号登录的验证规则配置3.点击登录按钮4.表单的校验5.账号的登录逻辑和登录状态保存6.定义IAccount对象类型 1.基本页面的搭建 大概需要搭建成这样子的页面: 具体的搭建界面就不多讲。各个项目都有自己的登录界面&#…

RestTemplate Https 证书访问错误

错误信息 resttemplate I/O error on GET request for “https://21.24.6.6:9443/authn-api/v5/oauth/token”: java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.c…