部署在GKE Kubernetes集群中的nginx访问日志(类型为LoadBalancer Kubernetes服务)显示内部IP而不是真实访客IP。
有没有办法在任何地方找到真正的IP?也许是GKE / Kubernetes提供的一些日志文件?
答案 0 :(得分:1)
现在,type: LoadBalancer
服务执行双跳。外部请求在所有群集节点之间平衡,然后在实际服务后端之间进行kube-proxy平衡。
kube-proxy对请求进行NAT。例如。从1.2.3.4
到100.99.98.97
的外部负载均衡器的客户端请求在节点中被NAT转为10.128.0.1->10.100.0.123
(节点的私有IP到容器的群集IP)。所以" src ip"你在后端看到的实际上是节点的私有IP。
有一个feature planned,其中包含design proposal,用于保存LoadBalancer服务的客户端IP。
答案 1 :(得分:1)
您可以将real IP module用于nginx。
将您的内部GKE网络作为set_real_ip_from
指令传递,您将在日志中看到真实的客户端IP:
set_real_ip_from 192.168.1.0/24;
通常你会添加到nginx配置:
负载均衡器IP
即您在日志中看到的IP而不是当前的真实客户端IP
kubernetes网络
即 Pods 所在的子网," Docker子网"
答案 2 :(得分:0)
将这些行添加到我的nginx.conf HTTP块中为我解决了这个问题,真正的访问者IP开始在Stackdriver LogViewer中显示:
http {
...
real_ip_recursive on;
real_ip_header X-Forwarded-For;
set_real_ip_from 127.0.0.1;
set_real_ip_from 192.168.0.0/24;
set_real_ip_from 10.0.0.0/8;
...
}
我是一个快乐的露营者:)