前言
对于后端应用来说,使用有效的负载分发策略,有利于客户端访问到准确、不间断的后端服务,而不至于出现访问无效、失真的情况
分发策略SessionAffinity
基于客户端IP地址进行会话保持/关联的模式,即第1次将某个客户端发起的请求转发到后端的某个Pod上,之后从相同的客户端发起的请求都将被转发到后端相同的Pod上
- 补充
Round-Robin:轮替模式,即将客户端请求代理到合适的后端合适的Pod上
解析
如上图所示,当Client第一次被代理到Backend Pod 1上,为了保证Client后续连接还是能够保证到Backend Pod 1上,需要采取的策略是SessionAffinity,当Client没有这个要求时,即可以随意被代理到某个Pod上,则需要采取的策略是Round-Robin,此策略为默认方式,可不进行配置
应用
需要在k8s的service资源上进行配置,示例如下:
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: ops
spec:
selector:
app: myapp
type: ClusterIP
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
sessionAffinity: ClientIP # 配置sessionAffinity策略
sessionAffinityConfig:
clientIP:
timeoutSeconds: 3600 # 最大会话停留时间
结语
kubenetes documention
Kubernetes Load Balancer
github sessionAffinity example