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