Kong 入門與實戰 : 基於 Nginx 和 OpenResty 的雲原生微服務網關
內容描述
本書是一本介紹雲原生微服務網關Kong的入門與實戰的書,內容全面務實、由淺入深,幾乎涵蓋Kong相關的所有知識點。全書共12章,包括Kong的基礎知識點概述、安裝和基本概念、管理運維、基本功能、配置詳解、Lua語言、日誌收集與分析、指標監控與報警、Kong的高級進階、內置插件與自定義插件、高級案例實戰。本書配有大量的實戰示例,尤其是第12章的九大新穎場景案例,使讀者從理論到實戰學以致用。
本書適合軟件開發人員、測試人員、運維人員、安全人員、架構師、技術經理等IT資深人士閱讀。
目錄大綱
第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
作者介紹
閆觀濤
架構師,Kong項目貢獻者,擁有多年IT行業從業經驗,目前就職於北森雲計算股份有限公司,專注於雲原生分佈式SaaS/PaaS系統的架構和研發,擁有多項國家發明專利。