web-dev-qa-db-ja.com

Traefik v2.1.4-静的ルートを作成して特定のホストとポートにリダイレクトする方法

私はTraefik v2.1.4の初心者です。 Dockerコンテナーで使用しています。静的ルートを設定しようとしています。 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-composeファイル:

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
3
Edson Junior

2つのプロバイダーを一緒に使用できます:fileおよびdocker

きみの docker-compose.yml

services:
 traefik:
 image:traefik:2.2.1 
 command:traefik --configFile =/etc/traefik/traefik.yml 
 ports:
-"80:80" 
-"8080:8080" 
ボリューム:
-./traefik.yml:/etc/traefik/traefik.yml
-./routes.yml:/etc/traefik/routes.yml
-/var/run/docker.sock:/var/run/docker.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

これらは単なる例であり、本番環境で直接使用しないでください。

1
Nick Roz

https://docs.traefik.io/v2.1/routing/providers/docker/#routers で)URLを指定するために言及されたdockerラベルはありません。ポートの代わりにURLを使用しようとしましたが、機能しません。
ファイルプロバイダー( 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を作成します。

もちろん、設定をコンテナーにbindmountしたり、設定を含む独自の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, ...
1
simohe