traefik - привязки нескольких портов для одного хоста V2 - PullRequest
0 голосов
/ 20 января 2020

Я не могу понять, как получить простой сервис, доступный как по http, так и по https на localhost. Пока это мои настройки, и я использую traefik V2.xxx.

Я хочу иметь возможность заходить на этот сайт с использованием обоих протоколов https / http (по причинам только на компьютерах разработчиков). Https работает просто отлично, а http - нет. Какие метки мне нужно добавить / удалить / изменить?

http://whoami.localhost: 8000 /
https://whoami.localhost: 8443 /

docker -compose.yml

version: "3.7"

services:

  whoami:
    image: containous/whoami
    labels:
      - traefik.enable=true
      - traefik.http.routers.whoami.rule=Host(`whoami.localhost`)
      - traefik.http.routers.whoami.entrypoints=web,web-secure
      - traefik.http.routers.whoami.tls=true
      - traefik.protocol=http,https

  reverse-proxy:
    depends_on:
      - whoami
    image: traefik:v2.1.1
    ports:
      - 8000:80
      - 8443:443
      - 8001:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik:/etc/traefik:ro

traefik / traefik.toml

[log]
  level = "DEBUG"

[accessLog]
  filePath = "/logs/access.log"
  bufferingSize = 20

[docker]
  exposedbydefault = false

[api]
  dashboard = true
  insecure = true

[providers]
  [providers.file]
    filename = "/etc/traefik/traefik.toml"
    watch = true

  [providers.docker]
    exposedbydefault = false

[[tls.certificates]]
  certFile = "/etc/traefik/certs/localhost-cert.pem"
  keyFile = "/etc/traefik/certs/localhost-key.pem"

[entryPoints]
  [entryPoints.web]
    address = ":80"

  [entryPoints.web-secure]
    address = ":443"

C: \ Windows \ System32 \ drivers \ etc \ hosts

127.0.0.1 whoami.localhost

1 Ответ

0 голосов
/ 21 января 2020

Наконец-то все заработало. Документы traefik прямо в области c находятся по определенным темам, и, учитывая недавний крупный выпуск 2.0, примеров пока не так много.

Вот мой рабочий docker -композит. yml-файл, в котором приложение теперь отображается с использованием одного хоста "whomai.localhost" и на обоих портах 8000 (http) и 8443 (https).

version: "3.7"

services:

  whoami:
    image: containous/whoami
    labels:
      - traefik.enable=true
      - traefik.http.routers.whoami-http.rule=Host(`whoami.localhost`)
      - traefik.http.routers.whoami-http.entrypoints=web
      - traefik.http.routers.whoami-http.service=whoami-http-service
      - traefik.http.services.whoami-http-service.loadbalancer.server.port=80

      - traefik.http.routers.whoami-https.rule=Host(`whoami.localhost`)
      - traefik.http.routers.whoami-https.entrypoints=web-secure
      - traefik.http.routers.whoami-https.service=whoami-https-service
      - traefik.http.services.whoami-https-service.loadbalancer.server.port=80
      - traefik.http.routers.whoami-https.tls=true

  reverse-proxy:
    depends_on:
      - whoami
    image: traefik:v2.1.1
    ports:
      - 8000:80
      - 8443:443
      - 8001:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik:/etc/traefik:ro

Маршрутизаторы и службы в trafik 2 .x может быть создан динамически, используя любое соглашение об именах, которое вы хотите, используя docker метки. В этой настройке я просто назвал их whoami-http и whoami-https для маршрутизаторов и whoami-http-service и whoami-https-service для сервисов. Поскольку я динамически создаю свои собственные маршрутизаторы / службы вместо использования значений по умолчанию, балансировщику нагрузки для каждой службы необходимо явно указать порт сервера для целевого приложения. Поскольку приложение whoami предоставляет только сам порт 80, а TLS завершается на traefik, это определяется как порт 80 для служб http и https.

Все указанные выше метки являются обязательными и не могут быть опущены для этого типа настраиваемый маршрутизатор / настройка службы.

traefik dashboard

Я использую mkcert на Windows 10 для действительных локальных сертификатов на случай, если вы задавались вопросом.

mkcert -install

mkcert -key-file traefik\certs\localhost-key.pem -cert-file traefik\certs\localhost-cert.pem whoami.localhost localhost 127.0.0.1 ::1
...