Apache APISIX 的安装和配置请求转发url匹配

安装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网关

 

posted @ 2021-07-09 12:14  turingguo  阅读(8468)  评论(2编辑  收藏  举报