标签: traefik

如何让traefik从docker内部重定向到特定的非docker端口

首先,如果我没有使用正确的条款来提出这个问题,我很抱歉,但我没有达到术语.

我有一个在docker容器中运行的traefik,并使用PathPrefix选项提供一些服务,例如,www.myserver.com/wordpress重定向到运行wordpress的docker容器.

但是如何让它重定向到docker容器外?具体来说,如何让www.myserver.com重定向到我的机器中的端口8080,以便为我在主机操作系统(而不是在docker容器中)中运行的服务提供服务?

这是我的traefik.toml:

logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]

[entryPoints]
    [entryPoints.http]
        address = ":80"
        compress = false
        [entryPoints.http.redirect]
            entryPoint = "https"
    [entryPoints.https]
        address = ":443"
        [entryPoints.https.tls]

[acme]
email = "mymail@mail.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
#onDemand = true
[[acme.domains]]
    main = "www.myserver.com"

[web]
address = ":8888"

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "www.myserver.com"
watch = true
exposedbydefault = false
Run Code Online (Sandbox Code Playgroud)

而我docker-compose.yml的traefik容器:

version: "2"

services:
  traefik:
    image: traefik
    network_mode: "host"
    ports:
      - …
Run Code Online (Sandbox Code Playgroud)

networking redirect traefik

10
推荐指数
2
解决办法
5995
查看次数

跟踪traefik代理的Gitlab'Gateway Timeout'

所以我正在尝试使用traefik作为反向代理在docker swarm上建立一个gitlab-ce实例.

这是我的代理堆栈;

version: '3'

services:
  traefik:
    image: traefik:alpine
    command: --entryPoints="Name:http Address::80 Redirect.EntryPoint:https" --entryPoints="Name:https Address::443 TLS" --defaultentrypoints="http,https" --acme --acme.acmelogging="true" --acme.email="freelyformd@gmail.com" --acme.entrypoint="https" --acme.storage="acme.json" --acme.onhostrule="true" --docker --docker.swarmmode --docker.domain="mydomain.com" --docker.watch --web
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - traefik-net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints:
          - node.role == manager

networks:
  traefik-net:
    external: true
Run Code Online (Sandbox Code Playgroud)

还有我的gitlab堆栈

version: '3'

services:
  omnibus:
    image: 'gitlab/gitlab-ce:latest'
    hostname: 'lab.mydomain.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://lab.mydomain.com'
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        registry_external_url 'https://registry.mydomain.com'
        registry_nginx['listen_port'] = 80
        registry_nginx['listen_https'] = false …
Run Code Online (Sandbox Code Playgroud)

gitlab docker-swarm traefik

10
推荐指数
1
解决办法
3312
查看次数

为Traefik定义主机和路径前端规则

我正在尝试使用Traefik在我的Docker Swarm模式集群中部署代理多个应用程序.

我已经得到它,以便它代理一个命名的主机,但我希望它代理一个命名的主机和路径,但我无法计算出我需要使用的标签.

这是docker service我使用的命令:

 docker service create \
                       \
    --label "traefik.port=9000" \
    --label "traefik.docker.network=traefik-net" \
    --label "traefik.frontend.rule=Host:`hostname -f`" \
    --label="traefik.backend=portainer" \
                                        \
    --constraint "node.role == manager" \
    -p 9000:9000 \
    --mount "type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock" \
    --name portainer \
    portainer/portainer
Run Code Online (Sandbox Code Playgroud)

如果主机是,dummy.localhost那么我可以打开portainer应用程序http://dummy.localhost.但是我想修改它以便我必须使用http://dummy.localhost/portainer.

我已经看到有一些方法可以在为Traefik使用toml文件时执行此操作,但我在部署的docker服务上使用监视模式和标签.

如何在标签中组合多个前端规则,以便可以在主机名和路径上代理此(和任何其他)应用程序?

traefik

9
推荐指数
1
解决办法
1万
查看次数

端口443上的Traefik HTTPS后端发生内部服务器错误

使用docker,我尝试使用HTTPS端口443设置traefik后端,因此traefik容器和app容器(apache 2.4)之间的通信将被加密.

我有一个Internal Server Error如果我激活traefik.protocol=httpstraefik.port=443在我的docker容器上.此问题已在此处记录:https: //github.com/containous/traefik/issues/2770#issuecomment-374926137

