Traefik v2.1.4 - Как создать маршрут * stati c и перенаправить на указанный хост c и порт - PullRequest
1 голос
/ 26 февраля 2020

Я новичок в Traefik v2.1.4. Я использую в docker контейнере. Я пытаюсь настроить маршрут stati c. Я нашел несколько примеров, используя файл конфигурации 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 метки моего docker -композита.

My 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

1 Ответ

0 голосов
/ 09 марта 2020

Нет упомянутой метки docker для указания URL (в https://docs.traefik.io/v2.1/routing/providers/docker/#routers). И я попытался использовать 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 с вашим перенаправлением (как в вашем примере).

Конечно, вы также можете привязать конфигурацию в контейнер, или создать свой собственный образ 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, ...
...