nginx-ingress通过nginx.ingress.kubernetes.io/affinity配置cookie会话保持
【摘要】 nginx-ingress 通过nginx.ingress.kubernetes.io/affinity配置cookie会话保持
一、背景
使用ingress-nginx承接业务南北向流量,部分业务需要实现前端服务到后端服务的会话保持,即同一客户端访问固定的后端pod实例。
二、实现方案
该方案通过annotation配置实现基于cookie会话保持。通过在ingress资源annotation里配置nginx.ingress.kubernetes.io/affinity、nginx.ingress.kubernetes.io/affinity-mode实现。涉及配置如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
namespace: test
annotations:
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/affinity-mode: persistent
spec:
rules:
- host: www.nginx.com
http:
paths:
- path: /
backend:
service:
name: nodeport-ingress
port:
number: 80
property:
ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
pathType: ImplementationSpecific
ingressClassName: nginx tls: []
- nginx.ingress.kubernetes.io/affinity: cookie #开启会话保持(固定写法)
-
nginx.ingress.kubernetes.io/affinity-mode: #支持2种session保持模式
-
balanced:ingress关联的后端部署规模扩大后,将重新分配一些会话,从而重新平衡服务器上的负载。
-
persistent:ingress关联的后端部署规模扩大后,不会重新平衡与新服务器的会话,提供了最大的粘性。
-
三、效果验证
- 创建应用,并配置ingress资源
- 使用curl命令多次访问,在访问中扩容副本,但是会话只转发到同一pod
- 在使用balanced模式下,用如下curl语句多次访问测试,可以看出副本进行了扩容,同一个cookie却路由到了不同的pod实例,说明:balanced进行了平衡分配
订阅本文作者或关注容器魔方
获取更多云原生技术资讯
本文评论区回复“云原生”,即可添加小助手微信k8s2222
领取应季云原生资料一份
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)