Есть ли способ позволить некоторым сервисам traefik самостоятельно управлять своими сертификатами tls? - PullRequest
1 голос
/ 29 января 2020

Я попытаюсь настроить traefik для чего-то подобного:

1) server.example.com -> traefik -> httpChallengeToLetsEncrypt

2) client -> traefik ( passthrough tls) -> server.example.com (с давайте зашифруем)

Примечание: traefik получает свои запросы на уровне example.com

Что происходит:

1 ) Работает корректно только в том случае, если traefik не управляет, давайте сами зашифруем сертификаты (в противном случае он не передает ни одного запроса, у которого pathPrefix начинается с ".well-known / acme-challenge": - \)

2) Не работает с конфигурацией для маршрутизатора tcp, как это:

tcp:
  routers:
    example:
      entryPoints:
        - web-secure
      rule: "HostSNI(`server.example.com`)"
      service: example
      tls:
        passthrough: true

  services:
    example:
      loadBalancer:
        servers:
          - url: "https://192.168.0.1:443/"

Как бы вы позволили одной или нескольким службам самим управлять своими сертификатами давайте шифровать? И возможно ли это сделать в то же время, когда traefik также управляет шифрованием сертификатов давайте или проблема, упомянутая в пункте 1, является ли она повторной?

С уважением,

jm c

1 Ответ

1 голос
/ 29 января 2020

используйте tls.passthrough=true и tcp маршрутизатор вместо http

ниже - полностью рабочий пример, где apache отвечает за свои собственные сертификаты.

traefik никогда не касается их

version: "3"

services:
    traefik:
        image: traefik
        command:
            - --api.insecure=true
            - --providers.docker=true
        ports:
            - "80:80"
            - "443:443"
            - "8080:8080"
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        labels:
            - traefik.http.routers.api.rule=Host(`traefik.docker.local`)
            - traefik.http.routers.api.service=api@internal

    whoami:
        image: containous/whoami
        labels:
            - traefik.http.routers.whoami.rule=Host(`whoami.docker.local`)
            - traefik.http.routers.whoami.service=whoami@docker
            - traefik.http.services.whoami.loadbalancer.server.port=80

    apache:
        build: php-apache
        depends_on: [traefik]
        env_file: ./php-apache/env
        volumes:
            - "./php-apache/cert/haproxy/:/etc/ssl/haproxy/"
            - "./php-apache/cert/private/:/etc/ssl/private/"
            - "./php-apache/cert/trusted/:/usr/local/share/ca-certificates/"
            - "./php-apache/conf/:/etc/apache2/conf-enabled/"
            - "./php-apache/log/:/var/log/apache2/"
            - "./php-apache/sites/available/:/etc/apache2/sites-available/"
            - "./php-apache/sites/enabled/:/etc/apache2/sites-enabled/"
            - "./php-apache/www/:/var/www/"
        labels:
            - "traefik.http.routers.apache.entrypoints=http"
            - "traefik.http.routers.apache.priority=1"
            - "traefik.http.routers.apache.rule=HostRegexp(`{catchall:.*}`)"
            - "traefik.http.routers.apache.service=apache@docker"
            - "traefik.http.services.apache.loadbalancer.server.port=80"

            - "traefik.tcp.routers.apache.entrypoints=https"
            - "traefik.tcp.routers.apache.rule=HostSNI(`*`)"
            - "traefik.tcp.routers.apache.service=apache@docker"
            - "traefik.tcp.routers.apache.tls.passthrough=true"
            - "traefik.tcp.services.apache.loadbalancer.server.port=443"
...