第1章 基础知识点概述 1
1.1 网关 1
1.2 微服务 1
1.3 Nginx 2
1.4 OpenResty 3
1.5 Kong 5
1.6 Kong 的插件 5
1.7 服务网格 7
1.8 小结 8
第 2 章 Kong 的安装和基本概念 9
2.1 Kong 的安装部署 9
2.1.1 环境介绍 10
2.1.2 直接安装 10
2.1.3 容器安装 10
2.1.4 Kubernetes 安装 11
2.2 Kong 数据库的安装部署 11
2.2.1 PostgreSQL 11
2.2.2 Cassandra 12
2.2.3 DB-less 12
2.3 Kong 基础配置 15
2.4 Kong 的启动和停止 16
2.5 Kong 的基础对象 17
2.5.1 路由 18
2.5.2 服务 19
2.5.3 上游 20
2.5.4 目标 22
2.5.5 消费者 22
2.5.6 插件 22
2.5.7 证书 24
2.5.8 SNI 24
2.5.9 对象之间的关系 24
2.6 小结 26
第 3 章 Kong 的管理运维 27
3.1 Konga 介绍 27
3.2 源码安装 28
3.2.1 安装 Git 和 Node.js 28
3.2.2 安装 Konga 28
3.2.3 配置 Konga 28
3.2.4 启动 Konga 29
3.3 容器安装 29
3.4 连接 Konga 与 Kong 30
3.5 Konga 模块与功能 31
3.5.1 首页仪表盘 32
3.5.2 集群节点信息 33
3.5.3 服务管理 34
3.5.4 路由管理 36
3.5.5 消费者管理 36
3.5.6 插件管理 38
3.5.7 上游管理 39
3.5.8 目标节点管理 39
3.5.9 证书管理 40
3.5.10 用户管理 41
3.5.11 快照管理 41
3.5.12 系统设置 42
3.6 All-In-One 43
3.7 小结 45
第4章 Kong 的基本功能 46
4.1 路由转发 46
4.1.1 配置服务 46
4.1.2 配置路由 47
4.1.3 测试转发请求 48
4.2 负载均衡 48
4.2.1 案例准备 49
4.2.2 配置服务 52
4.2.3 配置路由 53
4.2.4 配置上游 54
4.2.5 添加目标节点 55
4.2.6 验证结果 56
4.3 灰度发布 58
4.4 蓝绿部署 60
4.5 正则路由 60
4.6 HTTPS 跳转 61
4.7 混合模式 63
4.7.1 案例准备 63
4.7.2 部署网格集群 64
4.7.3 验证网格集群 65
4.7.4 配置路由及限速 65
4.7.5 验证 67
4.8 TCP 流代理 67
4.9 小结 70
第 5 章 Kong 的配置详解 71
5.1 常规通用配置 71
5.2 Nginx 通用配置 72
5.2.1 代理 / 监听类 72
5.2.2 工作进程类 74
5.2.3 请求类 74
5.2.4 SSL/TLS 类 75
5.2.5 真实 IP 类 75
5.2.6 其他类 76
5.3 指令注入配置 77
5.4 数据存储配置 78
5.5 存储缓存配置 80
5.6 DNS 解析配置 81
5.7 路由同步配置 82
5.8 Lua 综合配置 83
5.9 混合模式配置 83
5.10 小结 84
第 6 章 Lua 语言 85
6.1 简介 85
6.2 环境 85
6.3 注释 86
6.4 变量 86
6.5 数据类型 87
6.6 字符串 87
6.7 运算符 88
6.7.1 算术运算符 88
6.7.2 关系运算符 89
6.7.3 逻辑运算符 89
6.7.4 连接运算符 89
6.8 控制语句 90
6.8.1 分支语句 90
6.8.2 循环语句 91
6.8.3 中断语句 92
6.9 函数 93
6.9.1 可变参数 94
6.9.2 多值返回 94
6.9.3 命名参数 95
6.10 表 95
6.10.1 表的构造 95
6.10.2 表的引用 97
6.10.3 表的迭代 97
6.10.4 表的操作 98
6.10.5 元表 99
6.10.6 类对象 100
6.11 模块 101
6.11.1 模块定义 101
6.11.2 加载函数 101
6.11.3 加载机制 102
6.12 小结 103
第 7 章 日志收集与分析 104
7.1 日志的分类与配置 104
7.1.1 访问日志的属性 104
7.1.2 访问日志的配置 105
7.1.3 错误日志的配置 106
7.2 ELK+Filebeat 的选择 107
7.3 Filebeat 107
7.3.1 安装 107
7.3.2 配置 107
7.3.3 启动 109
7.4 Elasticsearch 109
7.4.1 安装 109
7.4.2 配置 109
7.4.3 启动 110
7.5 Logstash 111
7.5.1 安装 111
7.5.2 配置 111
7.5.3 启动 111
7.6 Kibana 112
7.6.1 安装 112
7.6.2 配置 112
7.6.3 启动 112
7.6.4 应用 113
7.7 Elasticsearch 的辅助工具 116
7.8 小结 118
第 8 章 指标监控与报警 119
8.1 Kong 的监控指标 119
8.2 Prometheus 122
8.2.1 安装 122
8.2.2 配置 122
8.2.3 启动 123
8.2.4 验证 123
8.3 Grafana 125
8.3.1 安装 125
8.3.2 配置 125
8.3.3 启动 125
8.4 监控指标的可视化 126
8.5 监控指标的报警 129
8.5.1 邮件报警 129
8.5.2 企业微信报警 133
8.6 小结 135
第 9 章 高级进阶 136
9.1 负载均衡的原理 136
9.1.1 基于 DNS 的负载均衡 136
9.1.2 基于环形均衡器的负载均衡 137
9.2 健康检测的原理 140
9.2.1 健康检测的原理 140
9.2.2 健康检测的类型 142
9.3 集群机制的原理 143
9.3.1 单节点 Kong 144
9.3.2 多节点 Kong 集群 144
9.3.3 数据库缓存 144
9.4 缓存管理 145
9.4.1 lua_shared_dict 145
9.4.2 lua-resty-lrucache 149
9.4.3 lua-resty-mlcache 150
9.5 定时器 155
9.5.1 ngx.timer.at 155
9.5.2 ngx.timer.every 156
9.5.3 参数控制和优化 157
9.6 进程管理 157
9.6.1 主 / 工作进程 158
9.6.2 单进程 158
9.6.3 辅助进程 158
9.6.4 信号进程 159
9.6.5 特权代理进程 159
9.7 协程管理 159
9.7.1 ngx.thread.spawn 159
9.7.2 ngx.thread.wait 160
9.7.3 ngx.thread.kill 161
9.8 Kong 参数优化 161
9.8.1 惊群效应 161
9.8.2 参数优化 162
9.9 Kong 与 HTTP2 165
9.10 Kong 与 WebSocket 167
9.11 Kong 与 gRPC 171
9.12 Kong 与 LVS 173
9.12.1 基本概念 173
9.12.2 LVS 的三种模式 175
9.12.3 LVS 负载均衡算法 178
9.12.4 Keepalived+LVS+Kong实践 179
9.13 Kong 与 Consul 184
9.13.1 整体框架结构图 185
9.13.2 Kong+Consul 实践 186
9.14 Kong 与 Kubernetes 192
9.14.1 基本概念 192
9.14.2 安装 Kong Ingress Controller ..193
9.14.3 验证 Kong Ingress Controller ..194
9.15 Kong 的安全 198
9.15.1 通过 3 层或者 4 层网络控制 ..198
9.15.2 Kong API 本地回环 199
9.16 火焰图 199
9.16.1 概念 199
9.16.2 安装火焰图工具 200
9.16.3 生成火焰图 201
9.17 小结 203
第 10 章 内置插件
10.1 插件分类 204
10.2 环境准备 204
10.3 身份验证 207
10.3.1 基本身份验证 207
10.3.2 密钥身份验证 211
10.3.3 HMAC 身份验证 213
10.3.4 OAuth 2.0 216
10.4 安全防护 223
10.4.1 IP 限制 223
10.4.2 机器人检测 224
10.4.3 CORS 227
10.5 流量控制 228
10.5.1 请求大小限制 228
10.5.2 终止请求 230
10.6 无服务器架构 232
10.6.1 AWS Lambda 232
10.6.2 Azure Functions 235
10.6.3 Serverless Functions 237
10.7 分析监控 240
10.7.1 Prometheus 240
10.7.2 Zipkin 242
10.8 信息转换器 244
10.8.1 请求转换器 244
10.8.2 响应转换器 246
10.8.3 Correlation ID 247
10.9 日志记录 249
10.9.1 UDP 日志 249
10.9.2 HTTP 日志 253
10.9.3 Kafka 日志 255
10.9.4 MySQL 日志 261
10.10 小结 264
第 11 章 自定义插件 265
11.1 简介 265
11.1.1 基本插件 265
11.1.2 高级插件 266
11.2 原理 266
11.3 详解 PDK 269
11.3.1 单个属性 269
11.3.2 kong.client 270
11.3.3 kong.ctx 273
11.3.4 kong.ip 274
11.3.5 kong.log 275
11.3.6 kong.nginx 277
11.3.7 kong.node 277
11.3.8 kong.request 278
11.3.9 kong.response 284
11.3.10 kong.router 288
11.3.11 kong.service 289
11.3.12 kong.service.request...290
11.3.13 kong.service.response ...296
11.3.14 kong.table 298
11.4 插件开发 299
11.5 插件测试的运行环境 299
11.6 插件的制作与安装 300
11.7 插件测试与运行 302
11.8 插件与 C 语言 304
11.9 插件与 Go 语言 306
11.9.1 Go 安装 306
11.9.2 开发流程 307
11.9.3 开发示例 308
11.10 小结
第 12 章 高级案例实战 312
12.1 案例 1:智能路由 312
12.1.1 插件需求 313
12.1.2 插件开发 313
12.1.3 插件部署 315
12.1.4 插件配置 316
12.1.5 插件验证 317
12.2 案例 2:动态限频 317
12.2.1 插件需求 318
12.2.2 插件开发 319
12.2.3 插件部署 325
12.2.4 插件配置 325
12.2.5 插件验证 327
12.3 案例 3:下载限流 327
12.3.1 插件需求 328
12.3.2 插件开发 328
12.3.3 插件部署 329
12.3.4 插件配置 329
12.3.5 插件验证 330
12.4 案例 4:流量镜像 331
12.4.1 插件需求 332
12.4.2 插件开发 332
12.4.3 插件部署 333
12.4.4 插件配置 334
12.4.5 插件验证 334
12.5 案例 5:动态缓存 335
12.5.1 插件需求 335
12.5.2 插件开发 336
12.5.3 插件部署 339
12.5.4 插件配置 340
12.5.5 插件验证 341
12.6 案例 6:IP 地址位置 342
12.6.1 插件需求 342
12.6.2 插件开发 343
12.6.3 插件部署 345
12.6.4 插件配置 345
12.6.5 插件验证 346
12.7 案例 7:合并静态文件 347
12.7.1 插件需求 347
12.7.2 插件开发 348
12.7.3 插件部署 350
12.7.4 插件配置 351
12.7.5 插件验证 352
12.8 案例 8:WAF 352
12.8.1 插件需求 353
12.8.2 插件开发 353
12.8.3 插件部署 358
12.8.4 插件配置 359
12.8.5 插件验证 360
12.9 案例 9:跨数据中心 361
12.9.1 插件需求 361
12.9.2 源码调整 362
12.9.3 插件开发 363
12.9.4 插件部署 364
12.9.5 插件配置 365
12.9.6 插件验证 365
12.10 小结 366
附录 A Kong CLI 367
附录 B Kong PDK 索引表 370