Kubernetes环境下基于ClientIP的sessionAffinity是否支持UDP协议?
结论
将Cluster 2中接收请求的Service的sessionAffinity设置为ClientIP完全可以满足你的需求,UDP无连接的特性不会影响该会话亲和性规则生效。
原理说明
Kubernetes的ClientIP类型会话亲和性的核心逻辑是基于数据包的源IP地址做哈希映射,和传输层协议是否有连接状态无关:
- 只要来自同一个源IP的数据包到达kube-proxy,就会被转发到哈希映射对应的同一个后端Pod,只要该Pod处于正常运行状态
- 该规则对TCP、UDP、SCTP等所有四层传输协议统一生效,不会因为UDP无连接的特性出现匹配失效的问题
场景适配注意事项
为了保证亲和性稳定生效,需要注意两个配置细节:
- 源IP保留配置
如果Cluster 2的Service使用NodePort类型,默认的externalTrafficPolicy: Cluster配置会导致跨节点转发的数据包被SNAT修改源IP为节点IP,可能破坏亲和性。建议将Service的externalTrafficPolicy设置为Local,全程保留请求源IP:
如果使用spec: externalTrafficPolicy: Local sessionAffinity: ClientIPLoadBalancer类型的Service,只要你的基础设施负载均衡默认保留客户端源IP,无需额外修改即可正常生效。 - 会话超时调整
ClientIP会话亲和性默认的超时时间为10800秒(3小时),如果Pod A的请求间隔超过3小时,亲和性映射会自动过期,下次请求会重新分配后端Pod。你可以根据业务需求调整超时时间:spec: sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 86400 # 可自定义为需要的时长,单位为秒
内容的提问来源于stack exchange,提问作者Nish
相关产品推荐
相关产品推荐

