Как обслуживать два бэкэнда провайдера с помощью traefik под одним и тем же URL-адресом домена https - PullRequest
0 голосов
/ 18 декабря 2018

[С помощью полезного комментария Siyu я мог решить проблемы, кроме того, мне нужно было установить точку входа в метках - я добавил свой исправленный docker-compose.yaml, и это было все, что мне нужно было исправить]

В настоящее время я перенастроил свою рабочую станцию ​​Synology для обработки трафика https с помощью traefik.

Я хочу обслуживать док-контейнеры с traefik и по-прежнему предоставлять веб-интерфейс рабочей станции Synology через http (используя traefik также в качестве оффлоадера SSL).Теперь у Traefik есть проблема с обработкой двух провайдеров бэкэндов, один из которых является «оригинальным» веб-сервером Synology, а другой - контейнером докеров, которые приходят и уходят.Текущая настройка работает для предоставления «test.com» (веб-интерфейс Synology DSM).Но если попытаться получить доступ к контейнеру с помощью «/ dashboard», он просто выдаст мне 404.

Как это можно настроить, чтобы оба бэкэнда (докер + веб-сервер вне докера) былиобслуживается?

Точки данных

  • Интерфейс док-станции распознан и
  • метки (* см. ниже) считываются из traefik (можетбыть замеченным в журналах)
  • Synology nginx запускается вне докера (не в качестве контейнера!)
  • Вся рабочая станция Synology работает в среде IPv4 / IPv6 (оба)
  • Synology nginx был изменен и не обслуживает стандартный порт http / https (где он перенаправляет только на порт 5000/5001, как я вижу в конфигурации nginx)

Предполагаемая настройка, которую следует обслуживать

Обратите внимание, что исходная синология является доменом перехвата всех (/ *)

+-----------------------------------------------------------------------
| Synology Workstation                                                
|                                                                     
|           +--------------------------------------------------------+
|           |  Docker                                                | 
|           |           +---------+          +-------------------+   |
|-->HTTPS-->|-->HTTPS-->| Traefik |-->HTTP-->| test.com/dashboard|   |
| 443:443   |           |         |          |                   |   |
|           |           +---------+--+       +-------------------+   |
|           |                |       |                               |
|           |                |       |         +------------------+  |
|           |                |       +--HTTP-->| test.com/stats   |  |
|           |                |                 +-------------------  |
|           |                |                                       |
|           +----------------|----------------------------------------
|                            |         +-------------------+
|                            +--HTTP-->|test.com/*         |
|                                      |(nginx of synology)|
|                                      +-------------------+
+--------------------------------------------------------------------

Файл traefik.toml выглядит следующим образом:

debug=true
logLevel="DEBUG"

[traefikLog]
filePath = "/etc/traefik/traefik.log"

[accessLog]
filePath = "/etc/traefik/access.log"

defaultEntryPoints = ["http", "https"]

[entryPoints]

[entryPoints.http]
address    = ":80"
[entryPoints.http.redirect]
entryPoint = "https"

[entryPoints.https]
address    = ":443"

[entryPoints.https.tls]
[[entryPoints.https.tls.certificates]]
certFile   = "/etc/pki/tls/certs/test.com.crt"
keyFile    = "/etc/pki/tls/private/test.com.key"

[backends]
[backends.wbackend]
[backends.wbackend.servers.server]
url        = "http://workstation.test.com:5000"
#weight     = 10

[frontends]
[frontends.workstation]
backend        = "wbackend"
passHostHeader = true
entrypoints    = ["https"]
[frontends.workstation.routes.route1]
rule       = "Host:workstation.test.com"

# You MUST ADD file otherwise traefik does not parse the  fronted rules
[file]

[docker]
endpoint    = "unix:///var/run/docker.sock"

Фрагмент Docker-compose (см. Метки, которые отображают домен).

---
version: '2'


services:
  traefik:
    # Check latest version: https://hub.docker.com/r/library/traefik/tags/
    image:          traefik:1.7.6
    restart:        unless-stopped
    container_name: traefik
    mem_limit:      300m
    #network_mode:   host

    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /volume1/container/traefik/etc/pki/tls/certs/workstation.test.com.crt:/etc/pki/tls/certs/workstation.test.com.crt
    - /volume1/container/traefik/etc/pki/tls/private/workstation.test.com.key:/etc/pki/tls/private/workstation.test.com.key
    - /volume1/container/traefik/etc/traefik:/etc/traefik

    ports:
    - "80:80"
    - "443:443"

    labels:
    - traefik.stat.frontend.rule=Host:workstation.test.com;Path:/dashboard
    - traefik.stat.backend=traefik
    - traefik.stat.frontend.entryPoints=https
    - traefik.stat.frontend.rule=Host:workstation.test.com;PathPrefixStrip:/dashboard
    - traefik.stat.port=8080

1 Ответ

0 голосов
/ 18 декабря 2018

Несколько проблем с вашей конфигурацией:

  • ваш том не передан в
  • API не включен
  • отсутствует бэкэнд в метках
  • следует использовать PathPrefixStrip

Попробуйте

volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /path/to/traefik.toml:/etc/traefik/traefik.toml
command: --api 
ports:
- "80:80"
- "443:443"
- "8080:8080" // help you debug
labels:
- traefik.backend=traefik
- "traefik.frontend.rule=PathPrefixStrip:/dashboard/;Host:test.io"
- traefik.port=8080
...