如何在Docker Swarm的Traefik中配置指向外部服务器的静态路由?
在Docker Swarm中用Traefik配置外部静态路由
当然可以!在Traefik里配置指向Docker Swarm外部服务的静态路由完全没问题,下面是一步步的实现方案:
1. 修改Traefik静态配置文件(traefik.toml)
你需要在配置文件中添加路由规则和对应的外部服务定义。直接在traefik.toml里加入以下内容:
# 定义路由规则 [http.routers] [http.routers.external-web-router] rule = "Host(`www.myweb.com`)" # 匹配你的域名请求 entryPoints = ["web"] # 对应你Traefik已配置的入口点(比如80端口的web入口) service = "external-web-service@file" # @file表示从静态文件加载服务 # 定义外部服务 [http.services] [http.services.external-web-service.loadBalancer] [[http.services.external-web-service.loadBalancer.servers]] url = "http://some.host.de:12345/" # 目标外部服务器地址
这里的关键是@file后缀,它告诉Traefik这个服务是来自静态配置文件,而不是自动发现的Docker服务。
2. 确认Traefik能访问外部服务器
因为Traefik运行在Docker Swarm集群里,首先要确保Swarm节点的网络能连通目标外部服务器。你可以进入Traefik容器测试:
docker exec -it <你的Traefik容器ID> curl http://some.host.de:12345/
如果返回外部服务器的内容,说明网络没问题;如果不通,得检查Swarm节点的防火墙规则、网络策略,或者目标服务器是否允许Traefik所在IP的访问。
3. 重启Traefik服务让配置生效
修改完配置后,需要强制更新Swarm里的Traefik服务,加载新配置:
docker service update --force <你的Traefik服务名称>
4. 验证路由是否正常工作
用curl模拟请求测试:
curl -H "Host: www.myweb.com" http://<Traefik节点IP>:<入口点端口>
如果返回外部服务器的页面内容,就说明配置成功了!
额外注意事项
- 如果目标服务器是HTTPS协议,把
url改成https://some.host.de:12345/即可,Traefik会自动处理HTTPS转发。 - 如果有多个外部服务器需要负载均衡,可以添加多个
[[servers]]条目,比如:[[http.services.external-web-service.loadBalancer.servers]] url = "http://some.host.de:12345/" [[http.services.external-web-service.loadBalancer.servers]] url = "http://another.host.de:12345/" - 如果你用了Traefik的TLS功能(比如配置了HTTPS入口点),记得在路由里加上
tls = true,并确保域名证书配置正确。
内容的提问来源于stack exchange,提问作者Ralph
相关产品推荐
相关产品推荐

