traefik使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了traefik使用相关的知识,希望对你有一定的参考价值。
参考技术A traefik( https://traefik.io/ ) 是一款开源的反向代理与负载均衡工具。非常适合与微服务系统结合,可以实现自动化动态配置。目前支持 Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API 等等后端模型。单文件部署,与系统无关,同时也提供小尺寸 Docker 镜像。
支持 Docker/Etcd 后端,天然连接我们的微服务集群。
内置 Web UI,管理相对方便。
自动配置 ACME(Let’s Encrypt) 证书功能。
性能尚可,我们也没有到压榨 LB 性能的阶段,易用性更重要。
Restful API 支持。
支持后端健康状态检查,根据状态自动配置。
支持动态加载配置文件和 graceful 重启。
支持 WebSocket 和 HTTP/2。
dockerswarm 中的使用:
创建网络
docker network create --driver=overlay traefik_net
部署traefik服务
docker service create \
--name traefik \
--constraint=node.role==manager \
--publish 80:80 --publish 8080:8080 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--network traefik_net \
traefik \
--docker \
--docker.swarmmode \
--docker.domain=traefik.dockerpaas.com \
--docker.watch \
--web
然后就可以访问界面了
部署应用服务测试
docker service create --name whoami --label traefik.port=8080 --constraint=node.role==manager --network traefik_net --label traefik.backend.loadbalancer.sticky=true emilevauge/whoami
上图Host:后面即为访问路径
只能在内网访问,外网的话要设置hosts 文件,或者配置nginx转发
traefik使用etcd存储配置--实例演示
traefik 使用etcd 作为后端配置存储配置实例功能测试目的:
1:Traefik 作为web服务,使用etd库作为配置统一存储空间,实现traefik服务可以方便的增删节点,解耦traefik服务启动后服务配置的问题。
2:Traefik 使用http验证方式申请ssl证书,即每配置一个域名让traefik 帮我们自动申请一个ssl证书.
测试步骤如下:
1:安装 traefik 1.7+
2:安装 etcd
3:安装 Etcdkeeper
4:配置 traefik 对接 etcd 库
演示环境
使用AWS云平台测试:
云主机一台、配置公网IP地址,开放80 443 8080 1180 端口
traefik v1.7+
web 服务
占用端口:
http 80
https 443
traefik 管理页面 8080
配置目录 /etc/traefik
Etcd:
高可用、强一致性的服务发现存储仓库,
作为traefik 后端配置存储
占用端口:
外部客户端连接 2379
etcd服务间通信 2380
Etcdkeeper:
Etcd web界面,支持v3的api
占用端口(可以自己设置):11800
Docker :
用于模拟快速启动一个后端web服务
镜像地址:containous/whoami
安装 traefik
占用端口:
http 80
https 443
traefik 管理页面 8080
配置目录 /etc/traefik
步骤如下:
wget https://github.com/containous/traefik/releases/download/v1.7.19/traefik_linux-amd64
mv traefik_linux-amd64 /usr/bin/traefik
chmod 755 /usr/bin/traefik
mkdir -p /etc/traefik
touch /etc/traefik/acme.json
chmod 755 /etc/traefik
chmod 600 /etc/traefik/acme.json
验证版本
[root@ip-10-3-1-119 traefik]# traefik version
Version: v1.7.19
Codename: maroilles
Go version: go1.12.12
Built: 2019-10-28_02:07:32PM
OS/Arch: linux/amd64
至此traefik配置完毕 !!!
启动后端Web服务,为后面的测试做准备
docker run -d -p 8880:80 containous/whoami
docker run -d -p 8890:80 containous/whoami
主配置文件
vi /etc/traefik/traefik.toml
#开启debug 模式,方便调试,Default,false
debug = true
#日志级别, "DEBUG", "INFO", "WARN", "ERROR", "FATAL", "PANIC"
logLevel = "INFO"
# 同时支持http和https
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
#启用压缩传输
compress = true
#http强制跳转https
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
#启用压缩传输
compress = true
[entryPoints.https.tls]
# 配置自动Let‘s Encrypt证书
[acme]
email = "kjh@mail.com"
##加密文件的存储位置
storage = "/etc/traefik/acme.json"
##证书类型,必需指向到一个443端口
entryPoint = "https"
#在新域名接受第一次https请求时申请证书
onDemand = false
#自动为acme.entryPoint下的新域名申请证书
onHostRule = true
[acme.httpChallenge]
#acme 验证方式支持 dns 、http、tls,本次使用https
#https://letsencrypt.org/zh-cn/docs/challenge-types/
entryPoint="http"
# 开启日志功能
#成功访问日志
[accessLog]
filePath = "/var/log/traefik/acceslog.txt"
format = "json"
#服务启动日志
[traefikLog]
filePath = "/var/log/traefik/traefik.log"
# 开启web管理端
[web]
address = ":8080"
#设置RESTAPI 为只读模式
readOnly = true
[web.auth.basic]
#test/test 登陆名/密码 可用openssl生成
#users = ["test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"]
#启用详细信息输出,会在管理界面下方打印一些错误信息,提供参考;
[web.statistics]
ecentErrors = 10
#开启api,修改服务配置,生产环境推荐添加加密认证
[api]
entryPoint = "traefik"
#开启管理面板
dashboard = true
debug = true
#使用文件方式管理配置
[file]
#在指定目录查找配置文件
directory = "/etc/traefik/rules"
#监视文件变更
watch = true
#使用etcd作为存储开启此配置,需要与文件管理配置同时开启,不然无法正常同步配置
[etcd]
#节点地址:端口
endpoint = "10.3.1.119:2379"
#强制使用v3版本api
useAPIV3 = true
#监视配置变更
watch = true
添加反向代理配置文件
/etc/traefik/rules
web域名为:kjh.pt1.jp
后端服务:
http://54.238.247.28:8880
http://10.3.1.119:8890
vi /etc/traefik/rules/kjh.pt1.toml
添加配置如下:
[frontends]
[frontends.ft01]
backend = "bk01"
[frontends.ft01.routes.rule_1]
rule = "Host:kjh.pt1.jp,kjh01.pt1.jp"
[backends]
[backends.bk01]
[backends.bk01.servers.server1]
url = "http://54.238.247.28:8880"
weight = 10
[backends.bk01.servers.server2]
url = "http://10.3.1.119:8890"
weight = 10
注意:上面配置的域名需要先在dns 做解析,指向traefik节点IP地址,不然无法正常申请ssl证书!!!
安装etcd
yum install etcd -y
vi /etc/etcd/etcd.conf
修改 ttp://localhost:2379 为 http://0.0.0.0:2379
#主要修改项如下:
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
#启动服务
systemctl daemon-reload
systemctl start etcd
systemctl status etcd
安装 etcdkeeper
wget https://github.com/evildecay/etcdkeeper/releases/download/v0.7.5/etcdkeeper-v0.7.5-linux_x86_64.zip
unzip etcdkeeper-v0.7.5-linux_x86_64.zip
cd etcdkeeper
chmod 755 etcdkeeper
#后台启动
./etcdkeeper -p 11800 &
浏览器访问:
如果可以浏览 etd 库内容为正常,但此时并无文件;
将traefik 配置将存储至etcd
同步traefik 配置至 etcd库
traefik storeconfig -c traefik.toml
[root@ip-10-3-1-119 traefik]# traefik storeconfig traefik.toml
........
0,"DebugLogGeneratedTemplate":false,"Directory":"/etc/traefik/rules","TraefikFile":""}
2020/01/05 21:19:22 Writing config to KV
验证
1:导入配置时返回信息无报错,返回 Writing config to KV;
2:访问etcd ui ,查看traefik配信息是否导入成功,显示目录大致如下;
/
etc
traefik
启动traefik 服务
执行traefik 命令即可,默认会到/etc/traefik/目录下寻找配置文件。
总验
访问traefik 节点IP地址:8080 可以看到 文件的配置和KV 库的配置,配置文件配置的域名可以正常访问。
效果图如下:
参考文档:
https://zhuanlan.zhihu.com/p/74042144
https://www.cnblogs.com/morang/p/10390055.html
https://ystyle.top/2017/12/08/traefik-getting-start/
https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/toml.html
https://my.oschina.net/guol/blog/2209678
以上是关于traefik使用的主要内容,如果未能解决你的问题,请参考以下文章