内容简介
这是一本关于Kong网关开发和运维的集大成之作。作者基于自己在该领域的丰富实践经验,从零开始,不仅循序渐进地讲解了Kong网关的核心概念、使用方法、工作原理、工程实践和源码,而且还将微服务设计、分布式架构、DevOps等相关技术融入其中,帮助读者打通Kong网关的整个技术体系,轻松跨越从理论到项目实战的鸿沟。
全书共16章,分为4篇,具体内容如下。
入门篇(第1~4章)
首先对网关层和Kong网关做了整体性介绍,然后有针对性地讲解了Nginx、OpenResty和Lua语言等必备知识,为之后深入学习打下基础。
基础篇(第5~8章)
这部分围绕Kong网关的日常配置和操作展开,具体包括Kong网关配置文件、部署方案、命令行向导、代理、鉴权、负载均衡策略和健康检查机制等
内容。
进阶篇(第9~12章)
主要介绍了Kong网关区别于其他传统网关的插件机制,以及Kong网关在整个架构体系中与其他系统之间的交互和联动。
应用篇(第13~16章)
主要结合当前日益成熟的云原生环境,给出Kong网关在不同场景下的整体解决方案,如与微服务、Service Mesh、Kubernetes、Serverless的结合等。
封面图
目录
- 前言
- 入门篇
- 第1章全面了解Kong网关 2
- 1.1网关简介 2
- 1.1.1网关的由来 3
- 1.1.2网关的作用 3
- 1.2Kong网关简介 6
- 1.2.1Kong网关的发展历程 6
- 1.2.2Kong网关与传统网关对比 6
- 1.2.3其他主流网关 7
- 1.3Kong网关基础组件 12
- 1.3.1Kong服务器 12
- 1.3.2数据库 13
- 1.3.3Kong管理GUI 14
- 1.4Kong网关安装指南 14
- 1.4.1在Mac环境中安装Kong网关 15
- 1.4.2在Linux环境中安装Kong网关 15
- 1.4.3在Docker环境中安装Kong网关 15
- 1.5使用Kong网关搭建Web应用 16
- 1.5.1示例项目介绍 16
- 1.5.2后端服务路由 18
- 1.5.3静态页面代理 20
- 1.6本章小结 24
- 第2章Nginx必备知识 25
- 2.1Nginx安装 25
- 2.1.1在Mac环境中安装Nginx 25
- 2.1.2在Linux环境中安装Nginx 26
- 2.1.3在Docker环境中安装Nginx 26
- 2.2Nginx详解 26
- 2.2.1Nginx文件的目录结构 26
- 2.2.2命令行参数 28
- 2.2.3配置文件 29
- 2.2.4依赖库 32
- 2.2.5Nginx的工作原理 33
- 2.2.6Nginx优化指南 35
- 2.3项目实践 37
- 2.3.1从Kong切换到Nginx 37
- 2.3.2添加黑白名单 39
- 2.3.3添加限流 39
- 2.3.4从Nginx切换到Kong 41
- 2.3.5小结 41
- 2.4本章小结 42
- 第3章Lua必备知识 43
- 3.1Lua入门与规范 43
- 3.1.1基础知识 43
- 3.1.2安装指南 44
- 3.1.3解释器 45
- 3.1.4语法规范 46
- 3.2数据类型 47
- 3.3操作符 52
- 3.4表达式语句 54
- 3.4.1赋值语句 54
- 3.4.2控制语句 55
- 3.5Lua库 58
- 3.6本章小结 62
- 第4章OpenResty必备知识 63
- 4.1OpenResty入门安装 63
- 4.1.1在Mac环境中安装OpenResty 63
- 4.1.2在Linux环境中安装OpenResty 64
- 4.1.3在Docker环境中安装OpenResty 64
- 4.2OpenResty详解 64
- 4.2.1OpenResty服务器的目录结构 64
- 4.2.2Resty CLI 65
- 4.2.3OpenResty包管理工具 67
- 4.3OpenResty工作原理 69
- 4.4OpenResty性能优化 71
- 4.4.1避免使用阻塞函数 72
- 4.4.2巧用table组件 72
- 4.4.3使用缓存 73
- 4.4.4火焰图 73
- 4.5项目实践 75
- 4.6本章小结 82
- 基础篇
- 第5章Kong网关配置与部署 84
- 5.1Kong启动项配置 84
- 5.1.1配置项加载流程 85
- 5.1.2配置项详解 86
- 5.1.3环境变量 89
- 5.1.4配置文件示例 89
- 5.2注入Nginx指令 90
- 5.2.1注入单个Nginx指令 91
- 5.2.2通过文件方式注入Nginx指令 92
- 5.3个性化使用场景 92
- 5.3.1自定义Nginx模板文件 93
- 5.3.2在OpenResty实例中嵌入Kong 93
- 5.4Kong网关部署 94
- 5.4.1无数据库部署模式 94
- 5.4.2数据库部署模式 97
- 5.4.3混合部署模式 100
- 5.5本章小结 102
- 第6章Kong网关命令行 103
- 6.1通用标志参数 104
- 6.2Kong网关命令行详解 104
- 6.2.1kong check 104
- 6.2.2kong config 106
- 6.2.3kong health 109
- 6.2.4kong hybrid 109
- 6.2.5kong migrations 110
- 6.2.6kong prepare 112
- 6.2.7kong quit 113
- 6.2.8kong reload 113
- 6.2.9kong restart 114
- 6.2.10kong start 114
- 6.2.11kong stop 115
- 6.2.12kong version 116
- 6.3本章小结 116
- 第7章Kong网关代理及鉴权 117
- 7.1Kong网关代理基础知识 117
- 7.1.1Kong网关术语简介 117
- 7.1.2Kong网关代理环境配置 118
- 7.2Kong网关代理示例 118
- 7.3路由匹配规则 121
- 7.3.1通用匹配规则 121
- 7.3.2paths属性 123
- 7.3.3hosts属性 126
- 7.3.4methods属性 128
- 7.3.5headers属性(hosts除外) 129
- 7.3.6sources & destinations属性 129
- 7.3.7snis属性 129
- 7.4路由匹配优先级 130
- 7.4.1优先级策略 130
- 7.4.2后备路由策略 131
- 7.5Kong网关代理行为 132
- 7.5.1超时机制 132
- 7.5.2错误重试机制 133
- 7.5.3插件执行策略 133
- 7.5.4响应内容 133
- 7.6配置SSL协议 134
- 7.7代理WebSocket流量 135
- 7.8代理gRPC流量 138
- 7.9Kong网关鉴权 140
- 7.9.1通用鉴权流程 140
- 7.9.2匿名接入流程 142
- 7.9.3多重认证策略 143
- 7.10本章小结 144
- 第8章Kong网关负载均衡策略与健康检查 145
- 8.1负载均衡 145
- 8.1.1负载均衡简介 145
- 8.1.2负载均衡解决方案 146
- 8.1.3Kong网关中的负载均衡 146
- 8.2基于DNS的负载均衡 146
- 8.2.1A记录(包含AAAA记录) 147
- 8.2.2SRV记录 147
- 8.2.3DNS 记录优先级 147
- 8.2.4其他注意事项 148
- 8.3环状负载均衡器 148
- 8.3.1基础概念 148
- 8.3.2负载均衡策略 150
- 8.3.3其他注意事项 151
- 8.4负载均衡特性使用场景 151
- 8.4.1蓝绿发布 151
- 8.4.2金丝雀发布 155
- 8.5健康检查 157
- 8.5.1健康检查标准 157
- 8.5.2健康检查类型 159
- 8.5.3健康检查配置 160
- 8.6本章小结 162
- 进阶篇
- 第9章Kong网关插件 164
- 9.1Kong网关插件简介 164
- 9.1.1Kong网关插件概念 164
- 9.1.2Kong网关插件原理 165
- 9.2Kong官方插件 166
- 9.2.1鉴权类插件 166
- 9.2.2安全类插件 177
- 9.2.3流量类插件 179
- 9.2.4分析监控类插件 195
- 9.2.5内容转换类插件 197
- 9.2.6日志类插件 204
- 9.2.7其他插件 210
- 9.3自定义Kong网关插件 210
- 9.3.1自定义插件开发流程和插件生命周期管理详解 210
- 9.3.2插件开发套件 240
- 9.3.3Go插件开发向导 241
- 9.3.4自定义插件实例 243
- 9.4本章小结 245
- 第10章Kong网关日志 246
- 10.1Kong网关日志简介 246
- 10.1.1Kong网关日志分类 246
- 10.1.2Kong网关日志级别 248
- 10.2Kong网关结合日志平台 249
- 10.2.1ELK方案简介 249
- 10.2.2Kong网关结合ELK 253
- 10.2.3日志系统使用场景 256
- 10.3自定义日志 261
- 10.3.1Kong网关定制日志 262
- 10.3.2ELK定制日志 264
- 10.3.3小结 265
- 10.4本章小结 266
- 第11章Kong网关运维 267
- 11.1资源选型 267
- 11.1.1服务器资源 267
- 11.1.2数据库资源 268
- 11.1.3弹性伸缩 269
- 11.1.4性能参数 269
- 11.2Kong网关监控 270
- 11.2.1监控平台选型 270
- 11.2.2搭建监控平台 271
- 11.2.3Kong网关监控平台配置 272
- 11.2.4Kong网关监控平台指标详解 278
- 11.2.5Kong监控平台指标测试 279
- 11.2.6Kong监控平台的预警功能 281
- 11.3Kong网关运维 284
- 11.3.1数据备份 284
- 11.3.2软/硬件维护 286
- 11.3.3突发事件处理 288
- 11.4本章小结 288
- 第12章Kong网关安全与集群高可用 289
- 12.1Kong网关安全配置 289
- 12.1.1网络层访问限制 289
- 12.1.2Kong API 回路 290
- 12.1.3自定义Nginx配置 291
- 12.2Kong集群 292
- 12.2.1Kong集群简介 292
- 12.2.2Kong集群缓存 293
- 12.3Kong网关高可用 298
- 12.3.1架构设计 298
- 12.3.2引入HAProxy层 300
- 12.3.3高可用方案测试 301
- 12.4本章小结 308
- 应用篇
- 第13章Kong网关结合微服务架构 310
- 13.1微服务简介 310
- 13.1.1微服务的优点 311
- 13.1.2单体应用和微服务 311
- 13.1.3微服务12要素 313
- 13.2单体应用向微服务迁移 313
- 13.2.1采用微服务的注意事项 314
- 13.2.2迁移细节 314
- 13.3使用CI/CD流程促进微服务开发 316
- 13.3.1CI/CD流程基础组件 316
- 13.3.2构建CI/CD流程 318
- 13.4基于Kong打造DevOps平台 320
- 13.4.1场景描述 320
- 13.4.2设计思路 321
- 13.4.3DevOps平台使用指南 325
- 13.4.4DevOps平台源码解析 329
- 13.4.5DevOps平台扩展 335
- 13.5本章小结 336
- 第14章Kong网关结合Kubernetes架构方案 337
- 14.1Kubernetes详解 337
- 14.1.1Kubernetes简介 337
- 14.1.2Kubernetes发展史 338
- 14.1.3Kubernetes基本概念和术语 340
- 14.1.4Kubernetes的HelloWorld示例 342
- 14.2Kubernetes与Kong网关结合 350
- 14.2.1概念描述 350
- 14.2.2使用Kubernetes安装Kong 358
- 14.3Kubernetes实战 359
- 14.3.1安装Kong网关 359
- 14.3.2使用Kong网关 360
- 14.3.3配置Kong网关插件 361
- 14.4本章小结 363
- 第15章Service Mesh实践之Kuma 364
- 15.1Service Mesh简介 364
- 15.2Kuma简介 366
- 15.2.1为什么使用Kuma 366
- 15.2.2Kuma与其他Service Mesh方案的比较 366
- 15.2.3Kuma系统组件 367
- 15.2.4Kuma部署示例 368
- 15.3Kuma策略概述 369
- 15.3.1策略配置项描述 369
- 15.3.2使用策略 370
- 15.3.3策略匹配规则 371
- 15.4Kuma内置策略详解 372
- 15.4.1安全类策略 372
- 15.4.2流量控制类策略 376
- 15.4.3观测类策略 382
- 15.5Kuma实战 388
- 15.5.1适配Kuma架构 388
- 15.5.2启动mTSL和TrafficPermission 390
- 15.6本章小结 391
- 第16章Serverless架构 392
- 16.1Serverless简介 392
- 16.1.1系统架构演化 392
- 16.1.2部署方式演化 393
- 16.1.3Serverless内核 395
- 16.2Serverless实践 396
- 16.2.1搭建开发环境 396
- 16.2.2Web应用服务 402
- 16.3本章小结 407
- 附录ADocker安装指南 408
- 附录BKONGA安装指南 412
- 附录C数据库明细 417
- 附录DAdmin API 422