OpenShift多Pod负载均衡机制及请求未分发问题咨询
检查路由会话亲和性配置
OpenShift Route如果开启了会话粘性(比如基于ClientIP或Cookie),会把同一客户端的请求固定到单个Pod。执行oc get route <你的路由名称> -o yaml查看配置,若spec.sessionAffinity设为ClientIP,或存在spec.sessionAffinityConfig的cookie配置,就会导致请求集中到一个Pod。
解决:修改Route,将spec.sessionAffinity设为None,移除所有粘性相关配置。排查JMeter请求的会话复用问题
若JMeter请求复用了相同的会话Cookie(比如首次请求获取的Spring Session Cookie),路由会依据Cookie将请求转发到同一Pod。
解决:在JMeter中禁用Cookie管理器,或配置每个请求生成独立会话,模拟不同客户端的请求。确认Pod就绪状态
确保第二个Pod处于Ready状态,执行oc get pods查看两个Pod的状态均为Running且就绪数为1/1。若Pod未通过就绪探针,负载均衡器不会将请求分发过去。
解决:检查Pod的就绪探针配置,确保Spring Boot应用启动完成后能返回200状态(比如配置探针路径为/actuator/health,需先启用Spring Boot Actuator)。验证Service端点关联
OpenShift Service仅会将请求分发到关联的Ready状态Pod。执行oc describe service <你的服务名称>查看Endpoints部分,确认两个Pod的IP都在列表中。若只有一个Pod IP,说明Service的标签选择器与Pod标签不匹配。
解决:核对Service的spec.selector字段与Pod的metadata.labels,确保两者标签完全一致。排查上游代理的IP一致性问题
如果客户端与OpenShift之间存在反向代理,所有请求的源IP可能会被替换为代理IP,触发Route的ClientIP粘性策略,导致请求集中到一个Pod。
解决:关闭Route的ClientIP亲和性,或在JMeter中配置IP欺骗,模拟不同源IP的请求。
内容的提问来源于stack exchange,提问作者Peter

