Traefik v2.1.4-如何创建静态路由并重定向到特定的主机和端口



我是Traefik v2.1.4的初学者。我在码头集装箱里用。我正在尝试设置一个静态路由。我发现了一些使用toml配置文件的示例。

[providers]
[providers.file]
[http]
[http.routers]
[http.routers.netdata]
rule = "Host(`netdata.my-domain.com`)"
service = "netdata"
entrypoint=["http"]
[http.services]
[http.services.netdata.loadbalancer]
[[http.services.netdata.loadbalancer.servers]]
url = "https://192.168.0.2:19999"

根据这个例子,我想把它转换成我的docker compose的docker标签。

我的docker撰写文件:

version: "3.7"
services:
traefik:
image: traefik:v2.1.4
container_name: traefik
restart: always
command:
- "--log.level=DEBUG"
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsresolver.acme.tlschallenge=true"
- "--certificatesresolvers.letsresolver.acme.email=my-email@domain.com"
- "--certificatesresolvers.letsresolver.acme.storage=/letsencrypt/acme.json"
labels:
- "traefik.enable=true"
# middleware redirect
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
# global redirect to https
- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https" 
# dashboard
- "traefik.http.routers.traefik.rule=Host(`traefik.my-domain.com`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=admin"
- "traefik.http.routers.traefik.tls.certresolver=letsresolver"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.middlewares.admin.basicauth.users=user:hash-passwordXXX"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"

networks:
default:
external:
name: network

可以同时使用两个提供程序:filedocker

您的docker-compose.yml:

服务:traefik:图片:traefik:2.2.1命令:traefik--configFile=/etc/traefik/traefik.yml端口:-";80:80〃;-";8080:8080";卷:-/traefik.yml:/etc/traefik/traefik.yml-/routes.yml:/etc/traefik/routes.yml-/var/run/doker.sock:/var/run/doker.sock#您的服务到此为止

您的traefik.yml:

api:
dashboard: true
insecure: true
entryPoints:
web:
address: :80
providers:
docker: {}
file:
filename: /etc/traefik/routes.yml
watch: true

您的routes.yml:

http:
routers:
hello:
rule: PathPrefix(`/hello`)
service: hello@docker
rule: PathPrefix(`/world`)"
service: world@docker

这些只是示例,当然不要直接在生产环境中使用。

没有提到指定url的docker标签(https://docs.traefik.io/v2.1/routing/providers/docker/#routers)。我试着用url代替port,但它不起作用
所以我建议使用文件提供程序(https://docs.traefik.io/v2.1/providers/file/)。

实施建议:

使用更新您的配置

services:
...
traefik:
...
command:
...
- "--providers.file.directory=/path/to/dynamic/conf"
config:
- source: redirect.toml
target: /path/to/dynamic/conf/redirect.toml
...
...
configs:
redirect.toml:
file: redirect.toml

并使用重定向创建redirect.toml(如您的示例中所示(。

当然,您也可以将配置绑定到容器中,或者创建自己的包含配置的traefik映像,或者。。。


如果你想使用标签,你可以启动一个使用socat 重定向的服务

services:
...
netdata:
image: alpine/socat
command: tcp-listen:80,fork,reuseaddr tcp-connect:192.168.0.2:19999
deploy:
labels:
traefik.enable: "true"
traefik.http.routers.netdata.rule: Host(`netdata.my-domain.com`)
traefik.http.services.netdata_srv.loadbalancer.server.port: 80
# hm, and probably tell to forward as https, ...

最新更新