读完这篇文章里你能收获到:

️掌握Apache APISIX的层次化架构设计,包括Nginx、OpenResty、etcd和插件系统的作用与协同。了解APISIX的关键技术要素,包括路由、上游、服务、消费者和插件的概念及其在API管理中的应用。学习如何通过Admin API和Dashboard进行路由配置,实现请求的灵活转发和流量管理。熟悉Apache APISIX的常用命令,提高API网关服务的管理效率和运维能力。

 『Apisix系列汇总』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】

文章目录

一、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

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。