【问题标题】:How to get client IP address in Kubernetes with service type ClusterIP如何在服务类型 ClusterIP 的 Kubernetes 中获取客户端 IP 地址
【发布时间】:2019-07-17 14:49:04
【问题描述】:

我在 Kubernetes 中使用 ClusterIP 提供服务,并使用 nginx (https://github.com/helm/charts/tree/master/stable/nginx-ingress) 将这些服务公开给互联网。当我尝试在应用程序中获取客户端 IP 地址时,我正在获取集群的节点 IP。如何检索实际的客户端 IP?

我查看了服务中的"externalTrafficPolicy": "Local" 设置,但该服务类型必须是LoadBalancer

我还尝试使用以下方法更新入口注释:

nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Forwarded-For,csrf-token"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://example.com"

但是,它仍然无法正常工作。请指教!

【问题讨论】:

  • 如果您在 iptables 模式下运行 kube-proxy,则从集群内发送到服务类型 ClusterIP 的数据包永远不会进行源 NAT’d per kubernetes.io/docs/tutorials/services/source-ip/…。 kube-proxy 是否在所有节点上以iptables 模式运行?检查所有节点上curl localhost:10249/proxyMode 的输出。
  • @VikramHosakote:我不知道 kube-proxy 是什么。以前从未设置过。

标签: nginx kubernetes


【解决方案1】:

很遗憾,这在今天是不可能的。请参阅https://github.com/kubernetes/kubernetes/issues/67202https://github.com/kubernetes/kubernetes/issues/69811 了解有关此问题的更多讨论。

如果要获取客户端 IP 地址,则需要使用 NodePortLoadBalancer 类型。

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    相关资源
    最近更新 更多