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里的webentrypoint冲突
具体修复步骤
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
相关产品推荐
相关产品推荐

