乐趣区

关于java:全新一代API网关带可视化管理文档贼友好

提到 API 网关,大家比拟相熟的有 Spring Cloud 体系中的 Gateway 和 Zuul,这些网关在应用的时候根本都要批改配置文件或本人开发性能。明天给大家介绍一款功能强大的 API 网关apisix,自带可视化治理性能,多达三十种插件反对,心愿对大家有所帮忙!

SpringBoot 实战电商我的项目 mall(50k+star)地址:https://github.com/macrozheng/mall

简介

apisix 是一款云原生微服务 API 网关,能够为 API 提供终极性能、安全性、开源和可扩大的平台。apisix 基于 Nginx 和 etcd 实现,与传统 API 网关相比,apisix 具备动静路由和插件热加载,特地适宜微服务零碎下的 API 治理。

外围概念

咱们先来理解下 apisix 的一些外围概念,对咱们接下来的应用会很有帮忙!

  • 上游(Upstream):能够了解为虚拟主机,对给定的多个指标服务依照配置规定进行负载平衡。
  • 路由(Route):通过定义一些规定来匹配客户端的申请,而后对匹配的申请执行配置的插件,并把申请转发给指定的上游。
  • 消费者(Consumer):作为 API 网关,有时须要晓得 API 的生产方具体是谁,通常能够用来做身份认证。
  • 服务(Service):能够了解为一组路由的形象。它通常与上游是一一对应的,路由与服务之间,通常是多对一的关系。
  • 插件(Plugin):API 网关对申请的加强操作,能够对申请减少限流、认证、黑名单等一系列性能。能够配置在消费者、服务和路由之上。

装置

因为官网提供了 Docker Compose 部署计划,只需一个脚本即可装置 apisix 的相干服务,十分不便,这里咱们也采纳这种计划来部署。

  • 首先下载 apisix-docker 我的项目,其实咱们只须要应用其中的 example 目录就行了,下载地址:https://github.com/apache/api…

  • 接下来咱们把 example 目录上传到 Linux 服务器下来,来理解下这个目录外面的货色;
drwxrwxrwx. 2 root root   25 Jun 19 10:12 apisix_conf   # apisix 配置文件目录
drwxrwxrwx. 2 root root   71 Jun 24 09:36 apisix_log    # apisix 日志文件目录
drwxrwxrwx. 2 root root   23 Jun 23 17:10 dashboard_conf  # 可视化工具 apisix-dashboard 配置文件目录
-rwxrwxrwx. 1 root root 1304 Jun 19 10:12 docker-compose-alpine.yml # docker-compose 部署脚本(alpine)版本
-rwxrwxrwx. 1 root root 1453 Jun 19 10:12 docker-compose.yml # docker-compose 部署脚本
drwxrwxrwx. 2 root root   27 Jun 19 10:12 etcd_conf # ectd 配置文件目录
drwxrwxrwx. 3 root root   31 Jun 23 17:06 etcd_data # ectd 数据目录
drwxrwxrwx. 2 root root  107 Jun 19 10:12 mkcert
drwxrwxrwx. 2 root root   40 Jun 19 10:12 upstream # 两个测试用的 Nginx 服务配置
  • docker-compose.yml 中咱们能够发现,该脚本不仅启动了 apisix、apisix-dashboard、etcd 这三个外围服务,还启动了两个测试用的 Nginx 服务;
version: "3"

services:
  # 可视化管理工具 apisix-dashboard
  apisix-dashboard:
    image: apache/apisix-dashboard:2.7
    restart: always
    volumes:
    - ./dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
    ports:
    - "9000:9000"
    networks:
      apisix:
  
  # 网关 apisix
  apisix:
    image: apache/apisix:2.6-alpine
    restart: always
    volumes:
      - ./apisix_log:/usr/local/apisix/logs
      - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
    depends_on:
      - etcd
    ##network_mode: host
    ports:
      - "9080:9080/tcp"
      - "9443:9443/tcp"
    networks:
      apisix:
  
  # apisix 配置数据存储 etcd
  etcd:
    image: bitnami/etcd:3.4.15
    user: root
    restart: always
    volumes:
      - ./etcd_data:/bitnami/etcd
    environment:
      ETCD_ENABLE_V2: "true"
      ALLOW_NONE_AUTHENTICATION: "yes"
      ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
      ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
    ports:
      - "2379:2379/tcp"
    networks:
      apisix:

  # 测试用 nginx 服务 web1,调用返回 hello web1
  web1:
    image: nginx:1.19.0-alpine
    restart: always
    volumes:
      - ./upstream/web1.conf:/etc/nginx/nginx.conf
    ports:
      - "9081:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:

  # 测试用 nginx 服务 web2,调用返回 hello web2
  web2:
    image: nginx:1.19.0-alpine
    restart: always
    volumes:
      - ./upstream/web2.conf:/etc/nginx/nginx.conf
    ports:
      - "9082:80/tcp"
    environment:
      - NGINX_PORT=80
    networks:
      apisix:

networks:
  apisix:
    driver: bridge
  • docker-compose.yml 文件所在目录下,应用如下命令能够一次性启动所有服务;
docker-compose -p apisix-docker up -d
  • 启动胜利后,应用如下命令可查看所有服务的运行状态;
