云原生下最火的API网关-APISIX

news2024/12/23 9:05:55

文章目录

      • 一、APISIX是什么?
      • 二、APISIX有哪些功能?
      • 三、APISIX对比Spring Cloud Gateway、Zuul等其他网关有哪些优势?
      • 四、从0到1部署APIXSIX
        • 步骤1:准备环境
        • 步骤2:安装依赖
        • 步骤3:安装APISIX
        • 步骤4:配置APISIX
        • 步骤5:启动APISIX
      • 五、APISIX的使用介绍

公众号:MCNU云原生,欢迎微信搜索关注,更多干货,及时掌握。

一、APISIX是什么?

APISIX是一款基于Nginx和OpenResty的云原生API网关,由Apache APISIX社区维护。它提供了一个可扩展的、低延迟、高性能的API网关解决方案,支持常见的API管理功能,如流量控制、认证、转发、限速、缓存、日志等,并提供了灵活的插件机制,可支持自定义插件的开发和集成。
在这里插入图片描述

二、APISIX有哪些功能?

APISIX提供了丰富的功能,包括但不限于以下几点:

  • 流量控制:支持根据IP、API、用户等维度进行流量控制,以避免系统崩溃或被恶意攻击。
  • 认证授权:支持OAuth2、JWT等认证方式,并可通过自定义插件实现其他认证方式,以保证API的安全性。
  • 转发代理:支持HTTP、HTTPS、WebSocket等协议的转发代理,可实现多种后端服务的接入和负载均衡。
  • 限速策略:支持针对用户、API、IP等多种维度的限速策略,以避免恶意用户或程序对API的过度消耗。
  • 缓存加速:支持缓存API响应结果,以降低后端服务的负载和提升API的响应速度。
  • 日志记录:支持实时记录API访问日志,并提供了可视化的日志查询和分析工具,以方便用户进行监控和问题排查。

除此之外,APISIX还提供了多种插件,包括熔断、重试、跨域、IP黑白名单等常用插件,以及自定义插件的开发和集成。

三、APISIX对比Spring Cloud Gateway、Zuul等其他网关有哪些优势?

相较于其他常见的API网关,APISIX具有以下优势:

  • 性能更高:APISIX采用了基于OpenResty的架构,以及高效的Nginx引擎,能够处理更高的并发请求,响应更快的API。
  • 扩展性更好:APISIX提供了可编程的插件机制,以及动态配置管理功能,可以根据实际需要灵活扩展和管理API网关。
  • 开源社区更活跃:APISIX由Apache APISIX社区维护,有着广泛的用户和贡献者社区,提供了更加完善的文档和支持。
  • 部署更简单:APISIX提供了Docker镜像、Kubernetes Helm Chart等多种部署方式,可以快速部署APISIX。

四、从0到1部署APIXSIX

下面简单介绍一下如何从0到1部署APISIX。

步骤1:准备环境

APISIX运行在Linux系统上,所以需要准备一台Linux主机作为APISIX的运行环境。推荐使用CentOS、Ubuntu等主流Linux发行版。

步骤2:安装依赖

APISIX依赖OpenResty和Nginx,需要先安装这些软件。可以使用包管理器或者源码编译的方式进行安装。

步骤3:安装APISIX

APISIX提供了多种安装方式,包括二进制安装、Docker镜像、Kubernetes Helm Chart等。可以根据实际需要选择相应的安装方式。

例如,使用Docker镜像安装APISIX可以执行以下命令:

docker run -d --name apisix \
    -v /usr/local/apisix/conf:/usr/local/apisix/conf \
    -v /usr/local/apisix/logs:/usr/local/apisix/logs \
    -p 9080:9080 -p 9443:9443 \
    apache/apisix:2.10-alpine

这个命令会从Docker Hub上拉取APISIX的镜像并运行,同时将本地的配置文件和日志文件挂载到容器内部。

步骤4:配置APISIX

APISIX的配置文件为YAML格式,可以通过修改配置文件来配置API网关。配置文件的路径在安装时指定,也可以使用默认路径。

例如,在/usr/local/apisix/conf/config.yaml中添加一个API的配置:

apisix:
  upstream:
    backend1:
      nodes:
        - host: backend1.example.com
          port: 80

  route:
    - name: api1
      uris: ['/api/v1']
      methods: ['GET']
      plugins:
        - name: prometheus
        - name: limit-count
          config:
            count: 1000
            time_window: 60
        - name: proxy-cache
          config:
            cache_key: "$remote_addr|$request_uri|$request_method"
            cache_ttl: 60
      upstream: backend1

这个配置定义了一个API路由,当访问/api/v1时会转发到backend1.example.com:80的后端服务,并进行流量控制和缓存加速。

步骤5:启动APISIX

启动APISIX可以执行以下命令:

/usr/local/apisix/bin/apisix start

这个命令会启动APISIX并加载配置文件,开始监听API请求。

五、APISIX的使用介绍

