背景信息
7层的模式下可以开启基于http cookie和app cookie的会话保持 ,在ingress上开启基于cookie的会话保持需要满足以下条件:
- 确保您已经创建SCE集群,具体操作请参阅创建SCE集群。
- 确保kubectl工具已经连接目标集群。
操作步骤
步骤一:创建工作负载
创建一个nginx工作负载,并确保工作负载的实例个数大于1,部署2个副本,工作负载不需要其他的额外特殊配置。
- 登录容器服务控制台,在左侧菜单栏选择“集群”。
- 在集群列表页面,选择目标集群名称,然后在左侧菜单栏选择“工作负载”下的“无状态”,点击“创建deployment”。
也可以使用yaml创建工作负载,创建nginx工作负载参考如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: registry-huadong1.crs-internal.ctyun.cn/open-source/nginx:1.25-alpine
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
步骤二:创建service服务
为nginx工作负载创建service,注意Session Affinity不需要设置,保持默认值即可。参考如下:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
spec:
ports:
- port: 30003
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP
步骤三:确保当前命名空间已经绑定到一个负载均衡器
步骤四:创建一个生产路由(Ingress)并关联到上述服务(Service)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx-ingress-controller"
spec:
rules:
- host: myingress.com
http:
paths:
- backend:
service:
name: nginx-service
port:
number: 30003
path: /nginx
pathType: Prefix
步骤五:发起服务调用
添加本地hosts映射:ip为Nginx-Ingress-Controller的访问地址; 域名为创建Ingress时填入的域名,如:10.142.232.160 myingress.com。
在浏览器中多次发起对服务的请求,这里没法通过curl来测试验证,因为curl请求时没法保持Cookie。
观察工作负载日志。
结论:浏览器中的请求会全部转发到某一个Pod实例,进行会话保持。