k3s默认使用traefik作为流量入口,且默认 traefik节点直接暴露在公网,于是当traefik节点没有公网ip或者运行在其他反向代理、负载均衡器之后时,应用获取到的客户端ip都是traefik的ip,这时要 配置信任前边反向代理软件或负载均衡器传递的 客户端ip才能获取真正的客户端ip。
如图所示 traefik运行在nginx之后whoami应用获取到的ip是traefik节点的内网ip
下面 分步骤演示一下解决这个问题的操作流程。
1 登陆rancher ui导航到k3s集群管理页: 在 应用->已安装的应用 中找到traefik图表 在其后菜单中点击《编辑/升级》
注意:命名空间要选系统命名空间或者全部命名空间,不然看不到traefik应用,因为它默认安装在kube-system命名空间下 这属于系统命名空间
2 编辑traefik应用时记得勾选 在安装前自定义helm选项
3 编辑yaml中的 additionalArguments: []
additionalArguments:
- '--entryPoints.web.proxyProtocol.trustedIPs=127.0.0.1/32,10.0.0.0/8,192.168.0.0/16'
- '--entryPoints.web.forwardedHeaders.trustedIPs=127.0.0.1/32,10.0.0.0/8,192.168.0.0/16'
参数变化如图所示,注意:10.0.0.0/8和192.168.0.0/16分代表traefik自身网段和上游反向代理或者负载均衡器节点网段,二者缺一不可。
下一步 更新
更新完成
4 验证:刷新应用即可获取到真实的客户端ip
发表回复