OpenShift 容器平台 3.11
假设在同一个命名空间中有一个客户端 pod 和三个相等的服务器 pod。服务器 pod 可通过服务获得:
apiVersion: v1
kind: Service
metadata:
name: server
spec:
ports:
- name: "8200"
port: 8200
targetPort: 8200
selector:
test.service: server
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800 # default
sessionAffinity: ClientIP
声明只要客户端具有相同的 IP,它的请求就会被转发到同一个服务器 pod(达到 timeoutSeconds 时除外)。这个设置按预期工作了几个月,直到突然请求在两个服务器 pod 之间分发。重新启动客户端 pod 暂时解决了问题,请求仅在一段时间内转发到一个服务器 pod。然而,几天后,同样的问题再次出现。
我的问题:有什么关于 OpenShift 服务sessionAffinity: ClientIP
的吗?这解释了为什么来自具有未更改 IP 的同一客户端的请求可能“突然”分布在两个服务器 pod 之间?
一些额外的上下文:
客户端 pod 在连接到服务器 pod 时会收到一个会话令牌(不是 cookie)。会话令牌缓存在服务器 pod 内,但不在服务器 pod 之间共享。因此,当客户端连接到不同的服务器时,它会收到拒绝会话令牌的权限。然后客户端请求一个新的会话令牌。如果客户端的请求被转发到同一个服务器 pod 并且只是有时服务器发生变化(例如,因为第一台服务器崩溃),上述设置工作正常。但是,如果客户端的请求分布在两个或多个服务器之间,则会话令牌将在每第二个或第三个请求时失效。