使用负载均衡器时在kubernetes日志中查看客户端ip地址

时间:2019-02-14 12:27:59

标签: kubernetes kubernetes-ingress google-kubernetes-engine

我正在GKE上托管我的应用程序。安装在服务器中的kubectl版本为v1.10.11-gke.1,nginx-ingress为nginx-ingress-0.28.2

我想在日志中查看客户端IP地址。目前,我仅能看到Pod IP地址,例如:

2019-02-14 15:17:21.000 EAT 10.60.1.1 - [10.60.1.1] - - [14/Feb/2019:12:17:21 +0000] "GET /user HTTP/2.0" 404 9 "-" "Mozilla/5.0 (Macintosh;

我的服务具有由letencrypt管理的tls。如何在日志中获取客户端IP地址?

screenshot of log files

1 个答案:

答案 0 :(得分:1)

我转载了您在测试中观察到的行为。在我自己的容器日志中,在使用nginx-ingress控制器运行的作业上,假设nginx-ingress-controller服务YAML文件设置为:

,我们只能看到内部IP地址。

externalTrafficPolicy: Cluster

将流量设置为“群集”意味着所有节点都可以接收请求。 “集群模糊了客户端源IP”,请求也可能SNAT'd到具有正在运行的容器的节点。

但是,如果您进行更改:

externalTrafficPolicy: Local

客户端源IP已公开。 “本地”保留客户端源IP,但可能导致流量分配不均衡。这是由于以下事实:网络负载平衡器仅将运行Pod的节点视为正常。这些请求将仅发送到运行状况良好的节点。

一些关于如何在容器中preserve source IP的背景说明以及对使用Type=Nodeport的服务的源IP跃点的进一步阅读对于理解正在发生的事情很有用。