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 库 

 
 

演示环境 

主机环境需要外网ip(证书申请必须) 

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  

 

步骤如下: 

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" 

  

同时支持httphttps 

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 httptls,本次使用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:8890vi /etc/traefik/rules/test.pt1.toml 
添加配置如下: 
[frontends] 
  [frontends.ft01] 
  backend = "bk01" 
    [frontends.ft01.routes.rule_1] 
    rule = "Host:test.pt1.jp,test01.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 

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 库的配置,配置文件配置的域名可以正常访问。 
效果图如下: 

 

 

 

参考文档: 

 

posted @ 2020-08-19 14:16  巴黎斜塔  阅读(463)  评论(0编辑  收藏  举报