docker-compose下Traefik生成多子域名通配符自签名证书方案咨询
Traefik本地开发统一通配符自签名证书配置方案
核心实现逻辑
Traefik默认会为每个匹配不同Host规则的TLS路由器单独生成自签名证书,要实现多子域名共用同一张证书,只需要显式指定统一的证书域名范围,Traefik就会生成一张覆盖所有指定域名的证书,无需多次信任。
具体配置方案
方案1:全局默认证书配置(推荐)
直接在Traefik服务层面配置全局默认生成的证书域名范围,所有启用TLS的路由器都会复用这张证书,无需修改业务服务配置,修改后的完整docker-compose.yml如下:
version: '3' services: traefik: image: traefik:2.5 command: - --providers.docker - --entryPoints.http.address=:80 - --entryPoints.http.http.redirections.entryPoint.to=https - --entryPoints.http.http.redirections.entryPoint.scheme=https - --entryPoints.https.address=:443 labels: - traefik.enable=true # 配置全局默认生成证书的域名范围 - traefik.tls.stores.default.defaultgeneratedcert.domain.main=domain.localhost - traefik.tls.stores.default.defaultgeneratedcert.domain.sans=*.domain.localhost ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock front: image: traefik/whoami labels: - traefik.http.routers.front_router.rule=Host(`front.domain.localhost`) - traefik.http.routers.front_router.entrypoints=https - traefik.http.routers.front_router.tls=true api: image: traefik/whoami labels: - traefik.http.routers.api_router.rule=Host(`api.domain.localhost`) - traefik.http.routers.api_router.entrypoints=https - traefik.http.routers.api_router.tls=true
通配符*.domain.localhost已经覆盖所有同根域名的子服务,后续新增其他子域名服务不需要修改证书配置。
方案2:单个路由器绑定统一证书
如果不想全局生效,也可以给每个需要复用证书的路由器添加相同的TLS域名配置,以front服务为例,新增以下标签即可,api服务添加相同配置:
- traefik.http.routers.front_router.tls.domains[0].main=domain.localhost - traefik.http.routers.front_router.tls.domains[0].sans=*.domain.localhost
验证操作
- 执行
docker compose down -v清理旧容器和缓存,避免之前生成的独立证书干扰 - 执行
docker compose up -d启动服务 - 访问任意子域名导出当前证书,系统层面信任该证书后,所有同根域名的子服务都可以正常访问,不会重复触发证书风险提示。
内容的提问来源于stack exchange,提问作者homer
相关产品推荐
相关产品推荐

