В Docker Swarm, как я могу подключиться к сервису через https, который только выставляет порт 8000, используя traefik? - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь добавить Маттермост к моему существующему року Gitlab Docker.Мы используем traefik в качестве обратного прокси-сервера, и в настоящее время он настроен на перенаправление всего http-трафика через порт 80 на https, который вызывает наш экземпляр gitlab.

У нас в стеке есть другие сервисы, такие как prometheus и grafana, которые имеют backends traefik и переходят по http на порт 8080.

Образ продукта Mattermost предоставляет только порт 8000. Я могу его получитьв роем по http через порт 8000:

mattermost:
    image: mattermost/mattermost-prod-app:5.9.0
    networks:
      - frontend
      - database
      - traefik
    volumes:
      - mm_config:/mattermost/config
      - mm_data:/mattermost/data
      - mm_logs:/mattermost/logs
      - mm_plugins:/mattermost/plugins
      - /etc/localtime:/etc/localtime:ro
    configs:
      - source: mm_config_json
        target: /mattermost/config/config.json
        mode: 0755
    deploy:
      mode: replicated
      replicas: 1
      labels:
        traefik.port: 8000
        traefik.backend.loadbalancer.swarm: "true"
        traefik.docker.network: gitlab_frontend
        traefik.frontend.rule: 'HostRegexp:{arbitrary:mattermost\\..*}'
        traefik.frontend.passHostHeader: "true"
        traefik.frontend.entryPoints: http
      restart_policy:
        condition: on-failure

и в моем файле config.json:

"SiteURL": "http://{MATTERMOST-URL}:8000",
        "WebsocketURL": "",
        "LicenseFileLocation": "",
        "ListenAddress": "0.0.0.0:8000"

И если я перейду на http://{MATTERMOST -URL}:8000 это подходит хорошо.Проблема в том, что мы пытаемся пройти аутентификацию с помощью нашего сервиса gitlab, который работает в https, и у него возникают проблемы с токенами из-за смешанных протоколов.Поэтому я хочу, чтобы Mattermost работал в https, чтобы облегчить проблему.

У меня есть подписанный сертификат и ключ для самого важного URL, но я не могу настроить traefik и главное для такого способа, чтобы я мог установить соединение httpsэто имеет значение вместо gitlab.

Я попытался создать специальную запись в файле traefik.toml: (httpsMM), а затем использовать эту конечную точку в моем самом важном сервисе, но это не работает.

defaultEntryPoints = ["http", "https"]
[entryPoints]
  [entryPoints.http]
  address = "0.0.0.0:80"
  [entryPoints.https]
  address = "0.0.0.0:443"
    [entryPoints.https.tls]
  [entryPoints.httpsMM]
  address = "0.0.0.0:8443"
    [entryPoints.httpsMM.tls]
      [[entryPoints.httpsMM.tls.certificates]]
      CertFile = "/etc/ssl/mattermost-dev.crt"
      KeyFile = "/etc/ssl/mattermost-dev.key"

И поскольку контейнер Mattermost предоставляет только порт 8000, я предполагаю, что мне нужно сохранить эту конфигурацию для прослушивания порта 8000, чтобы бэкэнд traefik находился на порту 8000.

Так что в основномЯ хочу, чтобы в Swarm различные службы могли маршрутизировать по-разному через https, а не весь https-трафик, идущий на службу 1.

Это моя служба traefik в Swarm:

traefik:
    image: traefik:1.7.9-alpine
    #1.3.1
    command:
      - --docker
      - --docker.swarmmode
      - --docker.watch
      - --web
      - --web.metrics.prometheus
      - --docker.domain={DOMAIN}
      - --logLevel=DEBUG
    ports:
      - 8080:80
      - 8443:8000  *not sure about this one- trying different options here
      - 9090:8080
    configs:
      - source: traefik_toml
        target: /etc/traefik/traefik.toml
        mode: 0644
      - source: mm_ssl_cert
        target: /etc/ssl/mattermost-dev.crt
        mode: 0444
      - source: mm_ssl_key
        target: /etc/ssl/mattermost-dev.key
        mode: 0444
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - traefik
      - frontend
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: any
      placement:
        constraints:
          - node.role == manager

Возможно ли это?И если так, пример будет оценен.Спасибо.

...