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