Kong网关 入门、实战与进阶

2021-11-19 14:05:11 浏览数 (1)

入门篇

第1章 全面了解Kong网关

  • Kong是一款基于OpenRestyNginx Lua模块)编写的高可用、易扩展的开源API网关,专为云原生和云混合架构而建,并针对微服务和分布式架构进行了特别的优化
  • 微服务网关具有负载均衡、缓存、路由、访问控制、服务代理、监控、日志等多项功能。API网关在微服务架构中正是以微服务网关的身份存在
  • 由于企业间信息交流和共享变得日益频繁,企业需要将自身数据、能力等向外开放,通常以接口的方式向外提供,如淘宝开放平台、腾讯的QQ开放平台和微信开放平台。开放平台的引入必然涉及客户应用接入、API权限管理、调用次数管理等多项功能的完善

表16 功能

  • Kong服务器的架构设计
  1. 高扩展性:用户可以通过简单地向Kong集群中添加更多服务器实现横向扩展,这意味着用户在面对超大流量时可以轻松应对,整个集群可以保持正常负载,保证整个网关层服务可靠稳定
  2. 模块化:Kong服务器的路由、服务、插件均是基于模块构建的,这些元素可以通过AdminAPI轻松配置,或者通过Kong管理GUI进行可视化管理
  3. 与运行环境无关:Kong服务器理论上可以在任何环境中运行,也就是说,用户可以在云服务器或者内部网络环境中部署Kong服务器
  • 当前主流的开源Kong管理GUIKongDashboardKONGA,其中KongDashboard对新版本的Kong支持不好,建议读者使用KONGA。图18是KONGA的界面
  • 安装完成后,我们还需要准备两个配置文件,一个是启动项配置文件。用户可以从https://raw.githubusercontent.com/Kong/kong/master/kong.conf.default下载配置模块,并更改配置文件名为kong.conf。修改kong.conf配置文件内容
  • 另一个是kong.yml文件,需要使用kongconfiginit命令生成。该配置文件内容可以为空,但文件本身不可缺失。当一切准备就绪后,使用kongstartckong.conf命令启动Kong服务,在浏览器中输入http://127.0.0.1:8001可以查看服务是否启动成功

程序清单17 config.yml配置文件

图1-12 引入Kong网关之后的请求详情

程序清单110 改造后的Dockerfile文件

程序清单111 todolists.conf文件

第2章 Nginx必备知识

程序清单28 kong.yml配置文件

  • 添加了名为ratelimitingiprestriction的插件(插件会在第11章做重点介绍),表示只允许访问172.21.0.1(即frontend地址),且每分钟只能访问3次

图26 Kong限流效果图一

图27 Kong限流效果图二

  • 响应头中的XRateLimitLimitMinute表示限流的次数,即每分钟3次;XRateLimitRemainingMinute表示限流剩余的次数;RateLimitReset表示还需要多长时间才能重置限流插件、恢复访问,单位为秒
  • 作为NginxOpenRestyKong的关键连接点,Lua是学习Kong网关的必备知识之一

第3章 Lua必备知识

  • Lua还有一个同期进行的LuaJIT项目,即JustInTime,也就是运行时编译器。LuaJIT的语法和标准Lua的语法类似,但是其运行速度比标准Lua快数十倍
  • Lua语言是CC 的“王牌搭档”。CC 应用程序与Lua语言结合完美地平衡了性能和灵活性,这也正是Kong网关能够提供高性能和高度定制化插件的基础
  • LuaJIT解释器的执行效率为Lua解释器执行效率的10倍以上
  • 程序设计语言中的一等、二等、三等公民
  1. 一等公民:可以作为参数传递,也可以从子程序中返回,还可以赋值给变量
  2. 二等公民:可以作为参数传递,但是不能从子程序中返回,也不能赋值给变量
  3. 三等公民:值作为参数传递都不行
  • 此处再多做一下引申,函数为“一等公民”是函数式编程的基础
  • 用户数据分为两类:完全用户数据,指由Lua管理的内存对应的对象;轻量用户数据,指简单的C指针
  • Lua中,用户数据除了赋值与相等性判断之外,没有其他预定义操作
  • 线程类型表示一个独立的执行序列,用于实现协程。Lua线程与操作系统的线程毫无关系。Lua可以为所有系统,包括那些不支持原生线程的系统,提供协程支持。代码清单35使用Lua协程实现了经典的生产者消费者示例
  • 表是Lua中唯一的数据结构,也是非常灵活的数据结构。它可被用于表示普通数组、序列、符号表、集合、字典、图、树等。对于字典,Lua使用域名作为索引。Lua语言提供了a.name这样的语法糖来替代a["name"]写法

1)表作为数组的使用示例:

2)表作为字典的使用示例:

资料

  1. 代码:https://github.com/fossilman/KongInAction

0 人点赞