访问 Traefik 反向代理背后的网络数据

问题描述 投票:0回答:1

在我的 ubuntu 服务器上,我使用 Traefik 作为反向代理服务器。 Traefik 在 docker 容器中运行,它根据域名将连接转发到也在 docker 容器中运行的其他服务。对于每个容器,我使用 docker-compose.yml 文件。

现在一切都按预期运行,除了服务 Netdata。 Netdata是使用network_mode:host配置的,这意味着netdata直接连接到主机的端口,在本例中为端口19999。我试图实现的是Traefik将对netdata的请求转发到主机的19999端口。发生的情况是“重定向太多”错误。

这是我的 Traefik 的 docker-compose.yml 的样子:

version: '3.9'

services:
  traefik:
    image: traefik:v3.0
    ports:
      - 80:80
      - 443:443
    expose:
      - 8080
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./letsencrypt:/letsencrypt
      - ./log:/var/log
    command:
      - --log.level=INFO
      - --log.filepath=/var/log/traefik.log
      - --accesslog=true
      - --accesslog.filepath=/var/log/access.log

      - --api.dashboard=true

      - --providers.docker.network=proxy
      - --providers.docker.exposedByDefault=false

      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --entryPoints.web.http.redirections.entrypoint.scheme=https

      - --entrypoints.websecure.address=:443
      - --entrypoints.websecure.asDefault=true
      - --entrypoints.websecure.http.tls.certresolver=tlsresolver

      - [email protected]
      - --certificatesresolvers.tlsresolver.acme.tlschallenge=true
      - --certificatesresolvers.tlsresolver.acme.storage=/letsencrypt/acme.json
 labels:
      - traefik.enable=true
      # dashboard
      - traefik.http.routers.dashboard.rule=Host(`dashboard.mycoolwebapp.io`)
      - traefik.http.services.dashboard.loadbalancer.server.port=8080
      - traefik.http.routers.dashboard.service=api@internal
      - traefik.http.routers.dashboard.middlewares=api-auth
      - traefik.http.middlewares.api-auth.basicauth.users=xxxx:$$apr1$$xxxxx$xxxxxxxxxx/
      # netdata
      - traefik.http.routers.netdata.rule=Host(`netdata.mycoolwebapp.io`)
      - traefik.http.routers.netdata.service=netdata
      - traefik.http.services.netdata.loadbalancer.server.port=19999

networks:
  proxy:
    external: true
    name: proxy

我的 Netdata 的 docker-compose.yml 非常基本:

version: '3'
services:
  netdata:
    image: netdata/netdata
    container_name: netdata
    pid: host
    network_mode: host
    restart: unless-stopped
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
      - ./netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata
      - /etc/passwd:/host/etc/passwd:ro
      - /etc/group:/host/etc/group:ro
      - /etc/localtime:/etc/localtime:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /etc/os-release:/host/etc/os-release:ro
      - /var/log:/host/var/log:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /run/dbus:/run/dbus:ro

volumes:
  netdatalib:
  netdatacache:

我的想法是让 Traefik 将请求转发到主机(服务器)的端口 19999 上的 localhost。 但它似乎不起作用,它不知何故导致了太多的请求。

我希望你们能看到这个问题,但我有点卡在这里。

linux docker ubuntu traefik netdata
1个回答
0
投票

当使用标签进行 Traefik Docker 配置发现时,它们始终需要放置在目标容器上,因为这将是 Traefik 将代理/转发请求到的目标容器。

如果网络数据服务/容器上的标签不起作用,因为它使用主机网络,那么我会尝试动态配置文件,它可以使用任何目标IP,并由静态配置中的

providers.file
加载(example ).

© www.soinside.com 2019 - 2024. All rights reserved.