从前两天开始,我正在尝试设置一个 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 将无法解析此路由并且主机无法访问。
有没有办法使这项工作?我尝试了几种使用正则表达式的解决方法,但最终进入了重定向循环;)
外面有人有类似的设置吗?