降本增效-自建轻量级网关trafik总结
前段时间发现自己搭建的阿里云网站的每月费用有个上升趋势,后来仔细排查了一下账单数据,发现是SLB这块费用见涨,原来是SLB这边已经改了计费规则。按目前的账单来看,算了下一年下来要支付差不多小1千块钱啊,也是一笔不小的支出。决定果断放弃阿里云的负载均衡方案,通过购买一台1H1G服务器,自建网关服务器;
自建网关方案,相比来说 要省钱很多,风险主要是把网关的公网IP暴露出来,会引起一些不必要的麻烦和攻击;但目前主要搭建了一套个人自用的服务,被攻击概率不大,而且即使被攻击的话,必要的时候可以通过切换服务器方式来避免;
同时针对 对外开放的服务域名,可通过cloudflare 代理的方式,隐藏掉网关真实IP地址(目前cloudflare 在国内没有节点,所以相对来说访问速度会慢些,做一下必要的取舍吧);
调研了一些主流网关服务, nginx、haproxy 、traefik产品。
其实应该首选nginx及相关产品应用,nginx本身只支持七层代理,但可以通过插件化安装,实现 四层管理。毕竟nginx用的太多,生态确实可以, 可视化页面 可以通过 apisix 的方式替换,实现可视化管理;不过还是想尝试一下新事物,就pass掉;
haproxy 过于复杂,本身也支持四层代理模式,不适合轻量级自建站点;
所以最终选型 traefik应用,能够支持四七层代理,拥有可视化管理页面,配置相对简单,本身定位也是应用于轻量级站点使用,另外traefik自带 ssl证书并自动续签模式,天生解决证书过期问题。特别适合解决目前的站点问题。
traefik 介绍:
按官方解释,traefik 是 是一款现代化的 HTTP 反向代理和负载均衡器,可简化微服务的部署。Traefik 可与您现有的基础架构组件(Docker、Swarm Mode、Kubernetes、Consul、Etcd、Rancher v2、Amazon ECS 等)集成,并可自动动态地进行配置。只需将 Traefik 指向您的编排器即可完成配置。

在traefik中 有几个重点基础性概念:
1、Entrypoints:Traefik 的网络入口点。它们定义接收数据包的端口以及是否监听 TCP 或 UDP。
2、Routers:将传入的请求通道连接到能够处理它们的服务。在此过程中,路由器可能会使用中间件更新请求或在将请求转发到服务之前执行某些操作。
3、Services:配置如何到达最终处理传入请求的实际服务。
4、Providers: 主要是职责就是 服务发现(找到配置中运行的服务)、配置提供(将外部请求路由到服务的规则)其原理是,Traefik 会查询提供商的 API 以获取相关的路由信息,并在检测到变更时动态更新路由。目前主流的Providers有: docker Provider、Kubernetes Provider、File Provider、HTTP Provider;
traefik的流量基础链路:

应用部署:
目前站点的基础架构设施是,每台机器都独立部署了docker应用,没有通过swarm、k8s 这种集群模式来管理, 同时 通过搭建portainer服务,对每台机器的docker容器做轻量级管理, 这样做的主要好处是,去中心化管理模式,让每个服务独立运行互不影响,然后流量则有上层的网关以内网IP的方式进行调度分配(同一个vpc环境下),最大限度减少故障环节。
所以基于当前的站点架构,所以选择的部署的provider 为file 类型;
作为替换SLB服务产品,traefik开放 http 80端口及 https 443端口,内部通过router 规则,路由到不同service中; 同时开放tcp端口,路由只mysql 及redis相关基础服务中;
在部署traefik应用的时候,采用的docker-compose 编排文件的方式部署,访问日志记录、证书、配置文件以及缓存相关文件都是以挂接盘方式部署应用;

traefik中应用中,针对docker 化部署服务,主要是通过label 标签的方式进行配置,如图中 traefik的 dashboard的配置; 如果要构建其他docker服务,必须要把docker服务加到traefik下的
同一个network中;
traefik文件配置,分为静态配置和动态配置两种, 按deepseek介绍:静态配置是 Traefik 自身的启动蓝图,而动态配置是运行时的交通规则;
具体核心区别如下:
| 特性 | 静态配置 | 动态配置 |
|---|---|---|
| 定义 | Traefik 自身的启动参数和工作方式。 | 具体的路由、服务、中间件等业务规则。 |
| 配置对象 | Traefik 进程。 | 进入 Traefik 的请求流量。 |
| 核心内容 | 入口点、认证方式、连接后端的方式、日志、API设置等。 | 路由规则、负载均衡、中间件、服务发现等。 |
| 加载时机 | 启动时加载。 | 运行时动态加载,支持热更新。 |
| 更新方式 | 修改后需要重启 Traefik。 | 修改后无需重启,自动热重载。 |
| 典型配置方式 | 配置文件、命令行参数、环境变量。 | 标签、专用配置文件、Kubernetes CRD。 |
| 灵活性 | 低,定义后相对固定。 | 高,可根据服务变化随时调整。 |
更新 静态配置文件必须要重启服务, 而更新动态配置文件,则无需重启(还没验证过);

在动态配置文件中,可根据业务属性,分成不同的配置文件,单独维护。类似与nginx下的应用配置文件一样;
应用总结:
1、 针对HTTPS服务,通过引用 acme服务,确保自动生成证书应用。同时按官方说明证书到期之前会自动更新证书确保不过期。
2、在router 规则中,针对 不同服务的特性,添加中间件服务,如seafile在代理服务的时候,request信息上添加 HOST记录;
针对中间件服务,官方提供了很多常用中间件服务可供使用,同时也提供引用插件化安装方式,在请求进入router的时候,对请求、响应报文做加工处理; 同时可支持通过插件做自定义开发;
3、services配置,代表转发的后端服务信息,一般采用loadBalancer模式,基于我们的现状,基本后端可以是单节点服务;
4、traefik 提供了api接口描述,在通过dashboard配置密钥认证之后,可直接通过 api接口 获取相关配置信息: