首页 > 解决方案 > 在 k3s 上使用 Traefik 时如何获取客户端的真实 IP 地址?

问题描述

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

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

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

当流量进入应该注入 IP 地址的集群时,是否有一些东西在 Traefik 实例之前被击中?

标签: traefiktraefik-ingressk3s

解决方案


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

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

需要注意的是,不建议手动修改这个 manifest,因为它是由 helm 管理的。因此,如果 helm 进程再次运行或重新安装或更新 k3s,它将恢复,您将不得不再次运行此补丁。您必须为 traefik 修改 k3s helm 图表或实施您自己的图表来代替 k3s 以使此更改生效。


推荐阅读