在 k3s 上使用 Traefik 时,如何获取客户端的真实 IP 地址?

时间:2021-03-19 11:21:51

标签: traefik traefik-ingress k3s

我浏览了许多博客文章和 SO 问题以及 k3s 文档,但仍然无法获得客户端的真实 ip 地址,而不是内部集群 ip 地址。

我使用 Traefik 1.8 安装了标准的 k3s。如几个 github 问题所示,我已将所有服务设置为使用 Clusterip 并为此设置 externalTrafficPolicy: Local for my Traefik 和 apache 服务:https://github.com/k3s-io/k3s/issues/1652

奇怪的是,似乎 Traefik 正在传递任何像 x-forwarded-for 这样的标头,因为如果我手动将带有我的 ip 地址的 x-forwarded-for 添加到我的浏览器请求中,apache 日志中的结果有my ip 以及内部集群 ip 以逗号分隔。

当流量进入应该注入 IP 地址的集群时,是否在 Traefik 实例之前被命中?

1 个答案:

答案 0 :(得分:0)

看起来有很多事情会导致这个问题。就我而言,这是更常见的问题之一。我只需要修补 k3s traefik 清单即可使 hostNetwork: true。

kubectl patch deployment traefik --patch '{"spec":{"template":{"spec":{"hostNetwork":true}}}}'

需要注意的是,不建议手动修改此清单,因为它是由 helm 管理的。因此,如果 helm 进程再次运行或重新安装或更新 k3s,它将恢复,您将不得不再次运行此补丁。您必须修改 traefik 的 k3s helm chart 或实施您自己的代替 k3s 的 helm chart 以保持此更改。