『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南

news2024/9/20 6:29:41


📣读完这篇文章里你能收获到:

  • 🌐 深入Apache APISIX架构: 从Nginx到OpenResty,再到etcd,一站式掌握云原生API网关的构建精髓,领略其层次化设计的魅力。

  • 🔌 核心组件全解析: 路由、上游、服务、消费者、插件…这些不再是抽象的概念,而是你API管理中的强大工具。

  • 🛠 路由配置实操: 通过Admin API,轻松创建上游、配置路由,实现请求的精准转发,让理论与实践完美结合。

  • 🌟 APISIX的独特优势: 动态路由、热插拔插件、云原生兼容性…这些特性让APISIX在API网关领域独树一帜。

  • 🔧 常用命令速查: 从启动到停止,从重启到版本检查,一系列APISIX和etcd命令,让你的运维工作更加得心应手。

请添加图片描述

文章目录

  • 一、Apisix介绍
    • 1.1 基础架构剖析
    • 1.2 关键技术要素
    • 1.3 产品优势
  • 二、路由配置(入门初体验)
    • 2.1 Admin API应用
    • 2.2 Dashboard可视化操作
  • 三、Apisix常用命令
    • 3.1 Apisix命令
    • 3.2 Apisix-Dashboard命令
    • 3.3 ETCD命令

一、Apisix介绍

Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它具有动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、限速、防御恶意攻击、身份认证、可观测性等丰富的流量管理功能。可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。

1.1 基础架构剖析

APISIX 的核心架构采用层次化设计

  1. Nginx:底层依赖 Nginx 提供高效的网络通信和数据传输;
  2. OpenResty:上层则通过 OpenResty 封装的 Lua 环境,实现灵活的逻辑控制和业务扩展。
  3. etcd:在配置管理方面,APISIX 利用 etcd 作为分布式键值存储系统,使得所有节点上的配置能够实时同步并动态更新,从而确保整个服务集群具备高度的弹性和一致性。
  4. 插件系统:APISIX 提供了一个强大的插件生态系统,这些插件可自由组合以满足不同场景下的功能需求,如身份验证(Key Auth、JWT、Basic Auth)、限流限速、熔断、灰度发布、A/B 测试等。

企业微信截图_17103154314004.png

1.2 关键技术要素

接下来我们来了解下 APISIX 的一些功能。在了解之前我们需要对 APISIX 的几个主要概念和组件简单了解下:

  • **路由(Routes):**定义了如何将不同的请求映射到指定的上游服务,可以根据请求的方法、路径、头部、查询参数等进行精确匹配。
  • **上游(Upstream):**代表一组后端服务实例,用于负载均衡,可以通过多种负载均衡策略(如轮询、权重、一致性哈希等)分配请求。
  • 服务(Service): 是一组提供相同功能的后端服务器实例的集合,通常对应着微服务架构中的一个具体服务。它通常与上游服务抽象是一一对应的,Route 与 Service 之间,通常是 N:1 的关系。
  • **消费者(Consumer):**需要与用户认证配合才可以使用。消费者在访问服务时,API 网关可以根据预先设定的规则对消费者的请求进行验证和过滤。。当不同的消费者请求同一个 API 时,APISIX 会根据当前请求的用户信息,对应不同的 Plugin 或 Upstream 配置。
    • 如果 Route、Service、Consumer 和 Plugin Config 都绑定了相同的插件,只有消费者的插件配置会生效。
    • 插件配置的优先级由高到低的顺序是:Consumer > Route > Plugin Config > Service。
  • **插件:**插件是 APISIX 的核心功能单元,每个插件可以实现特定的功能,如认证、限流、缓存、日志记录等。
  • **Admin API:**APISIX 提供了强大的 Admin API 和 Dashboard 供用户使用,Admin API 是一组用于配置 Apache APISIX 路由、上游、服务、SSL 证书等功能的 RESTful API。可以通过 Admin API 来获取、创建、更新以及删除资源。同时得益于 APISIX 的热加载能力,资源配置完成后 APISIX 将会自动更新配置,无需重启服务。

1.3 产品优势

APISIX 基于 Nginx 和 etcd,与传统 API 网关相比,APISIX 具有动态路由和热加载插件功能,避免了配置之后的 reload 操作,同时 APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的协议。而且有 Dashboard提供强大而灵活的界面。同样也提供了丰富的插件支持功能,而且还可以让用户自定义插件。
主要具有以下几个优势:

  • 高性能:得益于 Nginx 的高性能内核和 LuaJIT 的快速脚本执行,APISIX 即使在大规模并发环境下也能保持优异的性能指标,低延迟、高吞吐量,即便启用大量插件也无损其响应速度。
  • **云原生兼容性:**APISIX 无缝集成于 Kubernetes 等容器编排平台,支持服务发现、自动注入标签等云原生特性。
  • 全动态能力:APISIX 支持实时从 etcd 获取最新配置,并立即生效。
  • 热插拔插件:无需停服即可添加、移除或修改插件配置,增强服务运维灵活性。
  • 易用性:APISIX 支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard,运维人员可以通过友好且直观的 UI 配置 APISIX。
  • 多语言插件支持:APISIX 支持多种开发语言进行插件开发,开发人员可以选择擅长语言的 SDK 开发自定义插件。

