标签: traefik

为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万
查看次数

使用Traefik路由路径

目前我正在尝试使用Traefik为一些docker容器设置一个loadbalancer/reverse代理.我在配置Treafik以使用一些前缀路径使我的应用程序可用时遇到了麻烦.基于这个例子,我能够使用Docker和Docker组合运行基本的Traefik配置.问题是我能够在路径上获得'whoamI'容器,但不能在我的app和其他容器中访问.

例如,我创建了一个docker-compose文件(见下文)来启动whoamI容器和五个Portainer容器(这样人们可以重新创建场景).我希望woamI可以在/wai和Portainer上找到/portainer1.

相反,我可以访问whoamI webserver(via /wai)而不是Portainer(via /portainer1).但是,我能够到达Portainer /portainer2.这两者之间Traefik配置的唯一区别是使用'PathStrip'而不是'Path'.然而,令人烦恼的是,我只能在导航时获得白页/portainer2; 只加载页面标题和一些html.我还启动了一个暴露给主机的Portainer容器,以验证预期的行为(一个普通的Portainer页面).另见下图.

编辑:

有趣的是,我也能够/portainer4/(但不是/portainer4)获得Portainer,从而产生相同的白页.导航到/portainer2/和之间的区别/portainer4/是我注意到Traefik中的一些额外日志记录(见下文).当通过导航到Portainer时/portainer4/,日志中会显示三条额外的行,表示400状态.经过一番调查,我发现这来自于我的浏览器尝试加载其他文件(即javascript文件,favicon和样式表).因此,当/portainer4/我在浏览器中访问Portainer时,它知道需要获取这些额外的文件并尝试这样做(导航时不会发生这种情况/portainer2).当我尝试自己访问文件时,例如导航到/portainer4/ico/favicon.ico,我得到了一个400 Bad Request.最后,导航到/portainer2/ico/favicon.ico的时候看到的是404 page not found.

根据这些结果,我想知道:

  • 为什么我不能在/ portainer1到达Portainer而是在/ portainer2上?
  • 导航到/ portainer2时为什么我看不到完整的Portainer页面?
  • 为什么访问/portainer2/和之间的文件(例如,favicon)之间的行为存在差异/portainer4/
  • 400 Bad Request实际意味着什么以及此问题是否/如何解决此问题

我真的很感激正确方向的一些指示

一些截图: 不同的Treafik路径

泊坞窗,compose.yml:

version: '2'

services:   
  traefik:
    container_name: traefik
    image: traefik
    command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
    ports:
      - "80:80" …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose traefik

8
推荐指数
2
解决办法
7416
查看次数

Is a traefik config with both docker swarm and consul backend possible?

Are the consul and docker swarm configuration backends compatible?

My requirement is that I need to start N traefik containers as a docker service, where they get their dynamic frontends/backends via docker swarm but I also need all N of the traefik containers to use a shared ACME config (i.e. sourced from consul).

I'd like it so that Frontends/backends info should come from the docker swarm, while the ACME config should come from consul. As far as any other static …

docker consul docker-swarm traefik

8
推荐指数
1
解决办法
1560
查看次数

Traefik 错误网关

我有一些奇怪的问题。我有以下设置:一个 docker-host 运行 traefik 作为 LB,为多个站点提供服务。网站大多是 php/apache。HTTPS 由 traefik 管理。每个站点都使用包含以下内容的 docker-compose YAML 启动:

version: '2.3'
services:
  redis:
    image: redis:alpine
    container_name: ${PROJECT}-redis
    networks:
      - internal
  php:
    image: registry.gitlab.com/OUR_NAMESPACE/docker/php:${PHP_IMAGE_TAG}
    environment:
      - APACHE_DOCUMENT_ROOT=${APACHE_DOCUMENT_ROOT}
    container_name: ${PROJECT}-php-fpm
    volumes:
       - ${PROJECT_PATH}:/var/www/html:cached
       - .docker/php/php-ini-overrides.ini:/usr/local/etc/php/conf.d/99-overrides.ini
    ports:
      - 80
    networks:
      - proxy
      - internal
    labels:
      - traefik.enable=true
      - traefik.port=80
      - traefik.frontend.headers.SSLRedirect=false
      - traefik.frontend.rule=Host:${PROJECT}
      - "traefik.docker.network=proxy"

networks:
  proxy:
    external:
      name: proxy
  internal:
Run Code Online (Sandbox Code Playgroud)

(作为 PHP,我们使用 5.6.33-apache-jessie 或 7.1.12-apache fe)

除了上述之外,一些网站还获得以下标签:

traefik.docker.network=proxy
traefik.enable=true
traefik.frontend.headers.SSLRedirect=true
traefik.frontend.rule=Host:example.com, www.example.com
traefik.port=80
traefik.protocol=http
Run Code Online (Sandbox Code Playgroud)

我们得到的是一些请求以 502 Bad Gateway …

load-balancing docker bad-gateway traefik

8
推荐指数
4
解决办法
3万
查看次数

如何将 traefik 配置为单个域和多个路径的反向代理

我正在将 Traefik 配置为在我的开发环境中用作反向代理。我目前有应用程序在不同的端口和不同的路径上运行。

我的环境:

Traefik 在主机 (192.168.0.10) 上运行。侦听端口 80、443 和 8080(traefik 仪表板)。

我的应用程序在不同的主机 (192.168.0.11) 上运行。

Web 应用程序:192.168.0.11:8200/web1 后端:192.168.0.11:8210/api1 其他 Web 应用程序:192.168.0.11:8300/web2 其他后端:192.168.0.11:8310/api

