我使用ingress亲和会话来保持客户端和pod之间的通信。因为粘性会话可能会导致pod过载(客户端保持相同的pod(。
我正在寻找有关参数nginx.ingress.kubernetes.io/session-cookie-max-age
的最佳实践。
示例值为172 800(秒(,这意味着48小时。为什么?这是一个巨大的持续时间,有可能设置为30分钟吗?顺便问一下,当应用程序会话过期时会发生什么?入口是重新平衡客户端还是保持相同的pod?
这是一个示例文档,您不需要使用其中提供的确切值。
您可以将其设置为所需的任何值,但是将max-age
和expires
设置为时间太短,后端将经常重新平衡。这是另一个问题的答案——是的,ingress将重新平衡客户端。
有两个与年龄相关的可选属性可以使用:
Expires=<date>
将cookie的最长生存期表示为HTTP日期时间戳。在发生入侵的情况下,它被设置为一个数字。
Max-Age=<number>
指示cookie过期前的秒数。零或负数将使cookie立即过期。
重要!如果同时设置了Expires
和Max-Age
,则Max-Age
具有优先级。
以下是cookiemax-age
和expires
设置为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