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

标签 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 吃 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

最佳答案

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

externalTrafficPolicy: Cluster

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

但是,如果你改变:

externalTrafficPolicy: Local

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

有关如何 preserve source IP 的一些背景说明在您的容器中,并进一步阅读有关 Type=Nodeport 服务的源 IP 跃点的信息有助于了解正在发生的事情。

关于kubernetes - 使用负载均衡器时在kubernetes日志中查看客户端ip地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690421/

相关文章:

networking - 通过 VPN 从 GKE Pod 流出的流量

kubernetes - 节点导出器和 kubectl top 似乎报告了不同的内存利用率值?

kubernetes - 在 Google Container Engine 上的同一 Kubernetes 集群中的端口 80 上运行多个服务

kubernetes - 后退重启失败的容器kubernetes

kubernetes - 是否可以使用 Kubernetes 动态添加主机到入口?

kubernetes - GKE负载平衡器服务上的最大端口数

docker - 在 kubernetes helm 如何用新的配置值替换 pod

docker - 我无法在 Centos 7 中设置 Kubernetes : Unable to update cni config

kubernetes - 为k8s申请ingress后,为什么服务地址设置为节点的IP地址?

amazon-web-services - Kubernetes (GKE/AWS/Azure) 针对大型作业的扩展