轻量级前端框架在提升开发效率与用户体验中的重要作用
2133
2022-09-28
新反向代理与负载均衡工具 traefik 安装配置部署详解
traefik
## 简介
traefik是一款开源的反向代理与负载均衡工具。软件定位是做负载均衡器,提供好用的负载均衡服务,不要老拿它跟nginx对比。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。
目前支持:Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API等等后端模型。
#### ME为什么选择traefik?
Golang编写,单文件部署,与系统无关;
热加载配置文件;
内置Web UI,管理相对方便;
功能特点:
```
It's fast
No dependency hell, single binary made with go
Rest API
Multiple backends supported: Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, and more to come
Watchers for backends, can listen for changes in backends to apply a new configuration automatically
Hot-reloading of configuration. No need to restart the process
Graceful shutdown connections
Circuit breakers on backends
Round Robin, rebalancer load-balancers
Rest Metrics
Tiny official docker image included
SSL backends support
SSL frontend support (with SNI)
Clean AngularJS Web UI
Websocket support
HTTP/2 support
Retry request if network error
Let's Encrypt support (Automatic HTTPS with renewal)
High Availability with cluster mode
```
### 安装部署:
#### 规划服务路径
#### 服务主路径
cd /etc/traefik/
#### ssl 证书存放路径
mkdir -p /etc/traefik/ssl
#### 配置文件存放路径
mkdir -p /etc/traefik/config
#### 日志存放路径
mkdir -p /etc/traefik/log
#### 源码包安装:
测试版本:v1.2.3
软件-:755 traefik
#### 启动服务
traefik go 语言编写,启动服务比较简单,指定一下配置文件即可,
```
./traefik -c ./config/traefik.toml
```
#### 默认没有配置文件,需要自己根据官网参考文件进行整理,下面我根据官网信息,进行整理优化了一个主配置文件。
```
[root@trarfik-test config]# more traefik.toml
##开启debug 模式,Default,false
debug = true
##日志级别, "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "PANIC"
logLevel = "INFO"
##Traefik 服务日志,如果不配置,日志将屏幕输出;
#traefikLogsFile = "/etc/traefik/log/traefik.log"
##成功访问日志
accessLogsFile = "/etc/traefik/log/access.log"
##与后端连接保持时间,避免反复与后端服务建立连接,Default,"2s"
##ProvidersThrottleDuration = "5s"
ProvidersThrottleDuration = 5
###控制最大空闲连接数,使用net/,则不限制,如果看到'too many open files' 报错,建议修改系统层`ulimit`值
,Default: 200
maxIdleConnsPerHost = 60000
###如果设置为true,将使用后端服务SSL证书。注意:这禁用中间人***的检测只能用于后端网络安全。Default: false
#insecureSkipVerify = true
###配置默认监听端口
###配置服务默认监听端口,如果想改变监听端口,可以进行单独配置
defaultEntryPoints = [""= ":80"
compress = true
[entryPoints.= ":443"
compress = true
###ssl 证书配置
[entryPoints.= "/etc/traefik/ssl/ptengine-.crt"
keyFile = "/etc/traefik/ssl/ptengine-.key"
## 管理界面监听端口
[web]
address = ":8800"
##设置 REST API 为只读模式
ReadOnly = false
##启用详细信息输出,会在管理界面下方打印一些错误信息,提供参考;
[web.statistics]
RecentErrors = 10
## To enable Traefik to export internal metrics to Prometheus
##[web.metrics.prometheus]
### Buckets=[0.1,0.3,1.2,5.0]
### webui基本认证配置
### 密码可以编码在MD5、SHA1和BCrypt:您可以使用htpasswd生成
### 用户可以直接在toml指定文件,或间接通过引用一个外部文件;如果两个,两个并存,外部文件内容优先
### 测试配置实例
### 用户名/密码: 测试和test2:test2码:测试:测试和test2:test2
#[web.auth.basic]
#users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/", "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"]
### 指定配置文件
### usersFile = "/path/to/.htpasswd"
### 配置文件扩展,可以加载监视文件内容
[file]
##不支持监听目录,监听文件名要写死
filename = "/etc/traefik/config/rules.toml"
### 监视文件变更
watch = true
##发送请求重试
[retry]
##默认只向后端请求一次,不重试,
attempts = 3
```
使用上面的配置文件启动服务,会监听3个端口, 80:,443:,8800:api ,上面的配置文件我开启了debug 模式,实际生产环境不需要。服务启动后即可访问,api 管理界面查看一下基础信息。
#### 浏览器访问地址:使用curl 访问api 接口获取信息```/api/providers: GET providers/api/providers/{provider}: GET or PUT provider/api/providers/{provider}/backends: GET backends/api/providers/{provider}/backends/{backend}: GET a backend/api/providers/{provider}/backends/{backend}/servers: GET servers in a backend/api/providers/{provider}/backends/{backend}/servers/{server}: GET a server in a backend/api/providers/{provider}/frontends: GET frontends/api/providers/{provider}/frontends/{frontend}: GET a frontend/api/providers/{provider}/frontends/{frontend}/routes: GET routes in a frontend/api/providers/{provider}/frontends/{frontend}/routes/{route}: GET a route in a frontend```#### 查看API接口 信息,可以显示,```[root@trarfik-test ~]# curl -s "{ "pid": 23955, "uptime": "4m19.415827181s", "uptime_sec": 259.415827181, "time": "2017-04-21 10:38:44.925762492 +0800 CST", "unixtime": 1492742324, "status_code_count": {}, "total_status_code_count": { "304": 3, "404": 2, "429": 6 }, "count": 0, "total_count": 11, "total_response_time": "11.553372ms", "total_response_time_sec": 0.011553372000000001, "average_response_time": "1.050306ms", "average_response_time_sec": 0.001050306, "recent_errors": [ ............... ]}```#### 查看配置信息接口:```[root@trarfik-test ~]# curl -s " { "file": { "backends": { "test1": { "servers": { "server1": { "url": " "weight": 1 }, "server2": { "url": " "weight": 1 } }, "circuitBreaker": { "expression": "NetworkErrorRatio() > 0.5" }, "loadBalancer": { "method": "drr" }, "maxConn": { "amount": 10, "extractorFunc": "request.host" } } }, "frontends": { "test1": { "entryPoints": [ " " ], "backend": "test1", "routes": { "service1": { "rule": "Host:test.ptmind.com;" } }, "passHostHeader": true, "priority": 10 } } }}```### DOCKER 方式启动Docker 启动需要先准备一下配置文件,将配置文件挂载到容器内部,另外注意下,api 管理端口。docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik### 域名反向代理配置实例演示#### 监听域名test.ptmind.com pttest.ptmind.com#### 后端轮训站点:172.16.100.70:80 172.16.100.71:80#### 安全考虑:显示单个客户端请求链接数;后端不稳定停止转发轮训;配置信息如下:```[root@trarfik-test config]# more rules.toml ##后端配置#[backends]##发送请求重试#[retry]###默认只向后端请求一次,不重试,attempts = 3 [backends.testptmindcom] ##后端网络错误率>0.5 停止转发; [backends.testptmindcom.circuitbreaker] expression = "NetworkErrorRatio() > 0.5" ##轮训方式,method=drr(加权轮训调度)default:wrr(队列轮转算法) [backends.testptmindcom.LoadBalancer] method = "drr" ##安全限制,单个主机连接数大于指定值,会提示“max connections reached” [backends.testptmindcom.maxconn] amount = 10 extractorfunc = "request.host" ##第一台后端节点 [backends.testptmindcom.servers.server1] url = " weight = 1 ##第二台后端节点 [backends.testptmindcom.servers.server2] url = " weight = 1##前端配置[frontends] #定义一个接入点的名字 [frontends.testptmindcom] passHostHeader = true priority = 10 ##定义调用后端名称 backend = "testptmindcom" ##前端监听域名,可以监听多域名 [frontends.testptmindcom.routes.service] rule = "Host:test.ptmind.com,pttest.ptmind.com;"```#### 验证配置信息:[root@trarfik-test ~]# curl "file": { "backends": { "testptmindcom": { "servers": { "server1": { "url": " "weight": 1 }, "server2": { "url": " "weight": 1 } }, "circuitBreaker": { "expression": "NetworkErrorRatio() > 0.5" }, "loadBalancer": { "method": "drr" }, "maxConn": { "amount": 10, "extractorFunc": "request.host" } } }, "frontends": { "testptmindcom": { "entryPoints": [ " " ], "backend": "testptmindcom", "routes": { "service": { "rule": "Host:test.ptmind.com,pttest.ptmind.com;" } }, "passHostHeader": true, "priority": 10 } } }}```### 注意:1:traefik 可以热加载配置文件,不用每次都重启服务,在修改主配置文件选项或着修改域名监听端口时,需要重启服务;2:一组配置内, "backends": "frontends" 名称要统一; 3:注意观察实例中的名称配置;
### 参考文档
http://docs.traefik.io/toml/#retry-configuration
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~