APISIX的使用可以分为以下几个方面:

  • 配置API路由:使用YAML配置文件定义API的路由和插件信息。

  • 管理插件:使用APISIX提供的插件或自定义插件,实现API的各种功能,如流量控制、认证、转发等。

  • 监控日志:使用APISIX提供的日志监控功能,查看API的请求和响应信息,了解API的使用情况和性能指标。

  • 安全防护:APISIX提供多种安全防护机制,如IP黑名单、请求限速、SSL/TLS加密等,保障API的安全性。

  • 集成服务发现:APISIX支持与Consul、ETCD等服务发现工具集成,实现动态路由和负载均衡。

  • 自定义插件:APISIX提供了灵活的插件机制,可以自定义插件实现特定的API功能。

以下是APISIX的一些使用示例:

  • 配置API路由

在APISIX的配置文件中定义一个API的路由,可以使用YAML格式,例如:

apisix:
  upstream:
    backend1:
      nodes:
        - host: backend1.example.com
          port: 80

  route:
    - name: api1
      uris: ['/api/v1']
      methods: ['GET']
      plugins:
        - name: prometheus
        - name: limit-count
          config:
            count: 1000
            time_window: 60
        - name: proxy-cache
          config:
            cache_key: "$remote_addr|$request_uri|$request_method"
            cache_ttl: 60
      upstream: backend1

这个配置定义了一个API路由,当访问/api/v1时会转发到backend1.example.com:80的后端服务,并进行流量控制和缓存加速。

  • 管理插件

APISIX提供了多种插件,如限流、负载均衡、重定向、安全认证等,可以根据实际需要选择并配置相应的插件。

例如,为API添加JWT认证插件,可以在配置文件中添加如下代码:

apisix:
  plugin:
    jwt-auth:
      enable: true
      config:
        secret: "my_secret"
        header_name: "Authorization"

这个配置定义了一个JWT认证插件,当API请求到达时,APISIX会对请求头中的Authorization字段进行JWT验证。

  • 监控日志

APISIX提供了多种监控日志工具,如Prometheus、Elasticsearch等,可以将API的请求和响应信息记录下来,方便用户进行统计和分析。

例如,使用Prometheus进行API性能监控,可以在配置文件中添加如下代码:

apisix:
  plugin:
    prometheus:
      enable: true
      listen: 127.0.0.1:9090

这个配置定义了一个Prometheus插件,当API请求到达时,APISIX会将请求和响应信息发送到Prometheus,用户可以使用Prometheus的Dashboard进行查看和分析。

  • 安全防护

APISIX提供多种安全防护机制,如IP黑名单、请求限速、SSL/TLS加密等,保障API的安全性。

例如,为API添加IP黑名单,可以在配置文件中添加如下代码:

yamlCopy codeapisix:
  plugin:
    ip-restriction:
      enable: true
      config:
        reject_ips: ["192.168.1.1", "192.168.1.2"]

这个配置定义了一个IP黑名单插件,当API请求到达时,APISIX会检查请求的IP地址是否在黑名单中,如果在则直接拒绝访问。

  • 自定义插件

APISIX提供了灵活的插件机制,用户可以根据实际需要开发自定义插件,实现特定的API功能。

例如,开发一个自定义插件,实现API请求时返回一个特定的HTTP头信息,可以编写如下代码:

luaCopy codefunction plugin:new()
    local plugin = {
        name = "my-plugin",
        fields = {
            header_name = {type = "string", default = "X-My-Header"}
        }
    }
    return setmetatable(plugin, {__index = self})
end

function plugin:access(conf, request)
    ngx.header[conf.header_name] = "my-header-value"
end

return plugin

这个插件实现了在API请求时添加一个名为X-My-Header的HTTP头信息,并设置为my-header-value。

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

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

相关文章

成都待慕电商:抖音虚假宣传虚构被比较价格违规细则

为了保护抖音消费者权益,规范创作者商品分享推广秩序,抖音平台制定《「虚假宣传-虚构被比较价格」违规细则》。 来看详细内容:一、什么是“被比较价格”?被比较价格:指创作者通过价格比较的方式宣传商品价格优惠时&…

opencv:运用cv2给视频加水印

