应用路由如何保留用户的来源IP,网上查了找了各种方式都未能解决,希望能够帮忙解决,在线等谢谢
kubesphere ingress 如何保留用户的IP地址
RolandMa1986 你的意思把负载均衡的默认都改成NortPort 然后增加externalTrafficPolicy: Local 就可以解决对吗
这个文档我看到过,它是我想要的是如果单独使用svc NodePort模式的话是没有问题的,一旦使用Ingress 就不行了
RolandMa1986 线上环境都是走的CDN,我需要拿到http_x_forwarded_for 里面的数据,通过应用路由后这个参数也变成空的了
RolandMa1986K零S
cmcc 首先我确认一下我有没有理解错误啊, 你使用CDN的应该是你的静态托管资源吧。这样的请求应该不会走到 ingress。 上面文章的核心是如果你用了负载均衡器,一定要支持7层负载均衡,并且配置转发 X-Real-IP,x-forwarded-for。上面文章是基于青云配置的,你需要根据你的厂商进行配置。
RolandMa1986 上层是没有问题的是4层负载均衡,而且我也保留了用户的源IP,通过NodePort模式配置完externalTrafficPolicy: Local 是可以正常使用的, 这块它不会动7层的数据包所以http 包头部分是完整的,但是需要确保每个node都需要有服务才可以
前面的东西我没有动中间加了层ingress(为了避免资源浪费),接收到数据包源IP和 http headers http_x_forwarded_for 发生了变化导致程序异常,
上面就是我现在遇到的问题,
RolandMa1986K零S
- 你在kubesphere-controls-system 空间下找 kubesphere-router-xxx pod 看一下日志中纪录的ip对不对
- 还有我再确认一下,你是改的kubesphere-router-xxx Service 的模式为externalTrafficPolicy: Local
- 再kubesphere-controls-system 下应该有kubesphere-router-xxx 同名的CM, 修改配置
RolandMa1986 kind: ConfigMap
apiVersion: v1
metadata:
name: kubesphere-router-cloud-tv-nginx
namespace: kubesphere-controls-system
annotations:
control-plane.alpha.kubernetes.io/leader: >-
{"holderIdentity":"kubesphere-router-cloud-tv-6b79b5f878-mt555","leaseDurationSeconds":30,"acquireTime":"2021-07-29T08:50:22Z","renewTime":"2021-07-29T09:14:00Z","leaderTransitions":2}
externalTrafficPolicy: Local
nginx.ingress.kubernetes.io/proxy-body-size: 20m
这样配置吗? 这块不太懂
RolandMa1986K零S
cmcc externalTrafficPolicy: Local 这个是改 Service的配置,不是改这个CM的
RolandMa1986 现在还有两个问题
1、http_x_forwarded_for 只保留了一个IP,(实际有多个)
2、ingress 只有一个节点能够访问该如何解决
RolandMa1986 多谢,我知道原因了
可以分享一下吗,我这边也碰到了问题了获取的ip为127.0.0.6