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

手把手 搭建云原生网关APISIX_Apache