通过 Docker 中 Traefik 的基本设置,看不到 X-Forwarded-For 中的真实 IP?

dou*_*u91 6 docker traefik

爱上了 Traefik 在 youtube 上的演示,所以我一直在尝试设置它。我的 docker 服务器位于 192.168.0.23。

即使从我的 LAN (192.168.0.144) 中的另一台主机查询时,我总是在 X-Forwarded-For 中获取内部 IP...

curl -H Host:whoami.docker.localhost http://192.168.0.23:8880
Run Code Online (Sandbox Code Playgroud)

节目

Hostname: 20f76fbc038e
IP: 127.0.0.1
IP: 172.22.0.2
GET / HTTP/1.1
Host: whoami.docker.localhost
User-Agent: curl/7.51.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 172.22.0.1
X-Forwarded-Host: whoami.docker.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: c40ba22259b6
X-Real-Ip: 172.22.0.1
Run Code Online (Sandbox Code Playgroud)

当通过公共 IP 从另一个网络调用时,也会发生同样的情况,仍然看到X-Forwarded-For: 172.22.0.1

我的 docker-compose 是基本示例之一......

version: '3'

services:
  reverse-proxy:
    image: traefik
    command: --api --docker
    ports:
      - "8880:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  whoami:
    image: containous/whoami
    labels:
      - "traefik.frontend.rule=Host:whoami.docker.localhost"
      - "traefik.frontend.passHostHeader=true"
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我希望至少能在 X-Forwarded-For 列表中获得发起请求的主机的 IP,正如我在网络上看到的所有示例一样...

奇怪的是,转发字段中显示的 IP 是 docker 网络中服务器的 IP,当从服务器本身而不是从同一网络中的另一台主机或通过互联网执行卷曲时,这才有意义。 ...

cod*_*diz 0

我们在 Kubernetes 中也遇到了同样的问题。然而,我们通过添加以下全局参数解决了这个问题。

globalArguments:
  - "--api.insecure=true"
  - "--entryPoints.web.forwardedHeaders.insecure"
  - "--entryPoints.websecure.forwardedHeaders.insecure"
Run Code Online (Sandbox Code Playgroud)