使用Docker打造自己的云平台中我们有提到Traefik,并对其进行了简单的使用,后面在使用的过程中,需要使用https,所以也对traefik自动从Let’s Encrypt获取证书进行了验证与使用,所以在此记录下验证的过程。

目标

开启Traefik的https服务。

traefik console
traefik console

前期准备

Traefik

Traefik云原生边缘路由器,反向代理/负载均衡器,简单,动态,自动,快速,功能齐全,开源,经过生产验证,提供指标,并与各种主要集群技术集成……难怪它如此受欢迎!

架构
架构
WebUI
WebUI
Health
Health

新建stack编排文件

version: "3.4"
services:
  server:
    image: traefik:latest
    command:
      - "--api"
      - "--api.dashboard"
      - "--api.statistics"
      - "--entrypoints=Name:http Address::80 Redirect.EntryPoint:https"
      - "--entrypoints=Name:https Address::443 TLS"
      - "--defaultentrypoints=http,https"
      - "--acme"
      - "--acme.storage=/acme.json"
      - "--acme.entryPoint=https"
      - "--acme.httpChallenge.entryPoint=http"
      - "--acme.onHostRule=true"
      - "--acme.onDemand=false"
      - "--acme.email=example@mail.com"
      - "--docker"
      - "--docker.swarmMode"
      - "--docker.domain=example.com"
      - "--docker.watch"
    ports:
      - "80:80"
      - "443:443"
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints:
          - node.role == manager
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
      labels:
        - traefik.backend=traefik
        - traefik.frontend.rule=Host:monitor.example.com
        - traefik.docker.network=traefik_proxy
        - traefik.port=8080

networks:
  proxy:

如上,我们开启了traefik的apidockerdocker swarmhttps自动向Let's Encrypt申请证书功能,并且把它的web功能暴露到monitor.example.com,当我们部署完成后,就可以使用https://monitor.example.com进行访问。

部署traefik

部署其实很简单,为采用的stack模式部署的traefik,命令如下: ```bash $ ls traefik.yml

$ sudo docker stack deploy -c traefik.yml traefik

稍等一会儿就可以查看到我们已经完成了traefik的部署,并且使用traefik自动发现Docker上运行的应用时,以及是https了,查看证书详情,可以看到我们的证书使用的Let’s Encrypt申请。

证书详情
证书详情