是否可以在Google Container Engine群集中找到传入的IP地址?

时间:2016-08-06 15:11:52

标签: kubernetes google-kubernetes-engine

部署在GKE Kubernetes集群中的nginx访问日志(类型为LoadBalancer Kubernetes服务)显示内部IP而不是真实访客IP。

有没有办法在任何地方找到真正的IP?也许是GKE / Kubernetes提供的一些日志文件?

3 个答案:

答案 0 :(得分:1)

现在,type: LoadBalancer服务执行双跳。外部请求在所有群集节点之间平衡,然后在实际服务后端之间进行kube-proxy平衡。

kube-proxy对请求进行NAT。例如。从1.2.3.4100.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配置:

  1. 负载均衡器IP
    即您在日志中看到的IP而不是当前的真实客户端IP

  2. 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;
...
}

我是一个快乐的露营者:)