打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
全新一代API网关,带可视化管理,文档贼友好!
userphoto

2022.07.26 江苏

关注

提到API网关,大家比较熟悉的有Spring Cloud体系中的Gateway和Zuul,这些网关在使用的时候基本都要修改配置文件或自己开发功能。今天给大家介绍一款功能强大的API网关apisix,自带可视化管理功能,多达三十种插件支持,希望对大家有所帮助!

简介

apisix是一款云原生微服务API网关,可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现,与传统API网关相比,apisix具有动态路由和插件热加载,特别适合微服务系统下的API管理。

核心概念

我们先来了解下apisix的一些核心概念,对我们接下来的使用会很有帮助!

  • 上游(Upstream):可以理解为虚拟主机,对给定的多个目标服务按照配置规则进行负载均衡。
  • 路由(Route):通过定义一些规则来匹配客户端的请求,然后对匹配的请求执行配置的插件,并把请求转发给指定的上游。
  • <>ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">消费者(Consumer):作为API网关,有时需要知道API的消费方具体是谁,通常可以用来做身份认证。i>
#artContent table{width:100% !important;}#artContent p img{float:none !important;}#artContent img{max-width:656px;} #artContent h1{font-size:16px;font-weight: 400;}ache/apisix-dockerm/aphttps://github.co 项目源码地址官方文档:https://apisix.apache.org/zh/docs/apisix/getting-started
apisix的官方文档非常友好,支持中文,简直是业界良心!过一遍官方文档基本就能掌握apisix了。 参考资料ache/apisix/blob/master/powered-by.mdm/aphttps://github.co其实apisix并不是个小众框架,很多国内外大厂都在使用了,如果你想知道哪些公司在使用,可以参考下面的连接。体验了一把apisix这个全新一代的API网关,有可视化管理的网关果然不一样,简单易用,功能强大!如果你的微服务是云原生的话,可以试着用它来做网关。 总结
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">调用接口测试可以发现接口已经返回了CORS相关的请求头。i>
插件进行配置,配置好跨域访问策略;corsction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">然后对i>
插件;corsction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">我们在创建路由的时候可以选择配置i>插件来实现。cors如果你想让网关支持跨域访问的话,可以通过启用跨域支持
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">当我们在30秒内第3次调用接口时,apisix会返回503来限制我们的调用。i>
进行限流;remote_addr插件进行配置,根据limit-countction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">然后对i>
插件;limit-countction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">我们在创建路由的时候可以选择配置i>插件来实现。limit-count有时候我们需要对网关进行限流操作,比如每个客户端IP在30秒内只能访问2次接口,可以通过启用限流功能
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">当然apisix支持的身份认证并不只这一种,还有下面几种。i>
中添加JWT Token后即可正常访问;Authorizationction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">在请求头i>
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">不添加JWT Token访问路由接口,会返回401,接口地址:http://192.168.5.78:9080/auth/i>
为JWT中存储的自定义负载数据,JWT Token生成地址:http://192.168.5.78:9080/apisix/plugin/jwt/signpayload为JWT插件中配置的key,keyction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">访问接口获取生成好的JWT Token,需要添加两个参数,i>
插件即可;jwt-auth,只需启用/auth/*ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">之后再创建一个路由,路由访问路径匹配i>
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">创建成功后消费者列表时显示如下;i>
;secret和keyction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">启用插件时配置好插件的i>
插件;jwt-authction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">然后在插件配置中启用i>
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">首先我们需要创建一个消费者对象(Consumer);i>插件来实现。jwt-auth使用JWT来进行身份认证是一种非常流行的方式,这种方式在apisix中也是支持的,可以通过启用身份认证apisix通过启用插件,可以实现一系列丰富的功能,下面我们来介绍几个实用的功能。进阶使用
服务:http://192.168.5.78:9080/web2/web2ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">接下来我们通过apisix网关访问下i>
服务:http://192.168.5.78:9080/web1/web1ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">接下来我们通过apisix网关访问下i>
的路由,创建完成后路由列表显示如下;web2ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">再创建i>
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">接下来选择需要应用到路由上的插件,apisix的插件非常丰富,多达三十种,作为基本使用,我们暂时不选插件;i>
;web1ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">再选择好路由的上游为i>
的路由(Route),路由可以用于匹配客户端的请求,然后转发到上游;web1ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">再创建i>
的上游,创建完成后上游列表显示如下;web2ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">再按照上述方法创建i>
的上游,设置好名称、负载均衡算法和目标节点信息;web1ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">创建i>
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">首先我们需要创建上游(Upstream),上游相当于虚拟主机的概念,可以对真实的服务提供负载均衡功能;i>,接下来我们将通过apisix的路由功能来访问它们。web2和web1我们先来体验下apisix的基本功能,之前已经启动了两个Nginx测试服务基本使用apisix作为新一代的网关,不仅支持基本的路由功能,还提供了丰富的插件,功能非常强大。 使用
访问地址:http://192.168.5.78:9082/web2ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">另一个测试服务i>
访问地址:http://192.168.5.78:9081/web1ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">还有两个测试服务,i>
ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">登录之后看下界面,还是挺漂亮的,apisix搭建非常简单,基本无坑;i>
,访问地址:http://192.168.5.78:9000/admin:adminction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">接下来就可以通过可视化工具来管理apisix了,登录账号密码为i>              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/tcpapisix-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 docker-compose -p apisix-docker psction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">启动成功后,使用如下命令可查看所有服务的运行状态;i>docker-compose -p apisix-docker up -d文件所在目录下,使用如下命令可以一次性启动所有服务;docker-compose.ymlction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">在i>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中我们可以发现,该脚本不仅启动了apisix、apisix-dashboard、etcd这三个核心服务,还启动了两个测试用的Nginx服务;docker-compose.ymlction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">从i>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 mkcertdrwxrwxrwx. 2 root root   40 Jun 19 10:12 upstream # 两个测试用的Nginx服务配置目录上传到Linux服务器上去,来了解下这个目录里面的东西;examplection style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">接下来我们把i>
ache/apisix-dockerm/ap目录就行了,下载地址:https://github.coexample项目,其实我们只需要使用其中的apisix-dockerction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">首先下载i>由于官方提供了Docker Compose部署方案,只需一个脚本即可安装apisix的相关服务,非常方便,这里我们也采用这种方案来部署。安装 ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">插件(Plugin):API网关对请求的增强操作,可以对请求增加限流、认证、黑名单等一系列功能。可以配置在消费者、服务和路由之上。i>ction style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">服务(Service):可以理解为一组路由的抽象。它通常与上游是一一对应的,路由与服务之间,通常是多对一的关系。i><>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Apache APISIX 微服务网关极致性能架构解析
手动安装shipyard
Docker集群管理工具-Kubernetes部署记录
附019.Rancher搭建及使用
Haproxy etcd confd Docker搭建节点自动发现的高可用负载均衡框架
【实战】Docker Machine + Compose + Swarm
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服