在 k3s 上使用 Traefik 时如何获取客户端的真实 IP 地址?
Posted
技术标签:
【中文标题】在 k3s 上使用 Traefik 时如何获取客户端的真实 IP 地址?【英文标题】:How can I get the real ip address of a client when using Traefik on k3s? 【发布时间】:2021-06-16 19:19:44 【问题描述】:我浏览了许多博客文章和 SO 问题以及 k3s 文档,但仍然无法获得客户端的真实 IP 地址,而不是内部集群 IP 地址。
我使用 Traefik 1.8 安装了标准的 k3s。如几个 github 问题所示,我已将所有服务设置为使用 Clusterip,并为我的 Traefik 和 apache 服务设置 externalTrafficPolicy: Local:https://github.com/k3s-io/k3s/issues/1652
奇怪的是,Traefik 似乎传递了任何像 x-forwarded-for 这样的标头,因为如果我手动将带有我的 IP 地址的 x-forwarded-for 添加到我的浏览器请求中,则 apache 日志中的结果有我的 ip 以及内部集群 ip 用逗号分隔。
当流量进入应该注入 IP 地址的集群时,是否有什么东西在 Traefik 实例之前被命中?
【问题讨论】:
【参考方案1】:看来有很多事情会导致这个问题。就我而言,这是更常见的问题之一。我只需要修补 k3s traefik 清单即可拥有 hostNetwork: true。
kubectl patch deployment traefik --patch '"spec":"template":"spec":"hostNetwork":true'
需要注意的是不建议手动修改这个manifest,因为它是由helm管理的。因此,如果 helm 进程再次运行或重新安装或更新 k3s,它将恢复,您将不得不再次运行此补丁。您必须为 traefik 修改 k3s helm 图表或实施您自己的图表来代替 k3s 以使此更改生效。
【讨论】:
以上是关于在 k3s 上使用 Traefik 时如何获取客户端的真实 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章
在k3s中启用其自带ingress——traefik的web-ui
对于 k3s 中的 Traefik Ingress Controller,禁用 TLS 验证