use*_*254 5 openshift kubernetes session-affinity
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
Run Code Online (Sandbox Code Playgroud)
该sessionAffinity: ClientIP
声明规定,只要客户端具有相同的 IP,其请求就会转发到同一服务器 pod(除非达到 timeoutSeconds)。这个设置按预期工作了几个月,直到请求突然分配到两个服务器 Pod 之间。重新启动客户端 Pod 暂时解决了该问题,并且请求仅在一段时间内转发到一个服务器 Pod。然而几天后,同样的问题又出现了。
我的问题:是否有任何有关 OpenShift 服务的信息,并sessionAffinity: ClientIP
解释了为什么来自同一客户端且 IP 未更改的请求可能会“突然”分布在两个服务器 Pod 之间?
一些额外的上下文:
客户端 Pod 在连接到服务器 Pod 时会收到会话令牌(不是 Cookie)。会话令牌缓存在服务器 Pod 内部,但不在服务器 Pod 之间共享。因此,当客户端连接到不同的服务器时,它将收到会话令牌的权限被拒绝。然后客户端请求一个新的会话令牌。如果客户端的请求被转发到同一个服务器 Pod,并且仅有时服务器发生更改(例如,因为第一个服务器崩溃),则上述设置可以正常工作。但是,如果客户端的请求分布在两个或多个服务器之间,则会话令牌将在每第二个或第三个请求时失效。
查看 Kubernetes proxysocket源代码,我们假设较长的连接时间(超过 250 毫秒)会触发新端点的选择。
我们现在不再通过 OpenShift 服务在服务器之间分配客户端连接,而是在客户端和服务器之间使用额外的 nginx pod。
归档时间: |
|
查看次数: |
2794 次 |
最近记录: |