当前位置: 首页 > 知识库问答 >
问题:

具有会话亲和力的 OpenShift 服务将流量转发到两个 pod

公羊曜灿
2023-03-14

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 html" target="_blank">声明,只要客户端具有相同的 IP,其请求就会转发到同一个服务器 pod(除非达到超时秒数)。这种设置按预期工作了几个月,直到突然间请求分布在两个服务器 Pod 之间。重新启动客户端 Pod 暂时解决了该问题,并且请求仅在一段时间内转发到一个服务器 Pod。但是,几天后,同样的问题再次出现。

我的问题:是否有关于OpenShift服务和sessionAffinity:ClientIP的任何内容可以解释为什么来自具有未更改IP的同一客户端的请求可能会“突然”分布在两个服务器Pod之间?

一些附加上下文:

客户端pod在连接到服务器pod时会收到一个会话令牌(不是cookie)。会话令牌缓存在服务器单元内,但不在服务器单元之间共享。因此,当客户端连接到不同的服务器时,它将收到对会话令牌的拒绝权限。然后,客户端请求新的会话令牌。如果客户端的请求被转发到同一个服务器pod,并且只是在某些时候服务器发生了变化(例如,因为第一个服务器崩溃了),那么上面的设置工作正常。但是,如果客户端的请求分布在两个或更多服务器之间,则会话令牌将在每第二个或第三个请求时无效。

共有1个答案

斜和硕
2023-03-14

查看Kubernetes proxysocket源,我们假设长连接时间(250 ms以上)会触发新endpoint的选择。

我们现在不再通过 OpenShift 服务在服务器之间分发客户端连接,而是在客户端和服务器之间使用额外的 nginx pod。

 类似资料:
  • 我有一个方法要调用一个存储函数。我希望它异步地完成它的工作。这就是我所拥有的,但似乎.doWork()从未启动,因为当我调用<code>getDao时。deleteAll(),存储的函数不运行。 我看到记录器已经记录了,但它从未到达为什么会发生这种情况?

  • 轮毂启动命令: 节点启动命令: 环境详细信息(根据评论更新):Selenium 3.11.0、Chrome 66、ChromeDriver 2.38 当我尝试运行它时,会出现以下错误: 有人知道我做错了什么吗?

  • 我试图使用Apache的代理/反向代理特性,将来自IBM IHS(8.5)/Apache的请求作为passthrough转发到openshift上托管的服务。当我尝试从浏览器访问URL“https://abc.online.com/”时,我会得到错误“503 service not available”,但代理被配置为URL“https://xyz.online.com/”,并且在openshif

  • 假设我们有两个微服务和,如果我们的用户想上传一个头像。请求应该由网关直接路由到还是?从cohesion的角度来看,所有其他信息都是由服务处理的,处理上传请求并将请求转发到更有意义。从性能的角度来看,这完全是对带宽和CPU的浪费。

  • 将我的KieSession序列化为字节[]时,我遇到了一个未实现的情况。我以字节[]格式将规则保存在数据库中。 下面是我用来创建KieSession的一段代码: 我有大约1K个永久事实,当向我的Spring Boot应用程序发出HTTP请求时,我需要复制我的KieSession字节,将其反序列化为KieSession,插入大约1K个临时事件、fireAllRules和dispose。这样,我就可以

  • TL;DR:我想在nginx入口控制器上通过SSL passthrough在K8s中设置基于cookie的会话关联性——可以这样做吗? 嘿所有人, 我有一个正在运行的Azure Kubernetes服务(AKS)(1.11.3),并配置了NGINX入口控制器,将请求路由到我的应用程序的ClusterIP服务(该应用程序至少运行两个pod)。 我已经成功地在入口控制器上配置了SSL直通,以便TLS在