云原生下最火的API网关-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。

猜你喜欢

转载自blog.csdn.net/projim_tao/article/details/129327740