1

从前两天开始,我正在尝试设置一个 traefik 实例,它可以通过 localhost/influx 访问我的 influxdb 2.0 实例的仪表板

tl; dr 这条路线运行良好。当初始请求返回为 200-OK 时会出现问题,它会尝试加载一些 javascript 来加载 gui 和登录页面,但请求中不存在子位置。

这是我所拥有的:

我使用以下命令在 docker 中有一个工作的 traefik 实例:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:ro -v $PWD/traefik/traefik.toml:/traefik.toml -v $PWD/traefik/traefik_dynamic.toml:/traefik_dynamic.toml -p 80:80 -p 433:433 -p 8080:8080 --network skynet --name traefik traefik:latest

traefik.toml:

[entryPoints]
  [entryPoints.web]
    address = ":80"

[providers.docker]
  endpoint = "unix://var/run/docker.sock"
  network = "skynet"
  watch = true

[api]
  dashboard = true
  insecure = true

[providers.file]
  filename = "traefik_dynamic.toml"

traefik_dynamic.toml 文件:

  users = [
    "user:pass"
  ]

[http.routers.api]
  rule = "Host(`localhost`)"
  entrypoints = ["web"]
  middlewares = ["simpleAuth"]
  service = "api@internal"

我使用以下配置设置了一个 influx-docker (v2):

docker run -d --name influx --network skynet -v $PWD/config.yml:/etc/influxdb2/config.yml -v $PWD/data:/var/lib/influxdb2 --label-file ./traefik_labels influxdb:2.0.4

config.yml 不包含任何更改,因此默认。

bolt-path: /var/lib/influxdb2/influxd.bolt
e2e-testing: false
engine-path: /var/lib/influxdb2/engine
feature-flags: {}
http-bind-address: ":8086"
influxql-max-select-buckets: 0
influxql-max-select-point: 0
influxql-max-select-series: 0
key-name: ""
log-level: info
nats-max-payload-bytes: 1048576
nats-port: 4222
no-tasks: false
query-concurrency: 10
query-initial-memory-bytes: 0
query-max-memory-bytes: 0
query-memory-bytes: 9223372036854775807
query-queue-size: 10
reporting-disabled: false
secret-store: bolt
session-length: 60
session-renew-disabled: false
storage-cache-max-memory-size: 1073741824
storage-cache-snapshot-memory-size: 26214400
storage-cache-snapshot-write-cold-duration: 10m0s
storage-compact-full-write-cold-duration: 4h0m0s
storage-compact-throughput-burst: 50331648
storage-max-concurrent-compactions: 0
storage-max-index-log-file-size: 1048576
storage-retention-check-interval: 30m0s
storage-series-file-max-concurrent-snapshot-compactions: 0
storage-series-id-set-cache-size: 0
storage-shard-precreator-advance-period: 30m0s
storage-shard-precreator-check-interval: 10m0s
storage-tsm-use-madv-willneed: false
storage-validate-keys: false
storage-wal-fsync-delay: 0s
store: bolt
testing-always-allow-setup: false
tls-cert: ""
tls-key: ""
tls-min-version: "1.2"
tls-strict-ciphers: false
tracing-type: ""
vault-addr: ""

对于我使用的标签文件:

traefik.enable=true
traefik.http.routers.influx-router.entryPoints=web
traefik.http.routers.influx-router.rule=(`/influx`)
traefik.http.middlewares.influx-strip.stripprefix.prefixes=/influx
traefik.http.routers.influx-router.middlewares=influx-strip@docker

使用此配置,我可以在例如 Firefox 中访问 http://localhost 上的 traefik 仪表板。如果我访问 http://localhost/influx 请求就可以很好地解决。

在此处输入图像描述

但是 javascript 缺少 pathPrefix。

在此处输入图像描述

我已经测试过将 http-bind-address 更改为 localhost/influx:8086 或 traefik/influx:8086。甚至是“influx/influx:8086”,因为主机在 docker 网络中是已知的。如果我添加子位置,则永远找不到主机。

问题似乎是一个递归问题。如果我省略任何绑定地址,则流入实例正在侦听 localhost/ 或 ::8086。但随后它也仅使用“/”提供其网址。由于我想通过 /influx 访问它,因此我必须在 traefik 请求服务之前将其剥离。

这就是第一个请求有效的原因,并且由于传递的 url 没有前缀,因此 traefik 找不到/无法解析以下请求。

如果尝试将绑定地址更改为例如 localhost/influx:8086,则流入容器会尝试访问该主机,但由于容器无法完全访问/加载的 traefik 将无法解析此路由并且主机无法访问。

有没有办法使这项工作?我尝试了几种使用正则表达式的解决方法,但最终进入了重定向循环;)

外面有人有类似的设置吗?

4

1 回答 1

1

我有同样的问题,但目前似乎没有解决方案可用的版本> 2。关于这个子路径问题,有一堆 GitHub 问题开放(例如https://github.com/influxdata/influxdb/issues/15721)。

根据我的阅读,可以选择在 Chronograf <v2 中设置基本路径,但在 v2 中的版本中没有。对于 v2,似乎只有一个编译选项。

于 2021-05-30T11:42:41.360 回答