如果我在OpenShift中具有LoadBalancer服务,是否有人知道是否以及如何访问最初执行该请求的客户端的原始IP地址?它被负载均衡器的IP地址覆盖。
应该有一种访问该信息的方法-可能在可选的TCP数据中。有人知道吗?
或者,也许我可以使用其他方法来转发程序包,而不会丢失该信息,但仍然能够将服务扩展到多个Pod。谢谢您的提示!
最好的问候,多米尼克
OpenShift主站:v3.9.41
Kubernetes Master:v1.9.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。
引用自文档:
As of Kubernetes 1.5, support for source IP preservation through Services with Type=LoadBalancer is only implemented in a subset of cloudproviders (GCP and Azure).
请注意,当您将
externalTrafficPolicy
字段设置为Local
时,只有运行pod的节点才会显示为正常,因为它们是对您的服务的答复。OpenShift使用相同的Kubernetes服务语法。
关于kubernetes - 访问Kubernetes负载均衡服务背后的客户端IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53072947/