在我本人研究Yarp的时候经常用于公司项目的业务网关代理,这时候就个大佬问我是否可以实现动态加载HTTPS证书?那时候我说不太可能实现,然而在某一天我看到
微软使用Yarp代替了Nginx吞吐量提升了百分之八十!
这个时候我就萌生了自己使用yarp造一个Gateway的项目,应为我本身也经常使用nginx作为网关,但是nginx的使用总得写conf,然后重启我的nginx,并且还需要配置证书重启,我就在想是否可以实现界面管理,并且完全动态管理?
然后我们的FastGateway项目就诞生了,下面我们介绍一下我们的FastGateway的项目简单案例
我们的FastGateway提供了俩个容器,一个是代理服务,一个是前端服务
一般简单使用就可以直接使用我们的docker-compose构建,非常简单
FastGateway支持哪些功能?
登录授权
动态路由管理
动态配置证书管理
dashboard监控
静态文件服务代理
穿透隧道功能
出入口流量监控
mkdir datadocker run -d --restart always --name gateway-api -p 8000:8000 -p 8200:8080 -p 8300:8081 -v $(pwd)/data:/data/ registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-apidocker run -d --restart always --privileged --name gateway-web -p 10800:80 -e api_url=http://localhost:8000 registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
mkdir data
docker run -d --restart always --name gateway-api -p 8000:8000 -p 8200:8080 -p 8300:8081 -v $(pwd)/data:/data/ registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
docker run -d --restart always --privileged --name gateway-web -p 10800:80 -e api_url=http://localhost:8000 registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
services: gateway-api: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api restart: always container_name: gateway-api environment: USER: root PASS: Aa010426. ports: - 8000:8000 # 提供给web端调用的管理接口 - 8200:8080 # Http代理端口 - 8300:8081 # Https代理端口 volumes: - ./data:/data/ # 请注意手动创建data目录,负责在Linux下可能出现权限问题导致无法写入 gateway-web: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web restart: always build: context: ../web dockerfile: Dockerfile privileged: true environment: api_url: http://localhost:8000 ports: - 10800:80
services:
gateway-api:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api
restart: always
container_name: gateway-api
environment:
USER: root
PASS: Aa010426.
ports:
- 8000:8000 # 提供给web端调用的管理接口
- 8200:8080 # Http代理端口
- 8300:8081 # Https代理端口
volumes:
- ./data:/data/ # 请注意手动创建data目录,负责在Linux下可能出现权限问题导致无法写入
gateway-web:
image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web
build:
context: ../web
dockerfile: Dockerfile
privileged: true
api_url: http://localhost:8000
- 10800:80
如果并没有提供账号密码则默认
账号:root
密码:Aa010426.
由于需要使用https,为了方便系统默认提供了一个pfx证书,如果你需要提供的话可以按照以下操作进行,如果是Docker执行的话证书的目录则是 /app/certificates/gateway.pfx
/app/certificates/gateway.pfx
services: gateway-api: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api restart: always container_name: gateway-api ports: - 8000:8000 # 提供给web端调用的管理接口 - 8200:8080 # Http代理端口 - 8300:8081 # Https代理端口 environment: USER: root PASS: Aa010426. HTTPS_PASSWORD: dd666666 HTTPS_FILE: gateway.pfx ports: - 8200:8080 volumes: - ./data:/data/ - ./app/certificates:/app/certificates gateway-web: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web restart: always container_name: gateway-web privileged: true environment: api_url: http://localhost:8000 ports: - 10800:80
HTTPS_PASSWORD: dd666666
HTTPS_FILE: gateway.pfx
- 8200:8080
- ./data:/data/
- ./app/certificates:/app/certificates
container_name: gateway-web
参考上面的docker-compose文件,我们提供了俩个环境变量HTTPS_PASSWORD,HTTPS_FILE,
HTTPS_PASSWORD
HTTPS_FILE
HTTPS_FILE:
/app/certificates
HTTPS_PASSWORD:
/app/certificates:
services: gateway-api: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api restart: always container_name: gateway-api environment: USER: root PASS: Aa010426. HTTPS_PASSWORD: dd666666 TUNNEL_PASSWORD: dd666666 HTTPS_FILE: gateway.pfx ports: - 8000:8000 # 提供给web端调用的管理接口 - 8200:8080 # Http代理端口 - 8300:8081 # Https代理端口 volumes: - ./data:/data/ - ./app/certificates:/app/certificates gateway-web: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web restart: always container_name: gateway-web privileged: true environment: api_url: http://localhost:8000 ports: - 10800:80
TUNNEL_PASSWORD: dd666666
增加TUNNEL_PASSWORD环境变量,默认为空不设置密码
TUNNEL_PASSWORD
下载隧道客户端 https://gitee.com/hejiale010426/Gateway/releases 然后解压压缩包,打开appsettings.json文件修改Tunnel节点的Url,如果Gateway使用了TUNNEL_PASSWORD,那么你的URL应该是https://localhost:8081/api/gateway/connect-h2?host=backend1.app&password=dd666666, host是在集群中的集群端点的域名,这个域名就是定义到我们的隧道客户端的host的这个参数,请保证值的唯一性,当绑定集群的路由匹配成功以后则会访问图片定义的端点,如果并没有存在节点那么他会直接代理。
https://localhost:8081/api/gateway/connect-h2?host=backend1.app&password=dd666666
host
使用环境变量控制是否启用流量监控,使用环境变量ENABLE_FLOW_MONITORING设置我们是否启用流量监控,如果为空则默认启动流量监控,然后可以打开我们的控制面板查看流量监控的数据。
ENABLE_FLOW_MONITORING
services: gateway-api: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-api restart: always container_name: gateway-api environment: USER: root PASS: Aa010426. HTTPS_PASSWORD: dd666666 HTTPS_FILE: gateway.pfx ENABLE_FLOW_MONITORING: true ports: - 8000:8000 # 提供给web端调用的管理接口 - 8200:8080 # Http代理端口 - 8300:8081 # Https代理端口 volumes: - ./data:/data/ - ./app/certificates:/app/certificates gateway-web: image: registry.cn-shenzhen.aliyuncs.com/tokengo/gateway-web restart: always container_name: gateway-web privileged: true environment: api_url: http://localhost:8000 ports: - 10800:80
ENABLE_FLOW_MONITORING: true
开源地址:FastGateway: FastGateway 一个超级简单方便的网关,基于Kestrel+Yarp实现的网关。 支持动态配置路由,支持动态配置集群,支持动态配置HTTPS证书,无需重启即可使用。 (gitee.com)
原文链接:https://www.cnblogs.com/hejiale010426/p/18004526
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728