前一段时间学了一下计算机视觉的相关知识,今天想了想,觉得可以利用cv2这个模块给视频加上水印,这样从一些方面也可以表明这个视频的原创。 1. 实现原理 小编的实现原理就是使用cv2模块读取视频文件,然后获取到每一张图片,在图片上的相应位置写上相应的字符串(小编最初打算…

MR虚拟直播是什么?

阿酷tony / 2023-3-3 / 长沙MR虚拟直播是通过机器人、虚拟人物、虚拟舞台或虚拟现实技术,将主播和场景实时转化的互动直播方式。MR技术(混合现实技术)结合大数据、人工智能等技术,可以在虚拟直播中实现更多的自由度和互动性&#…

认识BUG

如何描述 bug一个合格的 bug 描述应该包括以下几个部分:发现问题的版本开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障,并且版本的标识也有利于统计和分析每个版本的质量。问题出现的环境环境分为硬件环境和软件环境&am…

GUI 之 Tkinter编程

GUI 图形界面,Tkinter 是 Python 内置的 GUI 库,IDLE 就是 Tkinter 设计的。 1. Tkinter 之初体验 import tkinter as tkroot tk.Tk() # 创建一个窗口root.title(窗口标题)# 添加 label 组件 theLabel tk.Label(root, text文本内容) theLabel.p…

学习使用Android开发者者文档

Android Lint 错误信息中可看到不兼容代码所属的API级别。也可以在ANdroid开发者文档中查看各API级别特有的类和函数。 越早熟悉使用开发者文档越有利于开发,当然我们不可能记住所有的Android SDK中海量信息,因此学会查阅SDK文档,不断学习新的…

ContextLoaderListener监听器和SSM整合

ContextLoaderListener监听器Spring提供了监听器ContextLoaderListener,实现ServletContextListener接口,可监听ServletContext的状态,在web服务器的启动,读取Spring的配置文件,创建Spring的IOC容器。web应用中必须在w…

关于linux采用桥连接网络模式

关于linux(centos)采用桥连接网络模式 下载安装VmWare,并创建centos虚拟机 找到自己的虚拟机,点击编辑虚拟机设置-网络适配器-桥接模式 点击编辑-虚拟网络编辑器 点击更改设置-自动桥接 进入系统-修改网络配置文件 #进入到…

一个使用 react+vite3+ts+react-router-dom6v Hooks Admin搭建的轻量级后台管理模板。

react18-vite3-ts-antd4react-router-dom6v 前言 之所以搭这个模板,对于工作上业务需求老是变来变去,就觉得很烦,干脆搭了个admin模板,这样自己熟悉,好根据业务的需求进行一个修改。很多人会说后端管理系统模板都差不…

一文看懂REE OS、TEE OS、CA以及TA概念、架构、流程

目录 一、概念 二、使能方式 三、TEE软件框架 四、TEE软件流程 一、概念 REE(Rich Execution Environment):比如Android系统,是一个开放的环境,容易收到恶意软件的攻击,比如敏感数据被窃取、数字版权被…

Mask R-cnn 代码运行报错总结

Mask R-cnn 代码运行报错总结环境版本1. 数据集下载与参数配置2. 运行报错开始报错1报错2报错3报错4报错5报错6参考文章 文章1文章2 环境版本 TensorFlow 2.1.0Python 3.7keras 2.3.1 1. 数据集下载与参数配置 下载链接 https://github.com/matterport/Mask_RCNN/releases …

MySQL存储引擎详解及对比和选择

什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善…

Java关键字、标识符、变量数据类型

文章目录关键字标识符标识符的命名规则标识符的命名规范变量变量的数据类型整数类型浮点类型浮点型精度字符类型布尔类型关键字 定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(或单词)HelloWorld 案例 中,出现…

7年测试工程师,裸辞掉17K的工作,想跳槽找更好的,还是太高估自己了....

14年大学毕业后,在老师和朋友的推荐下,进了软件测试行业,这一干就是7年时间,当时大学本来就是计算机专业,虽然专业学的一塌糊涂,但是当年的软件测试属于新兴行业,人才缺口比较大,而且…

南卡Neo骨传导运动耳机正式发布,打造音质最强款骨传导耳机

最近中国专业骨传导领先品牌NANK南卡发布全新Neo系列骨传导运动耳机,全新来袭的南卡Neo骨传导运动耳机主打音质使用体验,耳机配置上做到更为强劲升级优化,支持一体化机身,首发无线充设计,IPX6等级防水,升级…

Android---进程间通信机制2

Service Manager(SM):大管家。管理系统服务的 Ibinder。 1 如何启动 service_manager 服务 SM注册: 1 binder_open(): 打开驱动(设置大小128K),内存映射 2 binder_become_context_manager(): 设置 SM 为大管家 --- sm 作用:为…

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度,这是一个很好的选择,因为它比mysql-connector-python快。PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…

【存储】存储特性

存储特性精简配置技术(SmartThin)SmartThin主要功能容量虚拟化存储空间写时分配:Capacity-on-Write读写重定向:Direct-on-Time应用场景及配置流程存储分层技术(SmartTier)存储分层工作原理关键技术容量初始…

智能电子标签——商超版价签

2.1英寸TFT黑白电子价签 ★ 快速变价,高效运营 ★ 市场实用,布局物联网未来 ★ 更好客户体验 ★ 降低系统成本,具备竞争力 ★ 2.1英寸黑白红电子价签 ★ 电池低能耗,常规使用三年 ★ 穿透力强不慣障碍 ★ 2.4G载波&#x…

position:sticky 粘性定位

1、什么是粘性定位? 粘性定位它基于用户的滚动位置来定位。 粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。 它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position…