乐趣区

关于网关:Traefik为服务添加HTTPS支持

Traefik 为服务增加 HTTPS 反对

背景

  • 紧接着 Traefik 学习这篇文章,尝试应用 Let’s Encrypt 为 Traefik 的服务增加 HTTPS 反对

Let’s Encrypt

  • Let’s Encrypt 是一家收费、凋谢、自动化的证书颁发机构(CA),为公众的利益而运行。它是一项由 Internet Security Research Group(ISRG)提供的服务。以尽可能对用户敌对的形式收费提供为网站启用 HTTPS(SSL/TLS)所需的数字证书。

Traefik 的反对

  • 创立 acme.json 文件用来存储证书信息

    touch acme.json
    chmod 600 acme.json
    • 留神务必设置权限为 600,否则会报错
  • traefik Docker Compose 配置文件 traefik.yaml:

    version: '3'
    services:
      reverse-proxy:
        image: traefik
        restart: always
        ports:
          - "80:80"
          - "443:443"
        networks:
          - traefik
        volumes:
          - ./traefik.toml:/etc/traefik/traefik.toml
          - /var/run/docker.sock:/var/run/docker.sock
          - ./config/:/etc/traefik/config/:ro
          - ./acme.json:/letsencrypt/acme.json
        container_name: traefik
        # 网关健康检查
        healthcheck:
          test: ["CMD-SHELL", "wget -q --spider --proxy off localhost:8080/ping || exit 1"]
          interval: 3s
          timeout: 5s
    # 创立内部网卡 docker network create traefik
    networks:
      traefik:
        external: true
    • 要害局部是应用 volume 向容器引入acme.json
  • traefik 动态配置文件 traefik.toml

    # Let's Encrypt
    [certificatesResolvers.myresolver.acme]
      email = "example.com"
      storage="/letsencrypt/acme.json"
      [certificatesResolvers.myresolver.acme.tlsChallenge]
    • 这里应用 TLSChallenge 的形式申请,其余形式参考 traefik 的文档
  • 为服务增加 HTTPS 反对,这里还是以 Halo 博客为例

    version: '3.1'
    
    services:
    
      halo:
        image: halohub/halo
        container_name: halo
        restart: unless-stopped
        volumes:
          - /root/blog/halo:/root/.halo 
        labels:
          - traefik.http.routers.halo.rule=Host(`blog.demoli.xyz`)
          - traefik.http.routers.halo.tls=true
          - traefik.http.routers.halo.tls.certResolver=myresolver
          - traefik.http.routers.halo.entrypoints=https
          - traefik.http.services.halo.loadbalancer.server.port=8090
          - traefik.http.routers.halo-redirect-https.rule=Host(`blog.demoli.xyz`)
          - traefik.http.routers.halo-redirect-https.entrypoints=http
          - traefik.http.routers.halo-redirect-https.service=noop@file
          - traefik.http.routers.halo-redirect-https.middlewares=https-redirect@file
          - traefik.http.routers.halo-redirect-https.priority=100
    networks:
      default:
        external:
          name: traefik
    • 要害配置是 traefik.http.routers.halo.tls=truetraefik.http.routers.halo.tls.certResolver=myresolver

注意事项

  • Let’s Encrypt 证书的有效期是 90 天,Traefik 官网文档说能够反对证书的自动更新,然而查问材料的过程中,发现有博主说并没有自动更新,这里临时记录,若 90 天后呈现问题,则再尝试解决
  • 实际上应用 letsencrypt 申请失去 acem.json 格局的负数能够应用 traefik-certs-dumper 镜像转换为个别的 pem 格局,具体应用形式参考 Blog CDN 减速

参考

  • 对于 Let‘s Encrypt 的具体介绍
  • Let’s Encrypt 的运作形式 - Let’s Encrypt – 收费的 SSL/TLS 证书 https://letsencrypt.org › zh-cn › how-it-works
  • Traefik Let’s Encrypt
  • Docker-compose with let’s encrypt: TLS Challenge
  • 在 traefik 中为服务开明 https
  • 如何白 piao 一个收费的泛域名 SSL 证书 – 掘金
退出移动版