【问题标题】:View client ip address in kubernetes logs when using load balancer使用负载均衡器时在 kubernetes 日志中查看客户端 IP 地址
【发布时间】:2019-02-14 12:27:58
【问题描述】:

我在 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;

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

screenshot of log files

【问题讨论】:

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


    【解决方案1】:

    我重现了您在测试中观察到的行为。在我自己的容器日志中,在使用 nginx-ingress 控制器运行的作业中,我们只能看到内部 IP 地址,假设 nginx-ingress-controller 服务 YAML 文件设置为:

    externalTrafficPolicy: Cluster
    

    将流量设置为“集群”意味着所有节点都可以接收请求。 'Cluster obscures the client source IP',请求也可以是 SNAT'd 到具有正在运行的 pod 的节点。

    但是,如果你改变:

    externalTrafficPolicy: Local
    

    客户端源 IP 暴露。 “本地”保留客户端源 IP,但可能导致流量传播不平衡。这是因为只有运行 Pod 的节点才会被网络负载均衡器认为是健康的。请求将仅发送到健康节点。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2016-04-05
      相关资源
      最近更新 更多