這是一本從設計理念、功能使用、工作原理、二次開發(fā)、插件擴展、企業(yè)實踐等多個維度全面講解Apache APISIX的著作。本書由Apache APISIX官方出品,由創(chuàng)始團隊和核心開發(fā)團隊成員撰寫,同時融入了大量Apache APISIX典型客戶的經驗和案例,
全書內容分為三部分:
首先,簡單介紹API和 APISIX的概念與背景,通過一些API網關的基礎功能介紹,幫助讀者更快速地從理論和操作方面來理解APISIX。
其次,著重講解APISIX在多個功能層面(安全、服務治理、可觀測性、二次開發(fā)等)的實踐場景與操作細節(jié),以及二次開發(fā)擴展的插件使用。
蕞后,介紹APISIX在Ingress和服務網格領域的方案和產品呈現,同時通過多個不同業(yè)務類型與風格的企業(yè)用戶案例講解,帶來更多關于APISIX在實際生產環(huán)境中的應用流程。
(1)作者背景資深:作者是APISIX的創(chuàng)始人,是Apache APISIX PMC成員,負責APISIX的開發(fā)和維護。
(2)作者經驗豐富:作者是資深的高性能網絡編程專家、云原生技術專家、安全技術專家,對網關技術有十分深入的研究。
(3)內容全面系統(tǒng):從架構設計、功能使用、工作原理、二次開發(fā)、插件擴展、企業(yè)實踐等多個維度全面講解Apache APISIX,解決生產環(huán)境各種難題。
(4)注重工程實戰(zhàn):分享了愛奇藝(音視頻)、新浪微博(社交媒體)、有贊(PaaS平臺)、Airwallex(跨國金融)、保險等企業(yè)和行業(yè)的企業(yè)級APISIX實踐。
為什么要寫這本書
隨著現代技術的發(fā)展,我們的工作和生活已經無法離開移動互聯(lián)網、手機和各種應用。在這些技術或設備帶來便利的背后,API起到關鍵的作用。目前,全球有超過96%的企業(yè)在使用API,超過80%的互聯(lián)網流量是通過API傳輸的。API已經成為數字世界的基礎設施,就像物理世界的自來水管道和電網一樣,雖然我們感覺不到它們的存在,但它們卻無比重要。
作為API的使用者,全球幾十億的終端用戶并不關心它的穩(wěn)定、安全和高效。但對于通過API提供數據的企業(yè)來說,如何選擇一個合適的API網關,讓它來保證數千乃至數萬的API一直提供快速和安全的服務,是企業(yè)的技術團隊需要考慮的關鍵問題之一。
從2015年開始,我就投身到API相關的開源項目和開源社區(qū)中。我發(fā)現,隨著API的快速發(fā)展,很多公司和開發(fā)者在API的使用上都有動態(tài)、集群管理和可觀測性等方面的需求。于是,我和溫銘決定成立一家商業(yè)化公司API7.ai,并開源了APISIX這個云原生API網關,以期解決企業(yè)的這些痛點。
為了實現這個目標,我們在2019年10月把APISIX捐贈給Apache軟件基金會。APISIX于2020年7月畢業(yè),成為Apache頂級項目。
Apache APISIX從開源的第一天開始,就堅持每個月發(fā)布一個新版本,3年來從未間斷;钴S的開源社區(qū)賦予了APISIX無限可能,APISIX的當前版本不僅可以處理南北向流量,還可以處理東西向流量,并且擁有近100個插件。
同時,APISIX在全球也收獲了龐大的用戶群,涵蓋互聯(lián)網、智能制造、電信、保險、券商、遠程辦公、航空航天和新消費等行業(yè),積累了大量的實踐經驗。讓APISIX的這些經驗和場景沉淀,幫助工程師更好地使用API網關,是我們寫本書的初衷。
讀者對象
本書適合想要了解和使用Apache APISIX的用戶:
從零開始學習Apache APISIX的用戶。
想要為Apache APISIX貢獻代碼的社區(qū)參與者。
想通過Apache APISIX了解API網關領域的一些功能實踐的學習者。
如何閱讀本書
本書分為三部分。
第一部分為APISIX入門,簡單介紹了API和Apache APISIX的概念與背景,并通過API網關的基礎功能介紹,幫助讀者快速地從理論和操作方面來理解APISIX。
第二部分為APISIX進階,著重講解APISIX在多個功能層面(安全、服務治理、可觀測性、二次開發(fā)等)的實踐場景與操作細節(jié)。同時,為了方便一些基于APISIX進行二次開發(fā)的讀者使用,本部分還提供了針對二次開發(fā)進行擴展的內容,比如APISIX多語言插件。
第三部分為基于APISIX的綜合實踐,介紹了APISIX在Ingress和服務網格領域的方案和產品呈現。另外,這部分還講解了多個不同業(yè)務類型與風格的企業(yè)用戶案例,讓讀者了解更多關于APISIX在實際生產環(huán)境中的應用流程。
附錄為Apache APISIX PMC主席溫銘從個人角度對APISIX項目的探索及未來發(fā)展的闡述。
如果你是一名經驗豐富的資深用戶,已經了解APISIX的相關基礎知識和使用技巧,那么你可以直接閱讀第二部分。但如果你是一名初學者,請一定從第1章的基礎理論知識開始學習。第三部分相比于前兩部分更加獨立,如果你對Ingress和服務網格方案更感興趣,可以直接閱讀第三
部分。
勘誤和支持
參加本書寫作的還有錢勇、張超、羅澤軒、趙士瑞、白澤平、金衛(wèi)、楊陶、江晨煒、彭業(yè)奇、帥進超、莊浩潮、榮鑫、溫銘。由于作者的水平有限,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。讀者可以將問題發(fā)布到Apache APISIX的GitHub Issue置頂問題中。期待能夠得到讀者的真摯反饋。
致謝
感謝本書的作者團隊對于Apache APISIX項目的持續(xù)貢獻,感謝大家對本書投入的精力。
感謝我的家人以及朋友。有了你們的支持與鼓勵,我才有機會在工作上投入大量的時間。
Apache APISIX是站在巨人的肩膀上建立的。有了NGINX、LuaJIT、OpenResty這些偉大的開源項目,APISIX才得以在短短幾年內成為API網關的首選。
感謝Apache APISIX社區(qū)400多位代碼貢獻者,以及無數提交過Issue、反饋過意見的工程師和布道師,是你們讓APISIX得到了更快的發(fā)展和更多的關注。
王院生
2022年8月
前 言
第一部分 APISIX入門
第1章 初識API 2
1.1 API:萬物互聯(lián)的起源 2
1.1.1 什么是API 2
1.1.2 利用API可以做什么 4
1.2 API網關:連接與管理并行 5
1.2.1 什么是API網關 5
1.2.2 API 網關的作用 7
第2章 Apache APISIX介紹 10
2.1 Apache APISIX概述 10
2.1.1 誕生背景:API的崛起 10
2.1.2 Apache APISIX能做什么 13
2.2 Apache APISIX的設計理念與項目
優(yōu)勢 16
2.2.1 設計理念 16
2.2.2 項目優(yōu)勢 19
第3章 快速上手 Apache APISIX 23
3.1 安裝APISIX 23
3.1.1 使用RPM安裝 23
3.1.2 使用Docker安裝 25
3.1.3 使用Helm安裝 27
3.2 APISIX相關概念 28
3.2.1 反向代理 28
3.2.2 請求限制 30
3.2.3 身份驗證 33
3.3 APISIX 架構 35
3.3.1 思考:API網關的形態(tài)演進 35
3.3.2 探索:Apache APISIX技術
選型 37
3.3.3 確認:Apache APISIX架構 39
第4章 Apache APISIX部署與配置 42
4.1 公有云部署 42
4.1.1 在AWS EKS上部署APISIX 42
4.1.2 在 Google GKE 上部署
APISIX 43
4.1.3 在阿里云ACK上部署
APISIX 45
4.2 配置文件 46
4.2.1 Standalone模式 46
4.2.2 集群模式 47
4.2.3 Debug模式 54
4.3 安全性配置 54
4.3.1 控制面和數據面獨立部署 54
4.3.2 插件 54
4.4 多種配置中心選擇 55
第5章 Apache APISIX的基礎功能 57
5.1 流量切分 57
5.1.1 原理 58
5.1.2 參數 59
5.1.3 應用場景 59
5.2 健康檢查 65
5.2.1 原理 66
5.2.2 參數 67
5.2.3 應用場景 68
5.3 負載均衡 70
5.3.1 加權輪詢 71
5.3.2 一致性哈!72
5.3.3 加權最少連接數 73
5.3.4 指數加權移動平均 75
5.4 跨域資源共享 77
5.4.1 原理 77
5.4.2 參數 77
5.4.3 使用方法 78
5.4.4 應用場景 79
5.5 IP黑白名單 79
5.5.1 原理 80
5.5.2 參數 80
5.5.3 應用場景 81
5.6 啟用與禁用插件 82
5.6.1 插件簡介 82
5.6.2 啟用插件 83
5.6.3 禁用插件 84
第二部分 APISIX進階
第6章 身份認證與鑒權 86
6.1 JWT 認證 86
6.1.1 插件簡介 86
6.1.2 配置示例 87
6.1.3 應用場景 88
6.1.4 與Vault集成 90
6.2 關鍵字認證 98
6.2.1 插件簡介 98
6.2.2 配置示例 98
6.2.3 應用場景 99
6.3 OpenID 認證 102
6.3.1 背景介紹 102
6.3.2 原理 104
6.3.3 集成第三方使用場景 105
6.4 LDAP 認證 123
6.4.1 插件簡介 123
6.4.2 配置示例 124
6.4.3 應用場景 125
6.5 forward-auth插件 127
6.5.1 插件簡介 127
6.5.2 配置示例 127
6.5.3 應用場景 128
6.6 consumer-restriction插件 131
6.6.1 插件簡介 131
6.6.2 參數 132
6.6.3 應用場景 132
第7章 API和服務治理 139
7.1 數據面服務發(fā)現 139
7.1.1 集成Eureka 139
7.1.2 集成Consul 143
7.1.3 集成Nacos 146
7.2 控制面服務發(fā)現 150
7.2.1 原理 150
7.2.2 集成Nacos 151
7.2.3 集成ZooKeeper 154
7.3 服務熔斷 156
7.3.1 原理 156
7.3.2 參數 157
7.3.3 應用場景 158
7.4 流量鏡像 160
7.4.1 插件簡介 160
7.4.2 參數 161
7.4.3 應用場景 161
7.5 故障注入 165
7.5.1 插件簡介 165
7.5.2 參數 166
7.5.3 應用場景 166
7.6 DNS配置 170
7.6.1 原理 170
7.6.2 應用場景 171
第8章 SSL證書配置 177
8.1 SSL證書配置簡介 177
8.1.1 單域名 177
8.1.2 泛域名 179
8.1.3 多域名 180
8.1.4 單域名,多證書 181
8.2 同域名RSA與ECC雙證書配置 181
8.2.1 原理 181
8.2.2 使用示例 181
8.3 TLS雙向認證 183
8.3.1 原理 184
8.3.2 應用場景 184
第9章 可觀測性 189
9.1 鏈路追蹤 189
9.1.1 集成Apache SkyWalking 189
9.1.2 集成OpenTelemetry 194
9.2 指標 200
9.2.1 集成Datadog 200
9.2.2 集成Prometheus 205
9.3 日志 211
9.3.1 訪問日志 211
9.3.2 錯誤日志 241
9.3.3 日志文件自動切分 246
第10章 運維管理 249
10.1 命令行交互 249
10.2 Admin API 253
10.2.1 配置Admin API 254
10.2.2 功能介紹 256
10.3 Control API 259
10.3.1 配置Control API 259
10.3.2 功能介紹 261
10.4 單機模式 262
10.4.1 相關配置 263
10.4.2 應用場景 263
10.5 etcd通信安全 265
10.5.1 相關配置 265
10.5.2 開啟mTLS雙向認證 266
10.5.3 配置etcd RBAC 267
10.6 證書輪轉 268
10.7 Public API 270
10.7.1 插件簡介 270
10.7.2 應用場景 272
第11章 二次開發(fā)與擴展操作 276
11.1 自定義插件 276
11.1.1 加載自定義插件 276
11.1.2 啟動自定義插件 278
11.1.3 自定義插件的使用 281
11.2 插件熱加載 284
11.3 多語言插件開發(fā) 285
11.3.1 實現方式 285
11.3.2 使用Go開發(fā)插件 286
11.3