一 Kong是什么
目标: 本篇章有一个'粗框'的理解即可,后续会基于'某些概念'深入讲解
① API Gateway
1)Kong是一个云原生'Cloud Native'、快速、可伸缩及高性能的'API网关',通过'插件'扩展功能
备注: 在'客户端'和'微服务'间'转发API通信'的API网关
② nginx openresty Kong的关系
理解: nginx、openresty、Kong '三者'是一个'递进'的关系
1)Kong是一个在'nginx中运行的lua'应用程序,可以通过lua-nginx模块实现
2)Kong'不是'用这个模块'编译nginx',而是'与openrestry一起发布',包含了lua-nginx-module
③ 插件提供扩展功能
++++++++++ 通过'插件'的形式提供'功能' ++++++++++
常见: 负载均衡、日志记录、'灰度发布'、'认证和鉴权'、API请求'限流'
④ Kong术语简介
1)Route:是请求的'转发规则',按照Hostname和PATH,将请求转发给Service
2)Services:是'多个Upstream的集合',是Route的转发目标
3)Consumer:是API的用户,里面记录用户的一些信息
4)Plugin:是'插件',plugin可以是全局的,绑定到Service,绑定到Router,绑定到Consumer
5)Certificate:是https证书
6)Sni:是域名与Certificate的绑定,指定了一个域名对应的https证书
7)Upstream:是'负载均衡策略'
8)Target:是'最终处理请求'的Backend服务
⑤ Kong的术语 与 nginx.conf 对应关系
说明: 这个很'重要',帮助我们从'nginx'无缝的衔接到'Kong'
⑥ Kong的组件
+++++++++ Kong主要有'三个'组件 +++++++++
1)Kong Server 基于'nginx'的服务器,用来'接收'API请求
2)Apache Cassandra/'PostgreSQL' 用来'存储'操作数据,进行'持久化'
备注: 'Cassandra'已经废弃,官方推荐使用'pg'
3)Kong Dashboard 非必须,但是官方'推荐'UI管理工具,典型代表'Konga'
备注:也可以使用 'Restfull 方式' 管理admin api
二 安装Kong
说明: 本文基于'Centos 7.7'使用'虚拟机安装Kong',并使用'pg'进行数据持久化
① 安装地址
说明: 注意选择'稳定'版本,'部署'方式根据实际需要选择
② 下载rpm包
说明: 国内下载比较'慢',推荐使用'代理'安装
地址: https://download.konghq.com/gateway-2.x-centos-7/Packages/k/
思考: 'enterprise-edition'和'普通版本'的区别
③ 数据库安装
说明: 安装'Kong'服务之前的'前置'动作
Kong支持PostgreSQL'9.5+'和Cassandra'即将废弃' 3.x.x 作为他的数据库
+++++++++++++++ '测试环境采用docker安装pg' +++++++++++++++
docker run -d --name kong-database -p 5432:5432 \
-e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" \
-v /home/kiosk/pgdata:/var/lib/postgresql/data \
--restart=always \
-e "POSTGRES_PASSWORD=kong" --privileged=true postgres:12
-- 解读: --privileged=true --> 获取宿主机root权限,否则是'伪'root
说明: 从官网查看'pg镜像'的 '-e 环境变量' 参数
-- '容器中'执行数据库初始化
-- 1)切换到linxu中的'postgres'用户
su - postgres
-- 2)进入'数据库'中
psql -h localhost -U kong -p 5432
-- 3)创建数据库和密码(假定docker没有通过环境变量初始化) [可选]
CREATE USER kong WITH PASSWORD '123456';
-- 4)创建数据库并指定归属用户
CREATE DATABASE kong OWNER kong;
-- 5)授权'kong'用户对'kong'数据库的操作权限
GRANT ALL PRIVILEGES ON DATABASE kong to kong;
④ 安装Kong
/etc/kong/kong.conf.default -->是'kong.conf'的一个实例文件,详解了'配置参数'
+++++++++ kong config init [filename] +++++++++
1)生成一个'示例启动'的配置文件;
2)如果'没有'给出文件名,默认使用'kong.yml',内容类似'nginx.conf'
3)该配置文件'内容可以为空',但文件本身'不可缺失'
kong migrations bootstrap -c {PATH_TO_KONG.CONF_FILE} -->'迁移'
⑤ 验证
curl -i http://localhost:8001/services -->'验证'
curl -s localhost:8001 | jq '.configuration'
curl -s localhost:8001 | python -m json.tool
curl http://localhost:8001/services 2>/dev/null |python -m json.tool
++++++++++ '接口返回的都是json格式的数据' ++++++++++
GET /routers/ #列出所有路由
GET /services/ #列出所有服务
GET /consumers/ #列出所有用户
GET /services/{service name or id}/routes #列出服务关联的路由
GET /plugins/ #列出所有的插件配置
GET /plugins/enabled #列出所有可以使用的插件
GET /plugins/schema/{plugin name} #获得插件的配置模版
GET /certificates/ #列出所有的证书
GET /snis/ #列出所有域名与证书的对应
GET /upstreams/ #列出所有的upstream
GET /upstreams/{name or id}/health/ #查看upstream的健康状态
GET /upstreams/{name or id}/targets/all #列出upstream中所有的target