Apache APISIX 的安装和配置请求转发url匹配
阅读原文时间:2023年07月09日阅读:3

安装apisix套件

创建一个apisix文件夹,在apisix文件夹下再创建一个etcd_data文件夹,用来持久化etcd的数据

在apisix文件夹下 新建3个文件 config.yaml,  dashboard_conf.yaml, docker-compose.yaml, 分别对应apisix的配置文件 dashboard的配置文件 docker-compose文件

结构目录如下

config.yaml

apisix:
node_listen: 9080

allow_admin:
- 0.0.0.0/0 #允许所有网段ip访问, 可改为指定网段

admin_key:
- name: "admin"
key: edd1c9f034335f136f87ad84b625c8f1
role: admin

- name: "viewer"  
  key: 4054f7cf07e344346cd3f287985e76a2  
  role: viewer

etd:
host:
- "http://etcd:2379"
prefix: "/apisix"
timeout: 30 #单位 秒

dashboard_config.yaml

conf:
listen:
host: 0.0.0.0 # 面板监听的地址
port: 9000 # 面板监听的端口
allow_list: # 白名单IP段列表
- 0.0.0.0/0
etcd:
endpoints: - "http://etcd:2379"

authentication:
secret:
secret # secret for jwt token generation.
# NOTE: Highly recommended to modify this value to protect `manager api`.
# if it's default value, when `manager api` start, it will generate a random string to replace it.
expire_time: 3600 # jwt token 过期时间 单位 秒
users: # - username: admin # 面板登录用户名密码
password: admin
- username: user
password: user

plugins: # 插件列表- api-breaker

  • authz-keycloak
  • basic-auth
  • batch-requests
  • consumer-restriction
  • cors
    # - dubbo-proxy
  • echo
    # - error-log-logger
    # - example-plugin
  • fault-injection
  • grpc-transcode
  • hmac-auth
  • http-logger
  • ip-restriction
  • jwt-auth
  • kafka-logger
  • key-auth
  • limit-conn
  • limit-count
  • limit-req
    # - log-rotate
    # - node-status
  • openid-connect
  • prometheus
  • proxy-cache
  • proxy-mirror
  • proxy-rewrite
  • redirect
  • referer-restriction
  • request-id
  • request-validation
  • response-rewrite
  • serverless-post-function
  • serverless-pre-function
    # - skywalking
  • sls-logger
  • syslog
  • tcp-logger
  • udp-logger
  • uri-blocker
  • wolf-rbac
  • zipkin
  • server-info
  • traffic-split

docker-compose.yaml

version: '3'
services:
gateway:
image: apache/apisix
volumes:
- ./config.yaml:/usr/local/apisix/conf/config.yaml:ro
depends_on: etcd
ports:
- "9080:9080"
- "9443:9443"

dashboard:
image: apache/apisix-dashboard
volumes:
- ./dashboard_conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml
ports:
- "9000:9000"
depends_on: gateway

etcd:
image: bitnami/etcd
user: root
volumes:
- ./etcd_data:/bitnami/etcd
environment:
ETCD_ENABLE_V2: "true"
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ports:
- "2379:2379/tcp"

配置url转发

访问 本地IP:9000

用户名密码 admin admin(dashboard_conf.yaml里有配置)

添加上游

左侧菜单--上游 --创建

输入名称 描述, 选择负载均衡算法 配置后端服务主机名(域名或ip也可以), 设置转发协议 连接超时等,点击下一步,提交

添加路由转发

左侧菜单--路由--创建

全匹配转发

填写域名和匹配的路径,一般的路径规则是 域名/服务名/方法名

路径一栏可以填写指定xx开头的路径请求转发到指定的上游,也就是后端服务。 路径改写选择 保持原样,则访问的时候是 xxx/Weatherforecast/all, 转发到后端服务的时候也是这样的

下一步 选择上游,选择已经建好的上游

路径匹配改写

比如请求网关是 /test/order/all, 然后后端接收的路径应该是 /order/all, 中间的test只是充当服务名的标识。

路径 填  /test/*    匹配/test/ 这种请求, /test 是不满足的

路径改写选正则改写

匹配 /^test/(.*)   表示匹配/test/之后的部分,作为第一个匹配到的值,变量名为$1

转发路径模板 /$1    即取上一个匹配后的参数拼接转发

下一步 选择上游,选择已经建好的上游

性能测试

R7 3700X 16G

正则匹配后的路径改写转发

正则匹配的确会影响性能,不过1w+的rps也够看了

全匹配,无改写的转发

3w+的rps。强啊,    这个.net 5.0 api原生4w+,  我愿称之为最强api网关