sessionAffinity原理
service会话保持配置
...
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
...
sessionAffinity默认是None,表示轮询。
sessionAffinity取值只有None或者ClientIP。
pkg/proxy/iptables/proxier.go
syncProxyRules函数

iptables规则


第一个请求匹配不上recent模块后走轮询,走完轮询,通过--set记录后端IP,最近默认3小时内有请求就会话保持。这里配置30s。
验证超出timeoutSeconds走轮询
apiVersion: v1
kind: Service
metadata:
name: tomcat
namespace: default
spec:
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 30
type: ClusterIP
selector:
app: tomcat
ports:
- name: http
port: 80
targetPort: 8080
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat
spec:
replicas: 2
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
无Pod异常


无Pod异常情况下后端IP变化
bns4z->jcz4k->bns4z