我有一个小型 Kubernetes on prem 集群(Rancher 2.3.6),由三个节点组成。集群内的部署由外部应用程序动态配置,并且始终将其副本计数设置为 1,因为这些是有状态的应用程序,不需要高可用性。
应用程序通过 NodePort 服务公开到 Internet,其中随机端口和 ExternalTrafficPolicy 设置为 Cluster。因此,如果用户请求三个节点之一,k8s 代理会将请求路由并 s-NAT 到具有应用程序 pod 的正确节点。
至此,一切正常。
当我们添加依赖于请求源 IP 的应用程序时,问题就开始了。由于 s-NAT 将请求 IP 替换为内部 IP,因此此应用程序无法正常工作。
我知道,将服务 ExternalTrafficPolicy 设置为本地将禁用 s-natting。但这也会破坏架构,因为并非每个 pod 都有一个正在运行的应用程序实例。
有没有办法保留原始客户端 IP 并仍然使用内部路由,所以我不必担心请求将落在哪个节点上?