【问题标题】:Ingress affinity session max age入口亲和会话最大年龄
【发布时间】:2022-03-15 16:59:38
【问题描述】:

我正在使用入口亲和会话来保持客户端和 pod 之间的通信。因为粘性会话可能会导致 pod 过载(客户端保持相同的 pod)。

我正在寻找关于参数nginx.ingress.kubernetes.io/session-cookie-max-age 的最佳实践。

示例值为 172 800(秒),表示 48 小时。 为什么?这是一个巨大的持续时间,是否可以将其设置为 30 分钟? 顺便问一下,当应用程序会话过期时会发生什么? Ingress 是重新平衡客户端还是保持相同的 pod?

【问题讨论】:

  • 您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是使用裸机安装还是某些云提供商?
  • 您是否尝试更改 session-cookie-expires 和 session-cookie-max-age 的值?

标签: kubernetes kubernetes-ingress sticky-session


【解决方案1】:

这是一个示例文档,您不需要使用其中提供的确切值。

您可以将其设置为您想要的任何值,但是将max-ageexpires 设置的时间太短,后端将过于频繁地重新平衡。这是另一个问题的答案 - 是的,入口将重新平衡客户端。

您可以使用两个与其年龄相关的可选属性:

  • Expires=<date>
    

将 cookie 的最长生命周期表示为 HTTP 日期时间戳。在进入的情况下,它被设置为一个数字。

  • Max-Age=<number>
    

表示 cookie 过期前的秒数。零或负数将立即使 cookie 过期。

重要!如果ExpiresMax-Age 都设置了,则Max-Age 优先。


以下是 cookie max-ageexpires 设置为 30 分钟的工作示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-cookie-test
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "test-cookie"
    nginx.ingress.kubernetes.io/session-cookie-expires: "1800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "1800"
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service-name
            port:
              number: 80

并检查它是否可以执行curl 请求(删除了不必要的细节):

$ curl -I example.com
HTTP/1.1 200 OK
Date: Mon, 14 Mar 2022 13:14:42 GMT
Set-Cookie: test-cookie=1647263683.046.104.525797|ad50b946deebe30052b8573dcb9a2339; Expires=Mon, 14-Mar-22 13:44:42 GMT; Max-Age=1800; Path=/; HttpOnly

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 2020-07-26
    • 2018-10-29
    • 2016-03-30
    • 2014-07-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多