📣读完这篇文章里你能收获到:
-
🌐 深入Apache APISIX架构: 从Nginx到OpenResty,再到etcd,一站式掌握云原生API网关的构建精髓,领略其层次化设计的魅力。
-
🔌 核心组件全解析: 路由、上游、服务、消费者、插件…这些不再是抽象的概念,而是你API管理中的强大工具。
-
🛠 路由配置实操: 通过Admin API,轻松创建上游、配置路由,实现请求的精准转发,让理论与实践完美结合。
-
🌟 APISIX的独特优势: 动态路由、热插拔插件、云原生兼容性…这些特性让APISIX在API网关领域独树一帜。
-
🔧 常用命令速查: 从启动到停止,从重启到版本检查,一系列APISIX和etcd命令,让你的运维工作更加得心应手。
文章目录
- 一、Apisix介绍
- 1.1 基础架构剖析
- 1.2 关键技术要素
- 1.3 产品优势
- 二、路由配置(入门初体验)
- 2.1 Admin API应用
- 2.2 Dashboard可视化操作
- 三、Apisix常用命令
- 3.1 Apisix命令
- 3.2 Apisix-Dashboard命令
- 3.3 ETCD命令
一、Apisix介绍
Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它具有动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、限速、防御恶意攻击、身份认证、可观测性等丰富的流量管理功能。可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。
1.1 基础架构剖析
APISIX 的核心架构采用层次化设计
- Nginx:底层依赖 Nginx 提供高效的网络通信和数据传输;
- OpenResty:上层则通过 OpenResty 封装的 Lua 环境,实现灵活的逻辑控制和业务扩展。
- etcd:在配置管理方面,APISIX 利用 etcd 作为分布式键值存储系统,使得所有节点上的配置能够实时同步并动态更新,从而确保整个服务集群具备高度的弹性和一致性。
- 插件系统:APISIX 提供了一个强大的插件生态系统,这些插件可自由组合以满足不同场景下的功能需求,如身份验证(Key Auth、JWT、Basic Auth)、限流限速、熔断、灰度发布、A/B 测试等。
1.2 关键技术要素
接下来我们来了解下 APISIX 的一些功能。在了解之前我们需要对 APISIX 的几个主要概念和组件简单了解下:
- **路由(Routes):**定义了如何将不同的请求映射到指定的上游服务,可以根据请求的方法、路径、头部、查询参数等进行精确匹配。
- **上游(Upstream):**代表一组后端服务实例,用于负载均衡,可以通过多种负载均衡策略(如轮询、权重、一致性哈希等)分配请求。
- 服务(Service): 是一组提供相同功能的后端服务器实例的集合,通常对应着微服务架构中的一个具体服务。它通常与上游服务抽象是一一对应的,Route 与 Service 之间,通常是 N:1 的关系。
- **消费者(Consumer):**需要与用户认证配合才可以使用。消费者在访问服务时,API 网关可以根据预先设定的规则对消费者的请求进行验证和过滤。。当不同的消费者请求同一个 API 时,APISIX 会根据当前请求的用户信息,对应不同的 Plugin 或 Upstream 配置。
- 如果 Route、Service、Consumer 和 Plugin Config 都绑定了相同的插件,只有消费者的插件配置会生效。
- 插件配置的优先级由高到低的顺序是:Consumer > Route > Plugin Config > Service。
- **插件:**插件是 APISIX 的核心功能单元,每个插件可以实现特定的功能,如认证、限流、缓存、日志记录等。
- **Admin API:**APISIX 提供了强大的 Admin API 和 Dashboard 供用户使用,Admin API 是一组用于配置 Apache APISIX 路由、上游、服务、SSL 证书等功能的 RESTful API。可以通过 Admin API 来获取、创建、更新以及删除资源。同时得益于 APISIX 的热加载能力,资源配置完成后 APISIX 将会自动更新配置,无需重启服务。
1.3 产品优势
APISIX 基于 Nginx 和 etcd,与传统 API 网关相比,APISIX 具有动态路由和热加载插件功能,避免了配置之后的 reload 操作,同时 APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的协议。而且有 Dashboard提供强大而灵活的界面。同样也提供了丰富的插件支持功能,而且还可以让用户自定义插件。
主要具有以下几个优势:
- 高性能:得益于 Nginx 的高性能内核和 LuaJIT 的快速脚本执行,APISIX 即使在大规模并发环境下也能保持优异的性能指标,低延迟、高吞吐量,即便启用大量插件也无损其响应速度。
- **云原生兼容性:**APISIX 无缝集成于 Kubernetes 等容器编排平台,支持服务发现、自动注入标签等云原生特性。
- 全动态能力:APISIX 支持实时从 etcd 获取最新配置,并立即生效。
- 热插拔插件:无需停服即可添加、移除或修改插件配置,增强服务运维灵活性。
- 易用性:APISIX 支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard,运维人员可以通过友好且直观的 UI 配置 APISIX。
- 多语言插件支持:APISIX 支持多种开发语言进行插件开发,开发人员可以选择擅长语言的 SDK 开发自定义插件。
二、路由配置(入门初体验)
2.1 Admin API应用
下文中的的 X-API-KEY 的值在 APISIX 的配置文件中 apisix_config.yaml 中有配置,位于 deployment.admin.admin_key 下面。
Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。
目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。
- 创建一个_upstream_指向 httpbin.org
curl http://127.0.0.1:9180/apisix/admin/upstreams \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"id":"upstream-demo1-id",
"name": "upstream-demo1",
"type":"roundrobin",
"nodes": [
{
"host": "httpbin.org",
"port": 80,
"weight": 1
}
]
}'
- 创建一个路由routes,绑定以上创建的upstream
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"id":"routes-demo1-id",
"name": "routes-demo1",
"methods": ["GET","POST"],
"uris": ["/ip","/get"] ,
"upstream_id": "upstream-demo1-id"
}'
- 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip
2.2 Dashboard可视化操作
Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。
目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。
- 创建一个_upstream_指向 httpbin.org
- 点击上游->创建->填写目标节点信息->下一步->提交
- 创建一个路由routes,绑定以上创建的upstream
- 点击路由->创建->填写匹配路径->填写HTTP匹配方法->下一步->选择上游服务->下一步->提交
- 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip
三、Apisix常用命令
3.1 Apisix命令
- 启动apisix服务
apisix start
- 停止apisix服务
apisix stop
- 优雅地停止apisix服务
apisix quit
- 重启apisix服务
apisix restart
- 重新加载apisix服务
apisix reload
- 初始化本地nginx.conf
apisix init
- 初始化etcd的数据
apisix init_etcd
- 测试生成的nginx.conf
apisix test
- 显示apisix的版本信息
apisix version
- 显示apisix帮助信息
apisix help
3.2 Apisix-Dashboard命令
- 启动apisix-dashboard服务
systemctl start apisix-dashboard
- 停止apisix-dashboard服务
systemctl stop apisix-dashboard
- 重启apisix-dashboard服务
systemctl restart apisix-dashboard
3.3 ETCD命令
- 启动etcd
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &
- 停止etcd
# 查找etcd进程的PID
ps aux | grep etcd
# 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345
- 重启etcd : 先停止再启动
# 1. 查找etcd进程的PID
ps aux | grep etcd
# 2. 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345
# 3. 启动
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &
# 4. 重新加载apisix
sudo apisix reload