1.Apache APISIX 概述
Apache APISIX 是 Apache 软件基金会下的顶级项目,由 API7.ai 开发并捐赠。它是一个具有动态、实时、高性能等特点的云原生 API 网关。
你可以使用 APISIX 网关作为所有业务的流量入口,它提供了动态路由、动态上游、动态证书、A/B 测试、灰度发布(金丝雀发布)、蓝绿部署、限速、f防gj、收集指标、监控报警、可观测、服务治理等功能.
APISIX是基于Nginx和Etcd与传统的API网关相比,APISIX具有动态路由和热加载插件功能,避免了配置之后的reload操作,同时APISIX支持HTTP(S),HTTP2,Dubbo,QUIC,MQTT,TCP/UDP等多种协议,还内置了Dashboard,提供强大且灵活的界面,同样也提供了丰富的插件支持功能,并且还可以让用户自定义插件.
我们可以使用APISIX来处理传统的南北流量,也可以处理服务之间的东西流量,同时,它也支持作为kubernetes Ingress Controller来使用.
2.主要特点
主要特点:
1:多平台支持:APISIX提供了多平台支持方案,不仅支持裸机运行,也支持在Kubernetes中使用,还与AWS Lambda,Azure Function,Lua函数和Apache OpenWhisk等云服务集成
2:全动态能力:APISIX支持热加载,这意味着我们不需要重启服务就可以更新APISIX的配置,在Ingress-Nginx的实现是基于Lua
3:精细化路由:APISIX支持使用Nginx内置变量作为路由匹配条件,我们可以自定义匹配函数来过滤请求,匹配路由
4:运维友好:APISIX支持与以下工具进行集成:HashiCorp Vault,Zipkin,Apache SkyWalking,Consul,Nacos,EureKa。通过APISIX Dashbaord,运维人员可以友好并直观的配置APISIX
5:多语言插件支持:APISIX支持多种开发语言进行插件开发,开发人员可以选择擅长语言的SDK开发自定义插件3.基础环境
操作系统版本:Rocky Linux release 9.4 (Blue Onyx)
内核版本: 5.14.0-427.13.1.el9_4.x86_64
kubernetes 版本: v1.28.2
Helm 版本: v3.16.2
4.部署Apisix
4.1 准备etcd 环境
本文主要使用K8S STS资源对象部署有状态etcd)
由于本地环境有限未部署storageclass 资源对象 故使用host path 方式
#创建ns 命名空间 存放apisix服务相关资源
kubectl create ns apisix
namespace/apisix created
#创建pvc和pvc etcd存放数据
cat > pvc-all.yaml <<'EOF'
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-apisix-etcd-pv-01
namespace: apisix
spec:
storageClassName: ""
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /data/apisix/etcd-01
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-apisix-etcd-pv-02
namespace: apisix
spec:
storageClassName: ""
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /data/apisix/etcd-02
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-apisix-etcd-pv-03
namespace: apisix
spec:
storageClassName: ""
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /data/apisix/etcd-03
#pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
/instance: apisix
/name: etcd
name: data-apisix-etcd-0
namespace: apisix
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
volumeName: data-apisix-etcd-pv-01
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
/instance: apisix
/name: etcd
name: data-apisix-etcd-1
namespace: apisix
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
volumeName: data-apisix-etcd-pv-02
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
/instance: apisix
/name: etcd
name: data-apisix-etcd-2
namespace: apisix
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ""
volumeName: data-apisix-etcd-pv-03
volumeMode: Filesystem
EOF
















