You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik serversTransport配置不生效:TLS证书验证异常问题

问题分析与解决方案

核心问题是你同时通过traefik.yml手动定义了core_api/auth_api服务,又通过Docker Provider的容器labels生成了同名服务,导致traefik.yml里的服务配置被忽略,Docker自动生成的服务使用了默认的serversTransport,所以你设置的insecureSkipVerify: true和客户端证书根本没生效,Traefik还是在用默认规则验证后端证书。

另外你的配置里还有几个明显错误:

  • Traefik容器command里重复定义了--entrypoints.web.address,同一entrypoint不能重复声明
  • Traefik容器labels里的gateway服务配置完全多余,和你的后端服务无关
  • traefik.yml里的entryPoints.website和compose command里的web entrypoint冲突

具体修复步骤

1. 修正docker-compose.yml配置

调整Traefik服务的command和labels

删掉重复的entrypoint定义和多余的服务配置:

services:
  traefik:
    image: traefik:v3.1
    command:
      - "--api.dashboard=true"
      # 移除重复的entrypoints.web和providers.docker配置(traefik.yml中已声明)
    secrets:
      - ca_pem
      - gateway_cert
      - gateway_cert_key
    ports:
      - "9091:9091"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./traefik.yml:/etc/traefik/traefik.yml"
    # 删除多余的gateway服务labels

给core_api和auth_api添加serversTransport关联标签

在两个后端服务的labels里新增一行,让Docker生成的服务关联你定义的gatewayTransport:

# core_api的labels新增
- "traefik.http.services.core_api.loadbalancer.serversTransport=gatewayTransport"

# auth_api的labels新增
- "traefik.http.services.auth_api.loadbalancer.serversTransport=gatewayTransport"

2. 修正traefik.yml配置

删掉手动定义的services块(Docker Provider会自动根据容器labels生成服务),保留serversTransports核心配置即可:

api:
  dashboard: true
  insecure: true

log:
  level: DEBUG
  filePath: "/var/log/traefik.log"

accessLog:
  filePath: "/var/log/access.log"

entryPoints:
  website:
    address: ":9091"

http:
  serversTransports:
    gatewayTransport:
      insecureSkipVerify: true
      rootCAs:
        - /run/secrets/ca_pem
      certificates:
        certFile: /run/secrets/gateway_cert
        keyFile: /run/secrets/gateway_cert_key

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

3. 验证逻辑

修复后,Docker Provider会根据容器labels生成core_api和auth_api服务,并且明确指定使用你配置的gatewayTransport,这样:

  • Traefik会使用你提供的客户端证书访问后端
  • 同时会跳过证书验证(或使用你指定的rootCAs验证)
  • 解决之前的x509证书验证错误

为什么curl能访问?因为你手动指定了CA证书、客户端证书和密钥,而之前Traefik根本没用到这些配置,现在关联serversTransport后就和curl的逻辑一致了。

内容的提问来源于stack exchange,提问作者Rinaldi Segecin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:34:54