访问Kubernetes负载均衡服务背后的客户端IP地址

时间:2018-10-30 21:08:48

标签: kubernetes openshift

如果我在OpenShift中具有LoadBalancer服务,是否有人知道是否以及如何访问最初执行请求的客户端的原始IP地址?它被负载均衡器的IP地址覆盖。

应该有一种访问该信息的方法-可能在可选的TCP数据中。有人知道吗?

或者也许我可以使用其他方法来转发程序包,而不会丢失该信息,但仍然能够将服务扩展到多个Pod。谢谢您的提示!

最诚挚的问候,多米尼克

OpenShift Master:v3.9.41 Kubernetes Master:v1.9.1

1 个答案:

答案 0 :(得分:1)

从K8s 1.5开始,

IP地址默认是Kubernetes服务中的源NAT,因此您将看不到源IP。对于LoadBalancer服务类型,您可以在其规范中设置externalTrafficPolicy field to Local以保留源IP地址:

$ kubectl patch svc yourservice -p '{"spec":{"externalTrafficPolicy":"Local"}}'

它应该可以解决GCE和Azure cloud providers的问题。对于其他用户,请遵循“跨平台支持”部分here

引自文档:

  

从Kubernetes 1.5开始,仅在部分云提供程序(GCP和Azure)中实现通过Type = LoadBalancer服务对源IP保留的支持。

请注意,当您将externalTrafficPolicy字段设置为Local时,只有Pod运行所在的节点才会显示为正常,因为它们是对服务的答复。

OpenShift使用相同的Kubernetes服务语法。