docker-compose -p apisix-docker ps
              Name                            Command               State                       Ports                     
--------------------------------------------------------------------------------------------------------------------------
apisix-docker_apisix-dashboard_1   /usr/local/apisix-dashboar ...   Up      0.0.0.0:9000->9000/tcp                        
apisix-docker_apisix_1             sh -c /usr/bin/apisix init ...   Up      0.0.0.0:9080->9080/tcp, 0.0.0.0:9443->9443/tcp
apisix-docker_etcd_1               /opt/bitnami/scripts/etcd/ ...   Up      0.0.0.0:2379->2379/tcp, 2380/tcp              
apisix-docker_web1_1               /docker-entrypoint.sh ngin ...   Up      0.0.0.0:9081->80/tcp                          
apisix-docker_web2_1               /docker-entrypoint.sh ngin ...   Up      0.0.0.0:9082->80/tcp 
  • 接下来就能够通过可视化工具来治理 apisix 了,登录账号密码为admin:admin,拜访地址:http://192.168.5.78:9000/

  • 登录之后看下界面,还是挺丑陋的,apisix 搭建非常简单,根本无坑;

  • 还有两个测试服务,web1拜访地址:http://192.168.5.78:9081/

  • 另一个测试服务 web2 拜访地址:http://192.168.5.78:9082/

应用

apisix 作为新一代的网关,不仅反对根本的路由性能,还提供了丰盛的插件,性能十分弱小。

根本应用

咱们先来体验下 apisix 的基本功能,之前曾经启动了两个 Nginx 测试服务 web1web2,接下来咱们将通过 apisix 的路由性能来拜访它们。

  • 首先咱们须要创立上游(Upstream),上游相当于虚拟主机的概念,能够对实在的服务提供负载平衡性能;

  • 创立 web1 的上游,设置好名称、负载平衡算法和指标节点信息;

  • 再依照上述办法创立 web2 的上游,创立实现后上游列表显示如下;

  • 再创立 web1 的路由(Route),路由能够用于匹配客户端的申请,而后转发到上游;

  • 再抉择好路由的上游为web1

  • 接下来抉择须要利用到路由上的插件,apisix 的插件十分丰盛,多达三十种,作为根本应用,咱们临时不选插件;

  • 再创立 web2 的路由,创立实现后路由列表显示如下;

  • 接下来咱们通过 apisix 网关拜访下 web1 服务:http://192.168.5.78:9080/web1/

  • 接下来咱们通过 apisix 网关拜访下 web2 服务:http://192.168.5.78:9080/web2/

进阶应用

apisix 通过启用插件,能够实现一系列丰盛的性能,上面咱们来介绍几个实用的性能。

身份认证

应用 JWT 来进行身份认证是一种十分风行的形式,这种形式在 apisix 中也是反对的,能够通过启用 jwt-auth 插件来实现。

  • 首先咱们须要创立一个消费者对象(Consumer);

  • 而后在插件配置中启用 jwt-auth 插件;

  • 启用插件时配置好插件的 keysecret

  • 创立胜利后消费者列表时显示如下;

  • 之后再创立一个路由,路由拜访门路匹配 /auth/*,只需启用jwt-auth 插件即可;

  • 拜访接口获取生成好的 JWT Token,须要增加两个参数,key为 JWT 插件中配置的 key,payload为 JWT 中存储的自定义负载数据,JWT Token 生成地址:http://192.168.5.78:9080/apis…

  • 不增加 JWT Token 拜访路由接口,会返回 401,接口地址:http://192.168.5.78:9080/auth/

  • 在申请头 Authorization 中增加 JWT Token 后即可失常拜访;

  • 当然 apisix 反对的身份认证并不只这一种,还有上面几种。

限流性能

有时候咱们须要对网关进行限流操作,比方每个客户端 IP 在 30 秒内只能拜访 2 次接口,能够通过启用 limit-count 插件来实现。

  • 咱们在创立路由的时候能够抉择配置 limit-count 插件;

  • 而后对 limit-count 插件进行配置,依据 remote_addr 进行限流;

  • 当咱们在 30 秒内第 3 次调用接口时,apisix 会返回 503 来限度咱们的调用。

跨域反对

如果你想让网关反对跨域拜访的话,能够通过启用 cors 插件来实现。

  • 咱们在创立路由的时候能够抉择配置 cors 插件;

  • 而后对 cors 插件进行配置,配置好跨域拜访策略;

  • 调用接口测试能够发现接口曾经返回了 CORS 相干的申请头。

总结

体验了一把 apisix 这个全新一代的 API 网关,有可视化治理的网关果然不一样,简略易用,功能强大!如果你的微服务是云原生的话,能够试着用它来做网关。

其实 apisix 并不是个小众框架,很多国内外大厂都在应用了,如果你想晓得哪些公司在应用,能够参考上面的连贯。

https://github.com/apache/api…

参考资料

apisix 的官网文档十分敌对,反对中文,几乎是业界良心!过一遍官网文档根本就能把握 apisix 了。

官网文档:https://apisix.apache.org/zh/…

我的项目源码地址

https://github.com/apache/api…

本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家 Star!

退出移动版