内容
隐藏
说明
在日常的开发需求中,经常会遇到需要把客户端的请求在经过代理转发之后,与后端源站的节点保持一致,即需要把请求都转发到同一个 pod 里面。例:语音留言,一段话会分成几段发送给服务端,服务端又是分布式的,如果代理服务器没有做会话保持,则会分发到不同节点上,导致消息不连贯。所以我们需要 k8s 的 service 保持会话。
配置
官网也是提供了相应的解决方案: 会话亲和性
在这些代理模型中,绑定到 Service IP:Port 的流量被代理到合适的后端,客户端不需要知道任何关于 Kubernetes、Service 或 Pod 的信息。
如果要确保来自特定客户端的连接每次都传递给同一个 Pod,你可以通过设置 Service 的 .spec.sessionAffinity
为 ClientIP
来设置基于客户端 IP 地址的会话亲和性(默认为 None
)。
会话粘性超时
你还可以通过设置 Service 的 .spec.sessionAffinityConfig.clientIP.timeoutSeconds
来设置最大会话粘性时间(默认值为 10800,即 3 小时)。
说明:
在 Windows 上不支持为 Service 设置最大会话粘性时间。
正文完