这是一本从设计理念、功能使用、工作原理、二次开发、插件扩展、企业实践等多个维度全面讲解Apache APISIX的著作。本书由Apache APISIX官方出品,由创始团队和核心开发团队成员撰写,同时融入了大量Apache APISIX典型客户的经验和案例,
全书内容分为三部分:
首先,简单介绍API和 APISIX的概念与背景,通过一些API网关的基础功能介绍,帮助读者更快速地从理论和操作方面来理解APISIX。
其次,着重讲解APISIX在多个功能层面(安全、服务治理、可观测性、二次开发等)的实践场景与操作细节,以及二次开发扩展的插件使用。
蕞后,介绍APISIX在Ingress和服务网格领域的方案和产品呈现,同时通过多个不同业务类型与风格的企业用户案例讲解,带来更多关于APISIX在实际生产环境中的应用流程。
(1)作者背景资深:作者是APISIX的创始人,是Apache APISIX PMC成员,负责APISIX的开发和维护。
(2)作者经验丰富:作者是资深的高性能网络编程专家、云原生技术专家、安全技术专家,对网关技术有十分深入的研究。
(3)内容全面系统:从架构设计、功能使用、工作原理、二次开发、插件扩展、企业实践等多个维度全面讲解Apache APISIX,解决生产环境各种难题。
(4)注重工程实战:分享了爱奇艺(音视频)、新浪微博(社交媒体)、有赞(PaaS平台)、Airwallex(跨国金融)、保险等企业和行业的企业级APISIX实践。
为什么要写这本书
随着现代技术的发展,我们的工作和生活已经无法离开移动互联网、手机和各种应用。在这些技术或设备带来便利的背后,API起到关键的作用。目前,全球有超过96%的企业在使用API,超过80%的互联网流量是通过API传输的。API已经成为数字世界的基础设施,就像物理世界的自来水管道和电网一样,虽然我们感觉不到它们的存在,但它们却无比重要。
作为API的使用者,全球几十亿的终端用户并不关心它的稳定、安全和高效。但对于通过API提供数据的企业来说,如何选择一个合适的API网关,让它来保证数千乃至数万的API一直提供快速和安全的服务,是企业的技术团队需要考虑的关键问题之一。
从2015年开始,我就投身到API相关的开源项目和开源社区中。我发现,随着API的快速发展,很多公司和开发者在API的使用上都有动态、集群管理和可观测性等方面的需求。于是,我和温铭决定成立一家商业化公司API7.ai,并开源了APISIX这个云原生API网关,以期解决企业的这些痛点。
为了实现这个目标,我们在2019年10月把APISIX捐赠给Apache软件基金会。APISIX于2020年7月毕业,成为Apache顶级项目。
Apache APISIX从开源的第一天开始,就坚持每个月发布一个新版本,3年来从未间断。活跃的开源社区赋予了APISIX无限可能,APISIX的当前版本不仅可以处理南北向流量,还可以处理东西向流量,并且拥有近100个插件。
同时,APISIX在全球也收获了庞大的用户群,涵盖互联网、智能制造、电信、保险、券商、远程办公、航空航天和新消费等行业,积累了大量的实践经验。让APISIX的这些经验和场景沉淀,帮助工程师更好地使用API网关,是我们写本书的初衷。
读者对象
本书适合想要了解和使用Apache APISIX的用户:
从零开始学习Apache APISIX的用户。
想要为Apache APISIX贡献代码的社区参与者。
想通过Apache APISIX了解API网关领域的一些功能实践的学习者。
如何阅读本书
本书分为三部分。
第一部分为APISIX入门,简单介绍了API和Apache APISIX的概念与背景,并通过API网关的基础功能介绍,帮助读者快速地从理论和操作方面来理解APISIX。
第二部分为APISIX进阶,着重讲解APISIX在多个功能层面(安全、服务治理、可观测性、二次开发等)的实践场景与操作细节。同时,为了方便一些基于APISIX进行二次开发的读者使用,本部分还提供了针对二次开发进行扩展的内容,比如APISIX多语言插件。
第三部分为基于APISIX的综合实践,介绍了APISIX在Ingress和服务网格领域的方案和产品呈现。另外,这部分还讲解了多个不同业务类型与风格的企业用户案例,让读者了解更多关于APISIX在实际生产环境中的应用流程。
附录为Apache APISIX PMC主席温铭从个人角度对APISIX项目的探索及未来发展的阐述。
如果你是一名经验丰富的资深用户,已经了解APISIX的相关基础知识和使用技巧,那么你可以直接阅读第二部分。但如果你是一名初学者,请一定从第1章的基础理论知识开始学习。第三部分相比于前两部分更加独立,如果你对Ingress和服务网格方案更感兴趣,可以直接阅读第三
部分。
勘误和支持
参加本书写作的还有钱勇、张超、罗泽轩、赵士瑞、白泽平、金卫、杨陶、江晨炜、彭业奇、帅进超、庄浩潮、荣鑫、温铭。由于作者的水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。读者可以将问题发布到Apache APISIX的GitHub Issue置顶问题中。期待能够得到读者的真挚反馈。
致谢
感谢本书的作者团队对于Apache APISIX项目的持续贡献,感谢大家对本书投入的精力。
感谢我的家人以及朋友。有了你们的支持与鼓励,我才有机会在工作上投入大量的时间。
Apache APISIX是站在巨人的肩膀上建立的。有了NGINX、LuaJIT、OpenResty这些伟大的开源项目,APISIX才得以在短短几年内成为API网关的首选。
感谢Apache APISIX社区400多位代码贡献者,以及无数提交过Issue、反馈过意见的工程师和布道师,是你们让APISIX得到了更快的发展和更多的关注。
王院生
2022年8月
前 言
第一部分 APISIX入门
第1章 初识API 2
1.1 API:万物互联的起源 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的设计理念与项目
优势 16
2.2.1 设计理念 16
2.2.2 项目优势 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网关的形态演进 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 数据面服务发现 139
7.1.1 集成Eureka 139
7.1.2 集成Consul 143
7.1.3 集成Nacos 146
7.2 控制面服务发现 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章 二次开发与扩展操作 276
11.1 自定义插件 276
11.1.1 加载自定义插件 276
11.1.2 启动自定义插件 278
11.1.3 自定义插件的使用 281
11.2 插件热加载 284
11.3 多语言插件开发 285
11.3.1 实现方式 285
11.3.2 使用Go开发插件 286
11.3