Kong Api Gateway 简介

342 阅读6分钟

Kong Api Gateway 简介

一、为什么要用API网关?

API网关 = 路由转发 + 过滤器

1、路由转发:接收一切外界请求,转发到后端的微服务上去;

2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

如上图,这其实是一个单体,下面有 3 个服务,3 个服务分别做了 3 件不同的事,但它们里面有很多重复的功能,比如限流限速、身份认证等,是每个接口都要做的。每个 API 做了很多与业务不关但是又不得不做的事情。这种模式的痛点是做了大量的重复开发,如果在容器里面跑,不仅重,修改起来也麻烦,并且一旦把限流限速的逻辑修改了,那么每个服务都要修改。

API 网关的作用就是把业务无关的功能剥离出来,让你的 API 只关心业务本身,与业务无关的功能全都丢给 API 网关,包括协议的转换、限流限速、安全、统计、可追踪、缓存、日志报表等。如此,业务才能跑得更快,这就是为什么微服务会从单体变成 API 网关的架构。

优点:

  • 在前端和后端服务之间提供松耦合,降低前端复杂度
  • 减少客户端和微服务之间的调用次数。
  • 通过 SSL 终端、身份验证和授权实现高安全性。
  • 集中管理的横切关注点,公共服务,例如,日志记录和监视、节流、负载平衡。

由于每个服务引入了这个公共服务,那么相当于在每个服务中都引入了相同的权限校验的代码,使得每个服务的jar包大小无故增加了一些,尤其是对于使用docker镜像进行部署的场景,jar越小越好;

由于每个服务都引入了这个公共服务,那么我们后续升级这个服务可能就比较困难,而且公共服务的功能越多,升级就越难,而且假设我们改变了公共服务中的权限校验的方式,想让所有的服务都去使用新的权限校验方式,我们就需要将之前所有的服务都重新引包,编译部署。

缺点

  • 可能导致微服务架构中的单点故障。
  • 额外的网络调用带来的延迟增加。
  • 如果不进行扩展,它们很容易成为整个企业应用的瓶颈。
  • 额外的维护和开发费用。

网关应具备以下功能

  • 性能:API高可用,负载均衡,容错机制。
  • 安全:权限身份认证、脱敏,流量清洗,后端签名(保证全链路可信调用),黑名单(非法调用的限制)。
  • 日志:日志记录(spainid,traceid)一旦涉及分布式,全链路跟踪必不可少。
  • 缓存:数据缓存。
  • 监控:记录请求响应数据,api耗时分析,性能监控。
  • 限流:流量控制,错峰流控,可以定义多种限流规则。
  • 灰度:线上灰度部署,可以减小风险。
  • 路由:动态路由规则。

1、优点

  1. 与微服务进行松散解耦,将鉴权功能做在网关层
  2. 业务服务的扩缩灵活度高,支持快速业务整合。因为它可以通过RESTFul API配置网关代理,也支持可视化操作,更适合RD。将微服务的扩缩闭环在RD内部,不需要麻烦SRE修改Nginx配置项,缩短工作流程,节省沟通成本。
  3. 开发维护成本低,kong、konga可以下载docker镜像在mice上部署,关联的2个mysql数据库向DBA提工单创建。
  4. kong的底层是Nginx + Openresty,代理性能损耗低。kong本身做代理、负载均衡,一般不会进行二次开发,kong的功能扩展通过插件实现。kong本身支持service、route、global级别的插件配置,kong自带插件支持Auth鉴权、Acl流量控制、性能分析、日志、修改请求体,同时也支持加载自定义开发插件。
  5. 开发kong插件,仅需要了解一些lua语法。

2、缺点

  1. 需要维护一个项目,基础服务负责

二、kong网关性能怎么样?

性能测试,压力测试,手动实现

一、什么是Kong Api Gateway

基于Nginx + Openresty Api 网关

优势:

kong支持哪些插件?

  • Authentication 身份认证插件:Kong 提供了 Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication 等等实现。
  • Security 安全控制插件:ACL(访问控制)、CORS(跨域资源共享)、动态SSL、IP 限制、爬虫检测等等实现。
  • Traffic Control 流量控制插件:请求限流(基于请求计数限流)、上游响应限流(根据 upstream 响应计数限流)、请求大小限制等等实现。限流支持本地、Redis 和集群三种限流模式。
  • Analytics & Monitoring 分析监控插件:对接 Datadog、Prometheus、Zipkin 等等监控系统的实现。
  • Transformations 协议转换插件:请求转换(在转发到 upstream 之前修改请求)、响应转换(在 upstream 响应返回给客户端之前修改响应)。
  • Logging 日志应用插件:支持 TCP、UDP、HTTP、File、Syslog、StatsD、Loggly 等等方式传输日志。
  • Serverless 插件:提供对 AWS Lambda、Azure Functions、Apache OpenWhisk、Kong 自带 Serverless Functions 等等的 Serverless 解决方案的支持。
  • Deployment 插件

三、kong怎么用?(kong的优缺点)

konga-ui-cl62726.staging.ingress.mice.cc.d.xiaomi.net/#!/dashboar…

操作指南

1、接口转发配置步骤

  1. 添加Service,配置Host(如本机IP,port 7001)、Name,其他可不填。
  2. 在Service页面添加Routes。配置Name、Paths(如/local-test)(敲回车录入),其他可不填。Hosts如果是https协议的需要上传证书,一般Hosts用不到。
  3. 测试接口是否转发成功。10.46.207.50:8000是网关服务地址
yaodi@yaodideMacBook-Pro kong $ http http://10.46.207.50:8000/local-test

HTTP/1.1 200 OK

Connection: keep-alive

Content-Length: 12

Content-Type: text/plain; charset=utf-8

Date: Tue, 16 Mar 2021 09:32:30 GMT

Via: kong/1.0.0

X-Kong-Proxy-Latency: 27

X-Kong-Upstream-Latency: 76

set-cookie: csrfToken=DztVbWDT3Qqq8euf_f7yyQs7; path=/

x-content-type-options: nosniff

x-download-options: noopen

x-frame-options: SAMEORIGIN

x-readtime: 1

x-xss-protection: 1; mode=block



Hi,egg

2、负载均衡(暂不需要)

  1. 添加UPSTRAMS,相当于Nginx里的upstreams
  2. 添加targets,即 upstream里的 service,可设置权重
  3. 添加services,host填写第一步的upstream name。
  4. 添加service的routes信息
  5. 验证

3、插件(支持业务鉴权、米盾鉴权、uri替换)

插件的enable、disable按钮有bug,操作不生效。

  1. replace-uri插件功能是对uri部分进行替换,如 /panel/(.*) ---> /$1。用的也是正则匹配,注意lua正则表达式和Nginx的正则不同,%后面的字符将转义
  2. business-auth插件功能是对userCode和path进行业务权限校验,主要是针对通用后台用户权限管理。需要提供权限校验接口
  3. midun-proxy插件功能是对添加米盾的域名进行RSA验密,解密,并将解密出来的userCode添加到request.headers的x-user-code里。x-user-code可自定义。

四、kong开发成本如何?

  1. kong + konga + psql + mice
  2. kong + mysql
  3. kong + dbless

kong、konga相关技术文档

二、Todos

1、日志收集

2、飞书告警