zoukankan      html  css  js  c++  java
  • 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网关

  • 相关阅读:
    总结
    webview细节注意
    对图片的处理
    介绍并提高app中WebView的性能
    工作中新接触的问题
    iOS环信
    Framework静态库制作方法
    多线程GCD
    iOS开发之地图与定位
    ARC内存管理机制详解
  • 原文地址:https://www.cnblogs.com/turingguo/p/apisix_netcore.html
Copyright © 2011-2022 走看看