二、路由配置(入门初体验)

2.1 Admin API应用

下文中的的 X-API-KEY 的值在 APISIX 的配置文件中 apisix_config.yaml 中有配置,位于 deployment.admin.admin_key 下面。
image.png
Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。
目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

  1. 创建一个_upstream_指向 httpbin.org
curl http://127.0.0.1:9180/apisix/admin/upstreams  \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "id":"upstream-demo1-id",
    "name": "upstream-demo1",	
    "type":"roundrobin",					
    "nodes": [										
      {
        "host": "httpbin.org",
        "port": 80,
        "weight": 1
      }
    ]
}'

image.png

  1. 创建一个路由routes,绑定以上创建的upstream
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
  "id":"routes-demo1-id",
  "name": "routes-demo1",			
  "methods": ["GET","POST"],	
  "uris": ["/ip","/get"] ,		
  "upstream_id": "upstream-demo1-id"			
}' 

image.png

  1. 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip

image.png

2.2 Dashboard可视化操作

Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。
目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

  1. 创建一个_upstream_指向 httpbin.org
  • 点击上游->创建->填写目标节点信息->下一步->提交

image.png
image.png

  1. 创建一个路由routes,绑定以上创建的upstream
  • 点击路由->创建->填写匹配路径->填写HTTP匹配方法->下一步->选择上游服务->下一步->提交

image.png
image.png
image.png

  1. 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip

image.png

三、Apisix常用命令

3.1 Apisix命令

  1. 启动apisix服务
apisix start
  1. 停止apisix服务
apisix stop
  1. 优雅地停止apisix服务
apisix quit
  1. 重启apisix服务
apisix restart
  1. 重新加载apisix服务
apisix reload
  1. 初始化本地nginx.conf
apisix init
  1. 初始化etcd的数据
apisix init_etcd
  1. 测试生成的nginx.conf
apisix test
  1. 显示apisix的版本信息
apisix version
  1. 显示apisix帮助信息
apisix help

3.2 Apisix-Dashboard命令

  1. 启动apisix-dashboard服务
systemctl start apisix-dashboard
  1. 停止apisix-dashboard服务
systemctl stop apisix-dashboard
  1. 重启apisix-dashboard服务
systemctl restart apisix-dashboard

3.3 ETCD命令

  1. 启动etcd
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &
  1. 停止etcd
# 查找etcd进程的PID
ps aux | grep etcd

# 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345
  1. 重启etcd : 先停止再启动
# 1. 查找etcd进程的PID
ps aux | grep etcd

# 2. 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345

# 3. 启动
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &

# 4. 重新加载apisix
sudo apisix reload

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

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

相关文章

深入了解 Linux 中的 MTD 设备:/dev/mtd* 与 /dev/mtdblock*

目录 前言一、什么是MTD子系统?二、 /dev/mtd* 设备文件用途注意事项 三、/dev/mtdblock* 设备文件用途注意事项 三、这两种设备文件的关系四、关norflash的一些小知识 前言 在嵌入式Linux系统的世界里,非易失性存储技术扮演着至关重要的角色。MTD&#…

4.2 循环语句loop,等差数列求和

汇编语言 1. 循环语句loop loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两部操作 cx cx - 1;判断cx中的值,不为0则转至标号处执行程序,如果为0则向下执行 循环使用loop来实现,循环次数存…

基于深度学习的OCR,如何解决图像像素差的问题?

基于深度学习的OCR技术在处理图像像素差的问题时确实面临一定的挑战。图像像素差可能导致OCR系统无法准确识别文本,从而影响其精度和可靠性。尽管已经有一些方法如SRN-Deblur、超分SR和GAN系列被尝试用于解决这个问题,但效果并不理想。然而,这…

上位机图像处理和嵌入式模块部署(qmacvisual拟合圆和拟合椭圆)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了拟合直线,今天继续学习下拟合圆和拟合椭圆。其实除了最后一步不同,两者的逻辑是差不多的。一般都是&#xf…

矩阵螺旋输出

问题描述: 所谓螺旋矩阵,顾名思义,就是将矩阵元素以螺旋顺序输出,如图: 解决思路: 由图不难发现,整个螺旋输出过程是一个个左下右上遍历的循环,只是遍历的规模在越变越小&#xff…

