目录
一、API网关简介
- 什么是api 网关:
- 我们知道在微服务架构中,大型服务都被拆分成了独立的微服务,每个微服务通常会以RESTFUL API的形式对外提供服务
- 但是在UI方面,我们可能需要在一个页面上显示来自不同微服务的数据,此时就会需要一个统一的入口来进行API的调用
- API Gateway就在此场景下充当了多个服务的大门,系统的统一入口
- api 网关应该具备的功能
- 服务路由
- 动态路由:API Gateway可以与微服务注册中心连接,实现微服务无感知动态扩容
- 负载均衡
- 服务发现
- 熔断降级:API Gateway对于无法访问的服务,可以做到自动熔断,无需人工参与
- 黑白名单过滤
- 服务路由
- api网关技术选型
API网关 | Kong | APISIX | Trk | Apigee | Aliyun |
---|---|---|---|---|---|
部署模式 | 单机和集群 | 单机和集群 | 单机和集群 | 不支持单机 | RaaS |
数据存储 | Postgres或者Cassandra | etcd | Redis | Postgres、Cassandra和Zookeeper | RaaS |
是否开源 | Apache 2.0协议 | Apache 2.0协议 | MPL协议 | 否 | 否 |
核心技术 | Nginx+Lua | Nginx+Lua | Golang | 未知 | 未知 |
私有部署 | 是 | 是 | 是 | 否 | 否 |
自定义插件 | 是 | 是 | 是 | 否 | 否 |
社区活跃度 | 高 | 高 | 高 | 中 | 低 |
支持yaml | 是 | 是 | 否 | 否 | 否 |
二、kong的安装和配置
- kong官方地址:https://github.com/Kong/kong
- kong中文翻译文档:https://github.com/qianyugang/kong-docs-cn
- 知乎上关于kong的集合:https://www.zhihu.com/topic/20174970/hot
- kong参考地址:https://blog.youkuaiyun.com/qq23001186/article/details/126357870
三、动态路由
1 - kong的端口说明
- 8001:kong的管理端口
- 8000:用户访问的端口
- 1337:konga地址
2 - 动态路由实现
- SERVICES:
- Service顾名思义就是我们自己定义的上游服务,通过kong匹配到相应的请求要转发的地方
- Service可以与下面的Router进行关联,一个Service可以有很多Router,匹配到的Router就会转发到Service中
- 当然中间也会通过Plugin的处理,增加或者减少一些相应的Header或者其他信息
- ROUTERS
- Router路由相当于nginx配置中的location
- Router实体定义匹配客户端请求的规则,每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由
- 每一个匹配给定路线的请求都将被提交给它的相关服务
- 路由和服务的组合(以及它们之间的关注点分离)提供一种强大的理由基址,可以在kong中定义细粒度的入口点
- 从而引导访问到不同的upstream服务
- 添加Service
- 为Service添加Router