内容简介:Traefik 与 nginx 一样,是一款反向代理的工具,至于使用他原因基于以下几点接下来讲一下它的基本功能以及文件配置
Traefik 与 nginx 一样,是一款反向代理的工具,至于使用他原因基于以下几点
- 漂亮的 dashboard 界面
- 可基于容器 label 进行配置
- 对 prometheus 和 k8s 的集成
- 尝试一下...
接下来讲一下它的基本功能以及文件配置
安装
下载二进制文件,指定配置文件,直接执行可以启动。
./traefik -c traefik.toml 复制代码
当然,你也可以通过 docker 启动,参考Traefik Get Started。
另外,如果需要使用 docker 启动,需要所有的服务都在一个 network 中,或者设置 traefik 的 network 为 host。
启动成功后,可以访问 localhost:8080
访问 Dashboard 页面。
问题
nginx -t
日志
[accessLog] # Sets the file path for the access log. If not specified, stdout will be used. # Intermediate directories are created if necessary. # # Optional # Default: os.Stdout # filePath = "./traefik-access.json" # Format is either "json" or "common". # # Optional # Default: "common" # format = "json" 复制代码
日志文件配置为 json
格式,方便调试。同时,强烈推荐 jq ,一款 linux 下解析 json 的工具。
以下是两个常用的命令,统计某个站点的请求以及响应时间。不过最好建议有专门的日志系统去处理,可以获取更完善的,更定制化的信息。另外,traefik 无法查看请求的 body。
# 筛选特定站点的请求 cat traefik-access.json | jq 'select(.["RequestHost"] == "shici.xiange.tech") | {RequestPath, RequestHost, DownstreamStatus, "request_User-Agent", OriginDuration}' # 筛选大于 300ms 的接口 cat traefik-access.json | jq 'select(.["RequestHost"] == "shici.xiange.tech" and .OriginDuration > 300000000) | {RequestPath, RequestHost, DownstreamStatus, "request_User-Agent", OriginDuration, DownstreamContentSize}' 复制代码
prometheus + grafana
jq
虽然可以分析日志,但是适合做日志的统计以及更细化的分析。
Prometheus 作为时序数据库,可以用来监控 traefik 的日志,支持更加灵活的查询,报警以及可视化。traefik 默认设置 prometheus 作为日志收集工具。另外可以使用 grafana 做为 prometheus 的可视化工具。
某个服务的平均响应时间
PromQL 为
sum(traefik_backend_request_duration_seconds_sum{backend="$backend"}) / sum(traefik_backend_requests_total{backend="$backend"}) * 1000 复制代码
某个服务响应时长大于 300ms 的请求的个数
TODO
统计请求数大于 10000 的服务
TODO
entryPoint
http
http 配置在 entryPoints
中,暴露出80端口。开启 gzip
压缩,使用 compress = true
来配置。
[entryPoints] [entryPoints.http] address = ":80" compress = true # 如果配置了此项,会使用 307 跳转到 https [entryPoints.http.redirect] entryPoint = "https" 复制代码
考虑到隐私以及安全,不对外公开的服务可以配置 Basic Auth
, Digest Auth
或者 WhiteList
,或者直接搭建 VPN,在内网内进行访问。如在我服务器上 xiange.tech
对外公开, xiange.me
只能通过VPN访问。
更多文档查看Traefik entrypoints。
https
使用 Let's Encrypt
安装证书后,在 entryPoints.https.tls.certificats
中指定证书位置。
[entryPoints] [entryPoints.https] address = ":443" compress = true [[entryPoints.https.tls.certificates]] certFile = "/etc/letsencrypt/live/xiange.tech/fullchain.pem" keyFile = "/etc/letsencrypt/live/xiange.tech/privkey.pem" 复制代码
另外,traefik 默认开启 http2。
other
另外,如果需要暴露其它的端口出去,如 consul 的 8500,类似于 nginx 的 listen 指令。
可以设置
[entryPoints] [entryPoints.consul] address = ":8500" 复制代码
Docker
traefik 会监听 docker.sock
,根据容器的 label 进行配置。容器的端口号需要暴露出来,但是不需要映射到 Host。因为 traefik 可以通过 docker.sock
找到 container 的 IP 地址以及端口号,无需使用 docker-proxy
转发到 Host。
version: '3' services: frontend: image: your-frontend-server-image labels: - "traefik.frontend.rule=Host:frontend.xiange.tech" api: image: your-api-server-image expose: 80 labels: # 同域配置, /api 走server - "traefik.frontend.rule=Host:frontend.xiange.tech;PathPrefix:/api" 复制代码
如何给一个服务配置多个域名
labels: - "traefik.prod.frontend.rule=Host:whoami.xiange.tech" - "traefik.another.frontend.rule=Host:who.xiange.tech" - "traefik.dev.frontend.rule=Host:whoami.xiange.me" 复制代码
如何把前端和后端配置在统一域名
services: frontend: image: your-frontend-server-image labels: - "traefik.frontend.rule=Host:frontend.xiange.tech" api: image: your-api-server-image expose: 80 labels: - "traefik.frontend.rule=Host:frontend.xiange.tech;PathPrefix:/api" 复制代码
部署时,如果项目代码有更新,如何当新服务 start 后,再去 drop 掉旧服务
TODO
负载均衡
如果使用docker,对一个容器进行扩展后,traefik 会自动做负载均衡,而 nginx 需要手动干预。
version: '3' services: whoami: image: emilevauge/whoami labels: - "traefik.frontend.rule=Host:whoami.xiange.tech" 复制代码
手动扩展为3个实例,可以自动实现负载均衡。实现效果可以直接访问whoami.xiange.tech,每次通过 WRR 策略分配到不同的容器处理,可以通过 Hostname 和 IP 字段看出。
docker-compose up whoami=3 复制代码
手动配置
当然,以上反向代理配置都是基于 docker,那如何像 nginx 一样配置呢。如把 consul.xiange.me
转发到 8500 这个端口。可以利用 traefik 的 file provider。
[file] [backends] # consul 是服务的名字,也可以叫张三,也可以叫李四 [backends.consul] [backends.consul.servers] [backends.consul.servers.website] url = "http://0.0.0.0:8500" weight = 1 [frontends] [frontends.consul] entryPoints = ["http"] backend = "consul" [frontends.consul.routes] # website 是路由的名字,也可以叫阿猫,也可以叫阿狗 [frontends.consul.routes.website] rule = "Host:consul.xiange.me" # 可以配置多个域名 [frontends.consul.routes.website2] rule = "Host:config.xiange.me" 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- InfluxDB 入手第一集
- 如何入手卷积神经网络
- iOS快速入手语音识别、评测
- 源码阅读:Masonry(一)——从使用入手
- 从源码入手分析SpringMVC的原理
- 分析开源项目源码,我们该如何入手分析?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
无处安放的互联网隐私
【美】茱莉亚·霍维兹 【美】杰拉米·斯科 / 中国人民大学出版社有限公司 / 2017-7-1 / CNY 55.00
在当今互联网时代,我们的隐私权已经受到了威胁,政府或企业可以追踪我们的电话,搜索引擎可以记录我们的在线浏览记录以及恒温器的设置以及更多信息。在当代,保卫隐私权不只是简单地描述出存在的问题或者警告人们隐私权已经丧失,隐私权的护卫者们提出了解决策略。他们密切关注商业实践、公共政策和技术设计以及人物,应该继续下去吗?条件就是:有问题,让我们找到解决之道。一起来看看 《无处安放的互联网隐私》 这本书的介绍吧!