例如,完全相同的设置非常适合jwidler/nginx-proxy(在docker hub上可用的反向代理).容器上的证书(内部运行的apache 2.4)是真正签名的(我将它们安装在traefik和我的容器的apache上).如果我用https://直接请求我的apache容器...所有浏览器都说证书有效(绿色).所以容器中的证书都可以.

问题很简单:使用InsecureSkipVerify = true不安全.是否有生产能够使工作与标签的容器后端的任何解决方案traefik.protocol=https,并traefik.port=443通过使用由众所周知的机构颁发的证书(在我的情况甘地或魔岛).

谢谢.

traefik

9
推荐指数
1
解决办法
8040
查看次数

Traefik>某些容器的"Bad gateway"(错误502)

我遇到了一些使用traefik和docker的问题,我不知道为什么.

对于某些容器,它就像魅力和其他容器一样,当我尝试访问这些容器时出错:错误的网关(错误502).

这是我的traefik.toml:

# Service logs (here debug mode)
debug = true
logLevel = "DEBUG"

defaultEntryPoints = ["http", "https"]

# Access log
filePath = "/var/log/traefik/access.log"
format = "common"

################################################################
# Web configuration backend
################################################################
[web]
address = ":8080"

################################################################
# Entry-points configuration
################################################################
[entryPoints]
  [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"
  [entryPoints.https]
    address = ":443"
    [entryPoints.https.tls]

################################################################
# Docker configuration backend
################################################################
[docker]
domain = "domain.tld"
watch = true
exposedbydefault = false
endpoint = "unix:///var/run/docker.sock"

################################################################
# Let's encrypt …
Run Code Online (Sandbox Code Playgroud)

docker bad-gateway traefik

9
推荐指数
1
解决办法
1万
查看次数

推荐用于 Traefik 的 TLS 密码

我正在寻找 Traefik 中 SSL/TLS 的推荐配置。我已经设置minVersion = "VersionTLS12"避免使用较弱的旧版本,并在 Go 中找到了支持的密码。与SSLLabs的建议进行交叉检查后,我得出了以下顺序(顺序很重要):

cipherSuites = [
  "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
  "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
  "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
  "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
  "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
  "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
  "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
  "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
  "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
  "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
]
Run Code Online (Sandbox Code Playgroud)

[更新] 后来与 Mozilla 的SSL Config Generator交叉检查,删除 SHA-1 并使用建议的顺序:

cipherSuites = [
  "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
  "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
  "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
  "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
  "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
  "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
  "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
  "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
]
Run Code Online (Sandbox Code Playgroud)

那有意义吗?我想避免使用弱密码,但为了兼容性而包含尽可能多的强密码。

encryption ssl tls1.2 traefik

9
推荐指数
3
解决办法
5370
查看次数

自托管Gitlab注册表:localhost:5000拒绝连接

我正在使用traefik作为反向代理(以及管理letsencrypt证书),我正在运行一个自托管的gitlab实例.GitLab图像是一个单一的,包含所有服务,两个服务(Registry和Git)需要在同一个容器中提供.

通过下面显示的配置,gitlab运行良好.

docker login registry.domain.com 也在工作.

但导航到gitlab前端的注册表给了我500错误.

gitlab日志:

Errno::EADDRNOTAVAIL (Failed to open TCP connection to localhost:5000 (Cannot assign requested address - connect(2) for "localhost" port 5000)):
Run Code Online (Sandbox Code Playgroud)

在我读到的文档中,端口5000是gitlab注册表的默认值.

所以我进入gitlab容器并尝试调用localhost:5000:

$ docker exec -it gitlab /bin/bash

root@gitlab:/# curl -v http://localhost:5000
* Rebuilt URL to: http://localhost:5000/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 5000 failed: Connection refused
*   Trying ::1...
* TCP_NODELAY set
* Immediate connect fail for ::1: Cannot assign requested address
*   Trying ::1...
* …
Run Code Online (Sandbox Code Playgroud)

gitlab docker docker-registry traefik

9
推荐指数
1
解决办法
1511
查看次数

Traefik docker image在Windows上不起作用,但在MacOS上起作用?

我有一个由在MacOS上开发的几个Docker映像组成的应用程序,我正在尝试使其在Windows上启动。大部分似乎都在工作,但是有一个Traefik负载均衡器却没有。

在MacOS上它可以正常工作,但是在Windows上,无论我访问哪个URL,它都会给我一个404,即“未找到404页面”的实际内容。

Traefik配置如下所示:

logLevel = "INFO"
defaultEntryPoints = ["http", "https"]
[entryPoints]
  [entryPoints.http]
   address = ":80"
  [entryPoints.https]
   address = ":443"
    [entryPoints.https.tls]
    [entryPoints.https.tls.defaultCertificate]
      certFile = "/certs/cert.pem"
      keyFile = "/certs/cert.pem"
# Connection to docker host system (docker.sock)
[docker]
watch = true
domain = "localhost"
[file]
 [backends]
  [backends.backend-mixpanel]
     [backends.backend-mixpanel.servers]
      [backends.backend-mixpanel.servers.mixpanel]
        url = "https://api.mixpanel.com"
        weight = 10
  [backends.backend-yieldify]
     [backends.backend-yieldify.servers]
      [backends.backend-yieldify.servers.yieldify]
        url = "https://td.yieldify.com/"
        weight = 0
 [frontends]
     [frontends.frontend-mixpanel]
       backend = "backend-mixpanel"
      [frontends.frontend-mixpanel.routes.one]
        rule = "HostRegexp:localhost,{catchall:.*};Path:/mixpanel/{.*};PathPrefixStripRegex:/{mixpanel}"
        priority=10
     [frontends.frontend-yieldify]
       backend = "backend-yieldify"
      [frontends.frontend-yieldify.routes.two]
        rule = "HostRegexp:localhost,{catchall:.*};Path:/yieldify/{.*}"
        priority=0 …
Run Code Online (Sandbox Code Playgroud)

docker traefik

9
推荐指数
1
解决办法
357
查看次数

Traefik v2:404,同时将 HTTP 流量全局路由到 HTTPS

我的问题是我可以路由 HTTPS 流量,但我无法将 HTTP 流量全局重定向到 HTTPS。就我而言,我只需要 HTTPS 流量,因此我想重定向所有传入流量。

目前,当我尝试通过 HTTP 提供我的 URL 时收到 404 错误。我已经在 Treafik 中启用了调试日志,但我在日志中看不到任何问题或异常内容。

此外,我在 Stackoverflow 上看到了一个非常相似的主题,但我们发现,他的错误与我的不同:如何使用 Traefik 2.0 和 Docker Compose 标签将 http 重定向到 https?

以下设置基于此处的博客条目:https : //blog.containo.us/traefik-2-0-docker-101-fc2893944b9d

我的设置

我在我的 swarm 中配置了 Traefik,如下所示:

global:
  checkNewVersion: false
  sendAnonymousUsage: false
api:
  dashboard: true
entryPoints:
  web:
    address: :80
  websecure:
    address: :443
providers:
  providersThrottleDuration: 2s
docker:
  watch: true
  endpoint: unix:///var/run/docker.sock
  swarmMode: true
  swarmModeRefreshSeconds: 15s
  exposedByDefault: false
  network: webgateway
log:
  level: DEBUG
accessLog: {}
certificatesResolvers:
  default:
    acme:
    email: {email} …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-swarm traefik

9
推荐指数
2
解决办法
1万
查看次数

是否可以使用 Traefik 通过 SSL 代理 PostgreSQL?

动机

尝试使用 Let's Encrypt 通过 SSL 使用 Traefik 代理 PostgreSQL 时,我遇到了一个问题。我做了一些研究,但没有很好的记录,我想确认我的观察并给每个面临这种情况的人留下记录。

配置

我使用最新版本的 PostgreSQL v12 和 Traefik v2。我想使用 Let's Encrypt从->通过 TLS构建纯 TCP 流tcp://example.com:5432tcp://postgresql:5432

Traefik 服务配置如下:

  version: "3.6"
    
    services:
    
      traefik:
        image: traefik:latest
        restart: unless-stopped
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
          - "./configuration/traefik.toml:/etc/traefik/traefik.toml:ro"
          - "./configuration/dynamic_conf.toml:/etc/traefik/dynamic_conf.toml"
          - "./letsencrypt/acme.json:/acme.json"
    
        networks:
          - backend
        ports:
          - "80:80"
          - "443:443"
          - "5432:5432"
    
    networks:
      backend:
        external: true
Run Code Online (Sandbox Code Playgroud)

使用静态设置:


[entryPoints]
  [entryPoints.web]
    address = ":80"
    [entryPoints.web.http]
      [entryPoints.web.http.redirections.entryPoint]
        to = "websecure"
        scheme = "https"

  [entryPoints.websecure]
    address = ":443"
    [entryPoints.websecure.http]
      [entryPoints.websecure.http.tls] …
Run Code Online (Sandbox Code Playgroud)

postgresql proxy tcp sni traefik

9
推荐指数
1
解决办法
3116
查看次数