📣读完这篇文章里你能收获到:
- 🛠️掌握Apache APISIX的层次化架构设计,包括Nginx、OpenResty、etcd和插件系统的作用与协同。
- 🔑了解APISIX的关键技术要素,包括路由、上游、服务、消费者和插件的概念及其在API管理中的应用。
- 🌐学习如何通过Admin API和Dashboard进行路由配置,实现请求的灵活转发和流量管理。
- 🚀熟悉Apache APISIX的常用命令,提高API网关服务的管理效率和运维能力。
🚀 『Apisix系列汇总』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】
文章目录
一、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
nohupsudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1&
- 停止etcd
# 查找etcd进程的PIDps aux |grep etcd
# 假设找到的PID是12345,使用kill命令停止etcdsudokill12345
- 重启etcd : 先停止再启动
# 1. 查找etcd进程的PIDps aux |grep etcd
# 2. 假设找到的PID是12345,使用kill命令停止etcdsudokill12345# 3. 启动nohupsudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1&# 4. 重新加载apisixsudo apisix reload
版权归原作者 老陈聊架构 所有, 如有侵权,请联系我们删除。