我已在 AWS EKS 上部署了 AWS 负载均衡器控制器。我已经创建了 k8s Ingress 资源 我正在使用 k8s 部署部署 java web 应用程序。我想确保粘性会话保持以使我的应用程序正常工作。
我已经读过如果我设置以下注释,那么粘性会话将起作用:
alb.ingress.kubernetes.io/target-type: ip
但我看到 ingress 每次都会将请求路由到不同的副本,因为会话 cookie 不持久,导致登录失败。
我在这里缺少什么?
alb.ingress.kubernetes.io/target-type: ip
为必填项。
但是启用粘性的注释是:
alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true
您还可以设置
cookie_duration_settings
。
alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=300
如果您想从 K8s 级别管理摇杆会话,您可以使用,
sessionAffinity: ClientIP
kind: Service
apiVersion: v1
metadata:
name: service
spec:
selector:
app: app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10000
添加一个快速注释,虽然显然是可能的,但如果您依赖 EKS 中的粘性会话,您可能应该重新评估应用程序的实现。 Pod 可能随时被杀死并重新创建,无论粘性与否,您的 cookie 都会消失。是的,它在大多数情况下都可以工作,也许这已经足够好了,但是您可能应该将您关心的任何内容外部化到其他存储/数据库/redis 等上