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網關

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章