首页 文章

如何在Docker中为SSL添加适当的标签?

提问于
浏览
1

我设法设置Traefik与我的docker swarm一起工作,并且对于HTTP请求它工作得很好 . 但是,我不知道如何为我的某些容器设置SSL . 我将使用letsencrypt生成证书 .

traefik.toml(部分)

defaultEntryPoints = ["https","http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]

[acme]
email = "acme@example.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
caServer = "https://acme-staging.api.letsencrypt.org/directory"

泊坞窗,compose.yml

version: '3'
services:
  web:
    ...
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.frontend.rule=Host:example.com,www.example.com"
        - "traefik.docker.network=public"
        - "traefik.frontend.entryPoints=http"
        - "traefik.backend=service_web"

在此配置中,我的应用程序永远不会到达SSL,因为我的容器没有SSL入口点设置 . 如果我将“traefik.frontend.entryPoints”更改为“https”,则会调用Letsencrypt(由于分段而导致LE givges错误,但此时对我来说无关紧要) .

我最大的问题是,我仍然不知道如何将traefik TOML配置转换为docker-compose标签 . 例如,Traefik docs解释了入口点,但我有许多服务,它们位于不同的域下 . 有些人有SSL,有些人没有SSL;因此,我希望能够仅使用docker-compose设置http和https entryPoints,http到https重定向等 .

此外,一旦我能够在docker-compose中设置入口点,我是否需要在traefik.toml中保留 [entryPoints] 块?

1 回答

  • 0

    AHOI!

    Requirements :Local-Persist Volume Plugin:https://github.com/CWSpear/local-persist(否则必须更改Volume Driver)必须预先创建Traefik网络:"docker network create proxy -d overlay"

    (1) Fire Up Traefik:

    version: "3"
    
    services:
      traefik:
        image: traefik
        #command: --consul --consul.endpoint=consul:8500
        #command: storeconfig --consul --consul.endpoint=consul:8500
        networks:
          - proxy
        ports:
          - 80:80
          - 443:443
          #- 8080:8080
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - traefikdata:/etc/traefik/
        deploy:
          #replicas: 3
          replicas: 1
          placement:
            constraints: [node.role == manager]
          update_config:
            parallelism: 1
            delay: 45s
            monitor: 15s
          restart_policy:
            condition: on-failure
            delay: 5s
            max_attempts: 10
            window: 60s
    
    volumes:
      traefikdata:
        driver: local-persist
        driver_opts:
          mountpoint: /data/docker/proxy
    
    networks:
      proxy:
        external: true
    

    重要说明:使用ACME并且您想要扩展Traefik(如此处3)时,您必须使用Consul或ETCD作为Config的“存储” . 如果您只使用一个Traefik实例,则不使用Consule或ETCD . 凭借正常的证书,ETCD和 Consul 永远不需要 .

    (2) Mount traefik.toml

    logLevel = "WARN"
    debug = false
    defaultEntryPoints = ["http", "https"]
    
    [entryPoints]
     [entryPoints.http]
     address = ":80"
     compress = false
       [entryPoints.http.redirect]
          entryPoint = "https"
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]
    
    #Letsencrypt
    [acme]
    email = "admin@berndklaus.at"
    storage = "traefik/acme/account"
    entryPoint = "https"
    onHostRule = true
    onDemand = true
    
    #[[acme.domains]]
    # main = "yourdomain.at"
    # sans = ["sub1.yourdomain.at", "www.yourdomain.at"]
    #[[acme.domains]]
    # main = "anotherdomain.at"
    
    
    #[web]
    #address = ":8080"
    
    [docker]
    domain = "docker.localhost"
    watch = true
    swarmmode = true
    

    未注释的部分不是强制性的

    (3) Start any Service

    version: '3'
    
    services:
      nginx:
        image: nginx
        deploy:
          labels:
            - "traefik.port=80"
            - "traefik.docker.network=proxy"
            - "traefik.frontend.rule=Host:sub1.yourdomain.at"
            - "traefik.backend=nginx"
            - "traefik.frontend.entryPoints=http,https"
          replicas: 1
        networks:
          proxy:
            aliases:
              - nginx
        volumes:
          - html:/usr/share/nginx/html
        environment:
          - NGINX_HOST=sub.yourdomain.at
          - NGINX_PORT=80
        #command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
    
    networks:
      proxy:
        external: true
      default:
        driver: overlay
    
    volumes:
      html:
        driver: local-persist
        driver_opts:
          mountpoint: /data/docker/html
    

    更多例子:https://github.com/Berndinox/compose-v3-collection

相关问题