我正在尝试使用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
如果主机是,dummy.localhost那么我可以打开portainer应用程序http://dummy.localhost.但是我想修改它以便我必须使用http://dummy.localhost/portainer.
我已经看到有一些方法可以在为Traefik使用toml文件时执行此操作,但我在部署的docker服务上使用监视模式和标签.
如何在标签中组合多个前端规则,以便可以在主机名和路径上代理此(和任何其他)应用程序?
目前我正在尝试使用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.
根据这些结果,我想知道:
/portainer2/和之间的文件(例如,favicon)之间的行为存在差异/portainer4/我真的很感激正确方向的一些指示
泊坞窗,compose.yml:
version: '2'
services:   
  traefik:
    container_name: traefik
    image: traefik
    command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
    ports:
      - "80:80" …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-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:
(作为 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
我们得到的是一些请求以 502 Bad Gateway …
我正在将 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] …是的,当我尝试使用 https 运行 traefik 时,我得到了这个。问题是我在我的 Win7 机器上安装了目录,但我无法修改文件。
挂载正在运行,但文件权限已关闭。
看起来像这样:
volumes
  - d:/docker/traefikcompose/acme/acme.json:/etc/traefik/acme/acme.json:rw
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"尝试挂载:\"目录到文件(或反之亦然)?检查指定的主机路径是否存在并且是预期的类型'
我正在使用Docker,我已经实现了一个系统,该系统使用Traefik(* .dev.domain.com)和Docker Compose模板,基于Git分支部署环境(在单个服务器上)。
我喜欢Kubernetes,因为我的基础架构仅限于一台服务器,所以从未使用过它。我只在本地安装(Windows的Docker)中使用过它。
因此,我的问题是:在单个服务器上运行Kubernetes“集群”(主节点和节点)来编排和路由容器(代替Traefik / Rancher / Docker Compose)是否有意义?
此用途仅用于开发和暂存,因此高可用性不是先决条件。
谢谢。
如何配置 traefik 在日志文件中记录 request_body?
我的配置文件如下:
traefik.toml 
logLevel="INFO"
defaultEntryPoints = ["http", "https"]
[accessLog]
format = "json"
我在 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
---
当我在上述端点上执行 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
如何保留原始 IP 而不是 docker IP?
编辑
Traefik 作为 LoadBalancer 公开,端口是 443 通过 SSL
这是它的yml配置
---
kind: Service
apiVersion: …我正在尝试为路由 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`)" …traefik ×10
docker ×6
kubernetes ×2
bad-gateway ×1
consul ×1
docker-swarm ×1
lets-encrypt ×1
logging ×1
networking ×1
post ×1
request ×1
windows-7 ×1