2.7、创建列表(List)

概述 列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、…

分享全栈开发医疗小程序 -带源码课件(课件无解压密码),自行速度保存

课程介绍 分享全栈开发医疗小程序 -带源码课件(课件无解压密码),自行速度保存!看到好多坛友都在求SpringBoot2.X Vue UniAPP,全栈开发医疗小程序 - 带源码课件,我看了一下,要么链接过期&…

SpringBoot集成Solr全文检索

SrpingBoot 集成 Solr 实现全文检索 一、核心路线 使用 Docker 镜像部署 Solr 8.11.3 版本服务使用 ik 分词器用于处理中文分词使用 spring-boot-starter-data-solr 实现增删改查配置用户名密码认证使用 poi 和 pdfbox 组件进行文本内容读取文章最上方有源码和 ik 分词器资源…

pe启动盘破解windows密码wins电脑登录密码修改重置

目录 1.进入电脑BIOS,设置电脑第一启动项为U盘启动2.进入微pe系统3.然后点击界面最左下方的Windows图标4.点击windows密码选择对应用户名称修改; 1.进入电脑BIOS,设置电脑第一启动项为U盘启动 把u盘插到要清除密码的电脑,然后开机…

面试八股——Redis——分布式锁——Redisson

1.看门狗机制 注意看门狗机制:redisson会监听持有锁的线程,并每隔一段时间(releaseTime/3,默认releaseTime为30s),如果线程还未释放锁的话,会给锁做一次续期。 2. 主从一致性 实际开发中我们会搭建多台redis服务器&a…

【数据结构】非线性结构——二叉树

文章目录 前言1.树型结构1.1树的概念1.2树的特性1.3树的一些性质1.4树的一些表示形式1.5树的应用2.二叉树 2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储2.5 二叉树的基本操作 前言 前面我们都是学的线性结构的数据结构,接下来我们就需要来学习非…

安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法

安防监控视频平台EasyCVR具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强,支持Windows系…

密码学及其应用1 —— 密码学概述

1 密码学的基本概念 1.1 网络安全的定义 网络安全是网络领域的一个专业领域,它涵盖了在基础计算机网络基础设施中所采取的措施、网络管理员为保护网络及网络可访问资源免受未授权访问而采纳的政策,以及对其有效性(或无效性)的持续…

WSL2 设置桥接模式

文章目录 一、前言二、准备阶段三、环境配置3.1 Type-V管理器环境配置3.2 新增.wslconfig 文件 四、遇到的问题以及解决方案 一、前言 ​ 使用 wsl 的过程中,会出现 WSL 的IP地址 找不到,或者无法和计算机通讯,搞 嵌入式 的话,还…

基于nodejs+vue智能菜谱推荐系统python-flask-django-php

本文拟采用nodejs技术和express 搭建系统框架,后台使用MySQL数据库进行信息管理,设计开发的智能菜谱推荐系统。通过调研和分析,系统拥有管理员和用户两个角色,主要具备登录注册、个人信息修改、对用户管理、类型管理、菜谱信息管理…

力扣算题【第二期】

文章目录 1.反转链表1.1 算法题目1.2 算法思路1.3 代码实现 2.回文链表2.1 算法题目2.2 算法思路2.3 代码实现 1.反转链表 1.1 算法题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 1.2 算法思路 1.设置工作指针p,来遍历链表。 2.采…

常用中间件redis,kafka及其测试方法

常用消息中间件及其测试方法 一、中间件的使用场景引入中间件的目的一般有两个:1、提升性能常用的中间件:1) 高速缓存:redis2) 全文检索:ES3) 存日志:ELK架构4) 流量削峰:kafka 2、提升可用性产品架构中高可…

我在京东做数据分析,一位京东数据分析师的工作日常

有人说:“种下一棵树最好的时间是十年前,其次是现在”。任何时候,我们都应该抓住机遇,说不定就是改变你现状的一个机会。 2020年,我在疫情得到控制后,面试入职京东大数据组,截止目前&#xff0…

elasticsearch+kibana安装部分问题:

1.elasticsearch启动问题: 如果elasticsearch开启https登录则第一次启动的时候需要前台启动,前台启动的时候会自己创建相应的token等登录信息,如果是后台启动则没有这些登录信息: ./elasticsearch ━━━━━━━━━━━━━━━━━━━…

web前端之3D标签动画、指定范围的随机数、动态设置css变量、文档片段对象、反向动画

MENU 效果图htmlJavaScriptstyle 效果图 html <div class"container"></div>JavaScript // 祝词 var words [健康码常绿,股票飙红,生意兴隆,财源广进,心想事成,永远十八,身体健康,大富大贵,大吉大利,万事如意,美梦成真,吉祥如意,鸿运当头,五福临门,吉…