我正在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地址?
答案 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跃点的进一步阅读对于理解正在发生的事情很有用。