Kubernetes sessionaffinity 会话保持

2018/11/02 Kubernetes

1、Ingress 配置 Sticky Session

官方文档:https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/affinity/cookie

基于 cookie 对后端多个 Pod 节点做会话绑定,同一个客户端请求始终发往同一个 Pod 。

Ingress 会话粘性是通过Ingress上的3个注释实现的,如下:

Name Description Values
nginx.ingress.kubernetes.io/affinity 设置关联类型 字符串在NGINX中只有cookie可以
nginx.ingress.kubernetes.io/session-cookie-name 设置cookie名称 字符串,默认是 INGRESSCOOKIE
nginx.ingress.kubernetes.io/session-cookie-hash 将在cookie值中使用的哈希类型 sha1/md5/index

官方给出的示例如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-test
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"

spec:
  rules:
  - host: stickyingress.example.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /

2、Service 配置 sessionaffinity ClientIP

sessionAffinity: ClientIP
sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800

这样就开启了 session 保持。下面的 timeoutSeconds 指的是 session 保持的时间,这个时间默认是 10800 秒,也就是三个小时。

那么原理是啥呢?当不设置 session 保持时,service 向后台 pod 转发规则是轮询。当设置了 session 保持之后,k8s会根据访问的ip来把请求转发给他以前访问过的pod,这样 session 就保持住了。

  • 参考资料

  • https://blog.csdn.net/bingzhilingyi/article/details/79862791

Search

    Table of Contents