我们在ALB入口(ALB负载均衡器)后面运行ms作为pod。我的问题是所有HTTP请求日志都显示集群IP地址,而不是HTTP客户端的IP。有没有其他方法可以让kubernetes服务将此信息传递到我的应用服务器以显示客户端ip地址?即使用java代码usig尝试get.remote.address函数,仍然得到同样的结果。我知道有一个方法“service.spec.externalTrafficPolicy”,但这只适用于GCE,而不适用于AWS。任何帮助!!!!!!
我们在ALB入口(ALB负载均衡器)后面运行ms作为pod。我的问题是所有HTTP请求日志都显示集群IP地址,而不是HTTP客户端的IP。有没有其他方法可以让kubernetes服务将此信息传递到我的应用服务器以显示客户端ip地址?即使用java代码usig尝试get.remote.address函数,仍然得到同样的结果。我知道有一个方法“service.spec.externalTrafficPolicy”,但这只适用于GCE,而不适用于AWS。任何帮助!!!!!!
2条答案
按热度按时间sg3maiej1#
您可以将Network Load Balancer与Kubernetes服务一起使用,客户端流量首先在集群分配的nodePort上命中kube-proxy,然后传递给集群中所有匹配的pod。当spec.externalTrafficPolicy设置为默认值Cluster时,传入的LoadBalancer流量可能会被kube-proxy发送到本节点的Pod,也可能会被发送到其他节点的Pod。通过这种配置,客户端IP被发送到kube-proxy,但当数据包到达end pod时,客户端IP显示为kube-proxy的本地IP。
通过将spec.externalTrafficPolicy更改为Local,kube-proxy会将源IP正确转发到end pod,但只会将流量发送到kube-proxy自身运行的节点上的pod。Kube-proxy还为NLB健康检查打开另一个端口,因此流量仅定向到具有与服务选择器匹配的Pod的节点。
nsc4cvqm2#
我能够在cloudfront的帮助下做到这一点。我已经启用了多个标头,然后在日志中传递,如CDN本身的位置和客户端IP,并得到了我的解决方案。