zoukankan      html  css  js  c++  java
  • k8s-session共享问题

    k8s session共享问题

    问题

    部署在k8s启用多个副本时,如果有使用socket会遇到Session ID unknown问题:

    解决思路就是能否让session在多个pod中共享。

    解决

    SessionAffinity

    ipvs模式下,如果想确保每次都将来自特定客户端的连接传递到同一个 Pod,可以通过将 service.spec.sessionAffinity 设置为"ClientIP"(默认为"None")来根据客户端的 IP 地址选择session affinity
    会话可通过适当设置 service.spec.sessionAffinityConfig.clientIP.timeoutSeconds 来设置最大会话粘滞时间。(默认值为 10800 秒,即 3 小时,最大 86400,一天)。

    缺点:过了timeoutSeconds后,就不起作用了。

    traefik Sticky sessions

    Traefik版本:2.4

    当启用 Stickiness 后,在初始请求和响应时会设置Cookie以便客户端知道由哪个服务器来处理第一个响应。
    在随后的请求中,要将会话与同一服务器保持活动,客户端会重新发送相同的cookie。

    在ingressroute添加spec.routes.services.sticky

    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: foo
      namespace: bar
    spec:
      entryPoints:
        - foo
      routes:
      - kind: Rule
        match: Host(`test.example.com`)
        services:
        - kind: Service
          name: foo
          namespace: default
          port: 80
          sticky:
            cookie:
              httpOnly: true
              name: traefik-cookie
              sameSite: none
    

    可以看到,请求多个pod时,已经可以使用同一个cookies信息:

    参考

    https://doc.traefik.io/traefik/routing/providers/kubernetes-crd/#kind-ingressroute

    https://kubernetes.io/zh/docs/concepts/services-networking/service/#proxy-mode-ipvs

  • 相关阅读:
    【maven】之打包war依赖子项目jar
    ~~运算符
    ~运算符
    Vuex文档
    vue-cli文档
    express文档
    vue-router 2文档
    Swiper文档
    基于React服务器端渲染的博客系统
    react.JS
  • 原文地址:https://www.cnblogs.com/wzs5800/p/15085233.html
Copyright © 2011-2022 走看看