【问题标题】:SSL passthrough with Traefik使用 Traefik 的 SSL 直通
【发布时间】:2018-09-15 17:15:35
【问题描述】:

我需要将 SSL 连接直接发送到后端,而不是在我的 Traefik 上解密。后端需要接收 https 请求。

我尝试了 traefik.frontend.passTLSCert=true 选项,但是当我访问我的 Web 应用程序时出现“404 页面未找到”错误,并且在 Traefik 容器上也出现此错误

traefik       | time="2018-09-16T10:47:41Z" level=error msg="Failed to create TLSClientConfig: no TLS provided"
traefik       | time="2018-09-16T10:47:41Z" level=error msg="Failed to create RoundTripper for frontend frontend-Host-dev-mydomain-com-0: no TLS provided"
traefik       | time="2018-09-16T10:47:41Z" level=error msg="Skipping frontend frontend-Host-dev-mydomain-com-0..."

您能提出任何解决方案吗?谢谢。

我使用的是 Traefik 1.6.6 版。

这是我的应用程序容器的 docker-compose.yml。

version: '3'
services:
  app:
    image: webdevops/php-nginx-dev:7.2
    networks:
      - proxy
    volumes:
      - ./:/app
      - ../traefik/ssl/*.mydomain.com.crt:/opt/docker/etc/nginx/ssl/server.crt
      - ../traefik/ssl/*.mydomain.com.key:/opt/docker/etc/nginx/ssl/server.key
    environment:
      - WEB_DOCUMENT_ROOT=/app
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:dev.mydomain.com
      - traefik.docker.network=proxy
      - traefik.port=443
networks:
  proxy:
    external: true

我的 Traefik 容器的 docker-compose.yml。

version: "3"
services:
  traefik:
    image: traefik
    container_name: traefik
    command:
      - --api
      - --docker
      - --docker.exposedbydefault=false
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./ssl:/sslcert
networks:
  proxy:
    external: true

最后,我的 traefik.toml 文件。

debug = true
logLevel = "ERROR"
defaultEntryPoints = ["http","https"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]
    [[entryPoints.https.tls.certificates]]
      certFile = "/sslcert/*.mydomain.com.crt"
      keyFile = "/sslcert/*.mydomain.com.key"

[retry]

【问题讨论】:

    标签: traefik


    【解决方案1】:

    traefik 1.0 的答案(过时)

    passTLSCert 将 TLS 客户端证书转发到后端,即客户端在 TLS 握手中发送证书以证明其身份。

    Traefik 是一个 HTTP 反向代理。要直接与后端建立 SSL 连接,您需要反向代理 TCP 而不是 HTTP,并且 traefik 不(还?)支持 tcp(但在 github 上有问题)。

    Traefik 不适合您的用例,有不同的选择,envoy 就是其中之一。

    【讨论】:

    • 感谢您的建议。我会尝试让特使看看它是否适合我的用例。
    • envoy 是否支持容器自动检测,如 Traefik?
    • envoy 需要通过 KV 存储/API 发现(抱歉,我不太了解)。
    • 无论如何,你的问题已经得到解答,你可能应该提出其他问题......
    • 谢谢。我会试试。谢谢你的提醒。有点跑题了:p
    【解决方案2】:

    Traefik 现在在其新的 2.0 版本中支持 TCP - 目前仍处于 alpha 阶段(2019 年 4 月)。

    见公关https://github.com/containous/traefik/pull/4587
    以及https://github.com/containous/traefik/releases/tag/v2.0.0-alpha1 的 v2.0.0-alpha1 的发行说明,其中显示了包含此 TCP 支持 PR

    因此一旦 2.0 发布(可能在 2-3 个月内),HTTPS 透传将成为可能。

    【讨论】:

      【解决方案3】:

      TCP 路由器的新直通已经可用:https://docs.traefik.io/routing/routers/#passthrough

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-27
        • 2020-11-30
        • 2019-07-13
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多