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