我想使用 Traefik + LetsEncrypt (acme) 通过同一个子域 (dev.domain.com) 重定向所有这些应用程序。

例如:

当我访问 dev.domain.com/web1 时,我想将所有访问重定向到 192.168.0.11:8200/web1

当我访问 dev.domain.com/api1 时,我想将所有访问重定向到 192.168.0.11:8210/api1

等等..

以下是我正在使用的设置、Traefik 版本等。

traefil.toml

debug = true
logLevel = "DEBUG"
InsecureSkipVerify = false
defaultEntryPoints = ["https", "http"]

[api]
  entryPoint = "traefik"
  dashboard = true
  address = ":8080"

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls] …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy traefik

8
推荐指数
1
解决办法
5304
查看次数

acme.json 的 traefik 权限 777 太开放,请使用 600

是的,当我尝试使用 https 运行 traefik 时,我得到了这个。问题是我在我的 Win7 机器上安装了目录,但我无法修改文件。

挂载正在运行,但文件权限已关闭。

看起来像这样:

volumes
  - d:/docker/traefikcompose/acme/acme.json:/etc/traefik/acme/acme.json:rw
Run Code Online (Sandbox Code Playgroud)

traefik | time="2018-09-04T12:57:11Z" level=error msg="启动提供程序时出错 *acme.Provider: 无法获取 ACME 帐户:/etc/traefik/acme/acme.json 的权限 777 太开放了,请使用 600"

如果我删除 acme.json 文件,我会得到这个:

错误:对于traefik 无法启动服务traefik:b'OCI 运行时创建失败:container_linux.go:348:启动容器进程导致“process_linux.go:402:容器初始化导致\”rootfs_linux.go:58:挂载\\\”/ d/docker/traefikcompose/acme/acme.json\\\" 到 rootfs \\\"/mnt/sda1/var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b72fsd"\\\at\mnt/sda1"\ /var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251/etc/traefik/acme/acme.json\\\"导致\\\"not a directory"尝试挂载:\"目录到文件(或反之亦然)?检查指定的主机路径是否存在并且是预期的类型'

windows-7 docker lets-encrypt traefik

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

在单个服务器上运行Kubernetes是否有意义?

我正在使用Docker,我已经实现了一个系统,该系统使用Traefik(* .dev.domain.com)和Docker Compose模板,基于Git分支部署环境(在单个服务器上)。

我喜欢Kubernetes,因为我的基础架构仅限于一台服务器,所以从未使用过它。我只在本地安装(Windows的Docker)中使用过它。

因此,我的问题是:在单个服务器上运行Kubernetes“集群”(主节点和节点)来编排和路由容器(代替Traefik / Rancher / Docker Compose)是否有意义?

此用途仅用于开发和暂存,因此高可用性不是先决条件。

谢谢。

docker kubernetes traefik

8
推荐指数
2
解决办法
3086
查看次数

如何使用 traefik 记录 request_body?

如何配置 traefik 在日志文件中记录 request_body?

我的配置文件如下:

traefik.toml 

logLevel="INFO"

defaultEntryPoints = ["http", "https"]

[accessLog]
format = "json"
Run Code Online (Sandbox Code Playgroud)

post logging request traefik

8
推荐指数
1
解决办法
842
查看次数

Kubernetes 上的 Traefik 在传入连接上错误的客户端 IP

我在 Kubernetes 上运行 Traefik,并使用以下配置创建了一个 Ingress:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: whitelist-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
    traefik.ingress.kubernetes.io/whitelist-source-range: "10.10.10.10/32, 10.10.2.10/23"
    ingress.kubernetes.io/whitelist-x-forwarded-for: "true"
    traefik.ingress.kubernetes.io/preserve-host: "true"
spec:
  rules:
  - host:
    http:
      paths:
      - path: /endpoint
        backend:
          serviceName: endpoint-service
          servicePort: endpoint-port
---
Run Code Online (Sandbox Code Playgroud)

当我在上述端点上执行 POST 时,Traefik 记录传入 IP 为 172.16.0.1,因此未触发我的白名单。做一个 ifconfig 我看到 IP 属于 Docker

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.26.0.1  netmask 255.255.0.0  broadcast 172.26.255.255
Run Code Online (Sandbox Code Playgroud)

如何保留原始 IP 而不是 docker IP?

编辑

Traefik 作为 LoadBalancer 公开,端口是 443 通过 SSL

这是它的yml配置

---
kind: Service
apiVersion: …
Run Code Online (Sandbox Code Playgroud)

networking docker kubernetes traefik traefik-ingress

8
推荐指数
1
解决办法
3853
查看次数

Traefik 2.0+ TCP 和 postgres

我正在尝试为路由 postgres 实例设置 traefik。我想我必须在 treafik 2.0 中使用新的 TCP 功能。但是,我正在努力弄清楚。

有人有任何提示或工作示例吗?

我的出发点是“入门”部分,并尝试包含一个 postgres 数据库。我可以访问 whoami 实例,但不能访问 postgres 实例

docker-compose.yaml

version: '2'

services:
  reverse-proxy:
    image: traefik:v2.0.0-alpha3 # The official v2.0 Traefik docker image
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
      - /home/mariufa/tmp/traefik.toml:/etc/traefik/traefik.toml

  whoami:
    image: containous/whoami # A container that exposes an API to show its IP address
    labels:
      - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)" …
Run Code Online (Sandbox Code Playgroud)

traefik

8
推荐指数
1
解决办法
4378
查看次数