Traefik+Docker环境下Consul KV创建前端规则不生效求助
你这情况我之前也碰到过——Traefik和Docker跑的好好的,加了Consul KV的前端规则却死活不生效,日志还显示从Consul拿的配置是空的{}。我帮你梳理几个排查和解决的关键点:
1. 先确认Consul KV的路径和值格式没问题
你设置的键路径:
/traefik/frontends/frontend1/backend→backend2/traefik/frontends/frontend1/routes/test_1/rule→Host:test.localhost
从格式上看是符合Traefik v1.x(你日志是2018年的,应该是这个版本)的要求的,但要注意值的前后有没有多余空格,比如Host: test.localhost(冒号后加空格)是不生效的,必须严格写成Host:test.localhost。
2. 检查Traefik的Consul Provider配置是否正确开启
Traefik不会自动识别Consul,你得在启动时明确配置并开启监听:
如果是用命令行启动Traefik,要加上这两个参数:
--consul.endpoint=你的Consul地址:8500 --consul.watch=true
要是用toml配置文件,就加这段:
[consul] endpoint = "你的Consul地址:8500" watch = true
重点是watch=true,没开这个的话Traefik只会在启动时读一次Consul,之后的KV修改根本不会同步。另外还要确认Traefik容器能ping通Consul,没有网络隔离的问题。
3. 验证Consul里的键是不是真的写进去了
别光看自己的写入命令,实际去Consul里查一下:
用Consul命令行工具跑这俩命令:
consul kv get /traefik/frontends/frontend1/backend consul kv get /traefik/frontends/frontend1/routes/test_1/rule
要是能返回你设置的backend2和Host:test.localhost,说明写入没问题;要是没返回,那就是你写入KV的操作有问题,得先把这步搞定。
4. 确认后端backend2已经存在
Traefik的前端规则依赖对应的后端存在——不管这个后端是通过Docker标签自动生成的,还是你自己在Consul KV里配置的。如果backend2压根儿没被Traefik识别到,那前端规则自然不会显示在UI里。
5. 手动触发配置重载试试
要是上面都没问题,那可能是Traefik没及时同步,手动发个重载请求:
curl -X POST http://你的TraefikIP:8080/api/providers/consul/reload
之后再看日志和Traefik UI,大概率就能看到你的新规则了。
内容的提问来源于stack exchange,提问作者xavren

